DATA frames received before remote receives RST_STREAM incorrectly ignored
jrobindb opened this issue · comments
David Robins commented
Per RFC 7540, 5.1 Stream States:
Flow-controlled frames (i.e., DATA) received after sending
RST_STREAM are counted toward the connection flow-control window.
Even though these frames might be ignored, because they are sent
before the sender receives the RST_STREAM, the sender will
consider the frames to count against the flow-control window.
Our usage is:
- gRPC over HTTP/2, DATA frames about 4k-8k, ~30/second (video)
- Cancel (terminate) is invoked on the stream causing RST_STREAM to be sent
- Several DATA frames are sent by server before it receives RST_STREAM
- Server reduces connection window size for sent frames (cumulative)
- Connection window eventually reduced to 0, so no more data can be sent
- Dart client ignores frames, so window will never be increased; appears to hang