Skip to content

Commit b7001c8

Browse files
committed
fix: closes tailing streams in bidi classes.
Always put `None` into the request queue when closing a bidi stream. This ensures that the request queue is always signaled as closed, even if the underlying gRPC call object is not yet available.
1 parent 6206ce0 commit b7001c8

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

google/api_core/bidi.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,10 +281,11 @@ def open(self):
281281

282282
def close(self):
283283
"""Closes the stream."""
284+
self._request_queue.put(None)
285+
284286
if self.call is None:
285287
return
286288

287-
self._request_queue.put(None)
288289
self.call.cancel()
289290
self._request_generator = None
290291
self._initial_request = None

tests/unit/test_bidi.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,10 @@ def test_close_no_rpc(self):
305305
bidi_rpc = bidi.BidiRpc(None)
306306
bidi_rpc.close()
307307

308+
# ensure the request queue was signaled to stop.
309+
assert bidi_rpc.pending_requests == 1
310+
assert bidi_rpc._request_queue.get() is None
311+
308312
def test_send(self):
309313
rpc, call = make_rpc()
310314
bidi_rpc = bidi.BidiRpc(rpc)

0 commit comments

Comments
 (0)