fullstorydev / fullstorydev/grpcurl
No EOS sent for ServerReflectionInfo request
- 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