You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/grpclib/server.py", line 310, in request_handlerawait method.func(stream)
File "/usr/local/lib/python3.6/dist-packages/featureflags/server/rpc/service.py", line 51, in Exchangeawaitself._queue.StoreStats.add(task, timeout=timeout)
File "/usr/local/lib/python3.6/dist-packages/taskqueue/client/queue.py", line 21, in addawaitself._task_queue_stub.Add(task, timeout=timeout)
File "/usr/local/lib/python3.6/dist-packages/grpclib/client.py", line 473, in __call__returnawait stream.recv_message()
File "/usr/local/lib/python3.6/dist-packages/grpclib/client.py", line 286, in recv_messageawaitself.recv_initial_metadata()
File "/usr/local/lib/python3.6/dist-packages/grpclib/client.py", line 221, in recv_initial_metadata
headers =awaitself._stream.recv_headers()
File "/usr/local/lib/python3.6/dist-packages/grpclib/protocol.py", line 215, in recv_headersreturnawaitself.__headers__.get()
File "/usr/lib/python3.6/asyncio/queues.py", line 167, in getyield from getter
concurrent.futures._base.CancelledError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/h2/connection.py", line 585, in _get_or_create_streamreturnself.streams[stream_id]
KeyError: 48141
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/grpclib/server.py", line 325, in request_handlerraise
File "/usr/local/lib/python3.6/dist-packages/grpclib/server.py", line 220, in __aexit__
status_message=status_message)
File "/usr/local/lib/python3.6/dist-packages/grpclib/server.py", line 170, in send_trailing_metadataawaitself._stream.send_headers(headers, end_stream=True)
File "/usr/local/lib/python3.6/dist-packages/grpclib/protocol.py", line 267, in send_headers
end_stream=end_stream)
File "/usr/local/lib/python3.6/dist-packages/h2/connection.py", line 763, in send_headers
stream_id, AllowedStreamIDs(self.config.client_side)
File "/usr/local/lib/python3.6/dist-packages/h2/connection.py", line 587, in _get_or_create_streamreturnself._begin_new_stream(stream_id, allowed_ids)
File "/usr/local/lib/python3.6/dist-packages/h2/connection.py", line 454, in _begin_new_streamraise StreamIDTooLowError(stream_id, highest_stream_id)
h2.exceptions.StreamIDTooLowError: StreamIDTooLowError: 48141 is lower than 48143
This happens when client cancels stream with RST_STREAM, and on the server-side I have a logic which looks like this:
And sometimes I'm getting StreamIDTooLowError exception instead of StreamClosedError, because this behavior depends on H2Connection.streams dictionary, where streams are removed nondeterministically.
I think that H2Connection._get_or_create_stream function should check not only H2Connection.streams but also H2Connection._closed_streams.
Of course I can refactor my code and check that stream is closed by myself, but I still think that there is a bug in H2Connection.send_headers method.
The text was updated successfully, but these errors were encountered:
Hi!
I'm getting errors like this on the server-side:
This happens when client cancels stream with RST_STREAM, and on the server-side I have a logic which looks like this:
And sometimes I'm getting
StreamIDTooLowError
exception instead ofStreamClosedError
, because this behavior depends onH2Connection.streams
dictionary, where streams are removed nondeterministically.I think that
H2Connection._get_or_create_stream
function should check not onlyH2Connection.streams
but alsoH2Connection._closed_streams
.Of course I can refactor my code and check that stream is closed by myself, but I still think that there is a bug in
H2Connection.send_headers
method.The text was updated successfully, but these errors were encountered: