@@ -221,7 +221,7 @@ async def retry_operation(callee, retry_settings=None, *args, **kwargs): # pyli
221221 else :
222222 try :
223223 return await next_opt .result
224- except Exception as e : # pylint: disable=W0703
224+ except BaseException as e : # pylint: disable=W0703
225225 next_opt .set_exception (e )
226226
227227
@@ -236,7 +236,7 @@ def __init__(self, pool, timeout, retry_timeout):
236236 :param blocking: A flag that specifies that session acquire method should blocks
237237 :param timeout: A timeout in seconds for session acquire
238238 """
239- self ._pool = pool
239+ self ._pool : SessionPool = pool
240240 self ._acquired = None
241241 self ._timeout = timeout
242242 self ._retry_timeout = retry_timeout
@@ -251,7 +251,7 @@ async def __aexit__(self, exc_type, exc_val, exc_tb):
251251
252252
253253class SessionPool :
254- def __init__ (self , driver : ydb .pool . IConnectionPool , size : int , min_pool_size : int = 0 ):
254+ def __init__ (self , driver : " ydb.aio.Driver" , size : int , min_pool_size : int = 0 ):
255255 self ._driver_await_timeout = 3
256256 self ._should_stop = asyncio .Event ()
257257 self ._waiters = 0
@@ -286,7 +286,7 @@ async def wrapper_callee():
286286
287287 return await retry_operation (wrapper_callee , retry_settings )
288288
289- def _create (self ) -> ydb . ISession :
289+ def _create (self ) -> Session :
290290 self ._active_count += 1
291291 session = self ._driver .table_client .session ()
292292 self ._logger .debug ("Created session %s" , session )
@@ -301,6 +301,9 @@ async def _init_session_logic(self, session: ydb.ISession) -> typing.Optional[yd
301301 self ._logger .error ("Failed to create session. Reason: %s" , str (e ))
302302 except Exception as e : # pylint: disable=W0703
303303 self ._logger .exception ("Failed to create session. Reason: %s" , str (e ))
304+ except BaseException as e : # pylint: disable=W0703
305+ self ._logger .exception ("Failed to create session. Reason (base exception): %s" , str (e ))
306+ raise
304307
305308 return None
306309
@@ -324,7 +327,7 @@ async def _prepare_session(self, timeout, retry_num) -> ydb.ISession:
324327 if not new_sess :
325328 self ._destroy (session )
326329 return new_sess
327- except Exception as e :
330+ except BaseException as e :
328331 self ._destroy (session )
329332 raise e
330333
@@ -338,7 +341,7 @@ async def _get_session_from_queue(self, timeout: float):
338341 _ , session = task_wait .result ()
339342 return session
340343
341- async def acquire (self , timeout : float = None , retry_timeout : float = None , retry_num : int = None ) -> ydb . ISession :
344+ async def acquire (self , timeout : float = None , retry_timeout : float = None , retry_num : int = None ) -> Session :
342345
343346 if self ._should_stop .is_set ():
344347 self ._logger .error ("Take session from closed session pool" )
@@ -408,7 +411,10 @@ def _destroy(self, session: ydb.ISession, wait_for_del: bool = False):
408411 asyncio .ensure_future (coro )
409412 return None
410413
411- async def release (self , session : ydb .ISession ):
414+ async def release (self , session : Session ):
415+ self ._release_nowait (session )
416+
417+ def _release_nowait (self , session : Session ):
412418 self ._logger .debug ("Put on session %s" , session .session_id )
413419 if session .closing ():
414420 self ._destroy (session )
@@ -421,7 +427,8 @@ async def release(self, session: ydb.ISession):
421427 self ._destroy (session )
422428 return False
423429
424- await self ._active_queue .put ((time .time () + 10 * 60 , session ))
430+ # self._active_queue has no size limit, it means that put_nowait will be successfully always
431+ self ._active_queue .put_nowait ((time .time () + 10 * 60 , session ))
425432 self ._logger .debug ("Session returned to queue: %s" , session .session_id )
426433
427434 async def _pick_for_keepalive (self ):
@@ -445,7 +452,7 @@ async def _send_keep_alive(self, session: ydb.ISession):
445452 await session .keep_alive (self ._req_settings )
446453 try :
447454 await self .release (session )
448- except Exception : # pylint: disable=W0703
455+ except BaseException : # pylint: disable=W0703
449456 self ._destroy (session )
450457
451458 async def _keep_alive_loop (self ):
0 commit comments