22
33import asyncio
44import concurrent .futures
5+ import copy
56import gzip
67import typing
78from asyncio import Task
2627 Codec ,
2728)
2829from .._errors import check_retriable_error
30+ import logging
2931
32+ _module_logger = logging .getLogger (__name__ )
3033
3134class TopicReaderError (YdbError ):
3235 pass
@@ -62,6 +65,7 @@ class PublicAsyncIOReader:
6265 _closed : bool
6366 _reconnector : ReaderReconnector
6467 _parent : typing .Any # need for prevent close parent client by GC
68+ _logger : logging .Logger
6569
6670 def __init__ (
6771 self ,
@@ -70,8 +74,14 @@ def __init__(
7074 * ,
7175 _parent = None ,
7276 ):
77+ if settings .logger :
78+ self ._logger = settings .logger
79+ else :
80+ self ._logger = _module_logger
81+
7382 self ._loop = asyncio .get_running_loop ()
7483 self ._closed = False
84+ self ._logger = settings .logger
7585 self ._reconnector = ReaderReconnector (driver , settings )
7686 self ._parent = _parent
7787
@@ -139,14 +149,19 @@ class ReaderReconnector:
139149 _settings : topic_reader .PublicReaderSettings
140150 _driver : Driver
141151 _background_tasks : Set [Task ]
152+ _logger : logging .Logger
142153
143154 _state_changed : asyncio .Event
144155 _stream_reader : Optional ["ReaderStream" ]
145156 _first_error : asyncio .Future [YdbError ]
146157
147158 def __init__ (self , driver : Driver , settings : topic_reader .PublicReaderSettings ):
148- self ._id = self ._static_reader_reconnector_counter .inc_and_get ()
159+ if settings .logger :
160+ self ._logger = settings .logger
161+ else :
162+ self ._logger = _module_logger
149163
164+ self ._id = self ._static_reader_reconnector_counter .inc_and_get ()
150165 self ._settings = settings
151166 self ._driver = driver
152167 self ._background_tasks = set ()
@@ -234,6 +249,7 @@ class ReaderStream:
234249 _buffer_size_bytes : int # use for init request, then for debug purposes only
235250 _decode_executor : concurrent .futures .Executor
236251 _decoders : Dict [int , typing .Callable [[bytes ], bytes ]] # dict[codec_code] func(encoded_bytes)->decoded_bytes
252+ _logger : logging .Logger
237253
238254 if typing .TYPE_CHECKING :
239255 _batches_to_decode : asyncio .Queue [datatypes .PublicBatch ]
@@ -255,6 +271,11 @@ def __init__(
255271 settings : topic_reader .PublicReaderSettings ,
256272 get_token_function : Optional [Callable [[], str ]] = None ,
257273 ):
274+ if settings .logger :
275+ self ._logger = settings .logger
276+ else :
277+ self ._logger = _module_logger
278+
258279 self ._loop = asyncio .get_running_loop ()
259280 self ._id = ReaderStream ._static_id_counter .inc_and_get ()
260281 self ._reader_reconnector_id = reader_reconnector_id
@@ -395,34 +416,37 @@ async def _read_messages_loop(self):
395416 )
396417 )
397418 while True :
398- message = await self ._stream .receive () # type: StreamReadMessage.FromServer
399- _process_response (message .server_status )
400-
401- if isinstance (message .server_message , StreamReadMessage .ReadResponse ):
402- self ._on_read_response (message .server_message )
403-
404- elif isinstance (message .server_message , StreamReadMessage .CommitOffsetResponse ):
405- self ._on_commit_response (message .server_message )
406-
407- elif isinstance (
408- message .server_message ,
409- StreamReadMessage .StartPartitionSessionRequest ,
410- ):
411- self ._on_start_partition_session (message .server_message )
412-
413- elif isinstance (
414- message .server_message ,
415- StreamReadMessage .StopPartitionSessionRequest ,
416- ):
417- self ._on_partition_session_stop (message .server_message )
418-
419- elif isinstance (message .server_message , UpdateTokenResponse ):
420- self ._update_token_event .set ()
421-
422- else :
423- raise NotImplementedError (
424- "Unexpected type of StreamReadMessage.FromServer message: %s" % message .server_message
425- )
419+ try :
420+ message = await self ._stream .receive () # type: StreamReadMessage.FromServer
421+ _process_response (message .server_status )
422+
423+ if isinstance (message .server_message , StreamReadMessage .ReadResponse ):
424+ self ._on_read_response (message .server_message )
425+
426+ elif isinstance (message .server_message , StreamReadMessage .CommitOffsetResponse ):
427+ self ._on_commit_response (message .server_message )
428+
429+ elif isinstance (
430+ message .server_message ,
431+ StreamReadMessage .StartPartitionSessionRequest ,
432+ ):
433+ self ._on_start_partition_session (message .server_message )
434+
435+ elif isinstance (
436+ message .server_message ,
437+ StreamReadMessage .StopPartitionSessionRequest ,
438+ ):
439+ self ._on_partition_session_stop (message .server_message )
440+
441+ elif isinstance (message .server_message , UpdateTokenResponse ):
442+ self ._update_token_event .set ()
443+
444+ else :
445+ raise issues .UnexpectedGrpcMessage (
446+ "Unexpected message in _read_messages_loop: %s" % type (message .server_message )
447+ )
448+ except issues .UnexpectedGrpcMessage :
449+ self ._logger .exception ("unexpected message in stream reader" )
426450
427451 self ._state_changed .set ()
428452 except Exception as e :
0 commit comments