@@ -353,6 +353,7 @@ async def _enqueue_message(
353353 # session is closing / closed, raise
354354 raise SessionClosedRiverServiceException (
355355 "river session is closed, dropping message" ,
356+ stream_id ,
356357 )
357358
358359 # Begin critical section: Avoid any await between here and _send_buffer.append
@@ -448,14 +449,15 @@ async def do_close() -> None:
448449
449450 await self ._task_manager .cancel_all_tasks ()
450451
451- for stream_meta in self ._streams .values ():
452+ for stream_id , stream_meta in self ._streams .items ():
452453 stream_meta ["output" ].close ()
453454 # Wake up backpressured writers
454455 try :
455456 stream_meta ["error_channel" ].put_nowait (
456457 reason
457458 or SessionClosedRiverServiceException (
458459 "river session is closed" ,
460+ stream_id ,
459461 )
460462 )
461463 except ChannelFull :
@@ -1023,12 +1025,14 @@ async def _encode_stream() -> None:
10231025 # ... block the outer function until the emitter is finished emitting,
10241026 # possibly raising a terminal exception.
10251027 await emitter_task
1026- except asyncio .CancelledError :
1028+ except asyncio .CancelledError as e :
10271029 await self ._send_cancel_stream (
10281030 stream_id = stream_id ,
10291031 message = "Stream cancelled" ,
10301032 span = span ,
10311033 )
1034+ if emitter_task .done () and (err := emitter_task .exception ()):
1035+ raise e from err
10321036 raise
10331037 except Exception as e :
10341038 await self ._send_cancel_stream (
@@ -1316,6 +1320,7 @@ async def _recv_from_ws(
13161320 # the outer loop.
13171321 await transition_no_connection ()
13181322 break
1323+ msg : TransportMessage | str | None = None
13191324 try :
13201325 msg = parse_transport_msg (message )
13211326 logger .debug (
@@ -1395,19 +1400,27 @@ async def _recv_from_ws(
13951400 stream_meta ["output" ].close ()
13961401 except OutOfOrderMessageException :
13971402 logger .exception ("Out of order message, closing connection" )
1403+ stream_id = "unknown"
1404+ if isinstance (msg , TransportMessage ):
1405+ stream_id = msg .streamId
13981406 close_session (
13991407 SessionClosedRiverServiceException (
1400- "Out of order message, closing connection"
1408+ "Out of order message, closing connection" ,
1409+ stream_id ,
14011410 )
14021411 )
14031412 continue
14041413 except InvalidMessageException :
14051414 logger .exception (
14061415 "Got invalid transport message, closing session" ,
14071416 )
1417+ stream_id = "unknown"
1418+ if isinstance (msg , TransportMessage ):
1419+ stream_id = msg .streamId
14081420 close_session (
14091421 SessionClosedRiverServiceException (
1410- "Out of order message, closing connection"
1422+ "Out of order message, closing connection" ,
1423+ stream_id ,
14111424 )
14121425 )
14131426 continue
0 commit comments