fullstorydev / fullstorydev/grpcurl

No EOS sent for ServerReflectionInfo request

Open
#189 5 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
12.8k
Forks
580
Avg merge
1h 8m
Merged PRs (30d)
5

Description

While working with grpcurl with some HTTP/2 proxies between `grpcurl` and the gRPC server, I noticed that for the following request:
```
$ grpcurl -v -plaintext -d '{"name": "Laurent"}' localhost:8080 helloworld.Greeter/SayHello
```
`grpcurl` actually sends 2 requests:
- a first one to `/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo` (to get the proto definition if I'm right)
- a second one which is the actual call to the requested service `/helloworld.Greeter/SayHello`

But I noticed that the first request does not send the EOS (End Of Stream) flag .
So if the proxy in between, instead of streaming directly the incoming request, buffers the request (for whatever reason), it waits indefinitely for the EOS flag.

Based on the following document https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md I think the DATA frame of the `ServerReflectionInfo` request should be flagged with `END_STREAM`.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reproducing the grpcurl command with an HTTP/2 proxy that buffers requests, then trace the ServerReflectionInfo request and its DATA framing. Done means the reflection request sends END_STREAM so the proxy does not wait indefinitely before forwarding it.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, grpc
Domain
api, networking
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.