@@ -221,7 +221,7 @@ async def retry_operation(callee, retry_settings=None, *args, **kwargs): # pyli
221
221
else :
222
222
try :
223
223
return await next_opt .result
224
- except Exception as e : # pylint: disable=W0703
224
+ except BaseException as e : # pylint: disable=W0703
225
225
next_opt .set_exception (e )
226
226
227
227
@@ -236,7 +236,7 @@ def __init__(self, pool, timeout, retry_timeout):
236
236
:param blocking: A flag that specifies that session acquire method should blocks
237
237
:param timeout: A timeout in seconds for session acquire
238
238
"""
239
- self ._pool = pool
239
+ self ._pool : SessionPool = pool
240
240
self ._acquired = None
241
241
self ._timeout = timeout
242
242
self ._retry_timeout = retry_timeout
@@ -251,7 +251,7 @@ async def __aexit__(self, exc_type, exc_val, exc_tb):
251
251
252
252
253
253
class 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 ):
255
255
self ._driver_await_timeout = 3
256
256
self ._should_stop = asyncio .Event ()
257
257
self ._waiters = 0
@@ -286,7 +286,7 @@ async def wrapper_callee():
286
286
287
287
return await retry_operation (wrapper_callee , retry_settings )
288
288
289
- def _create (self ) -> ydb . ISession :
289
+ def _create (self ) -> Session :
290
290
self ._active_count += 1
291
291
session = self ._driver .table_client .session ()
292
292
self ._logger .debug ("Created session %s" , session )
@@ -301,6 +301,9 @@ async def _init_session_logic(self, session: ydb.ISession) -> typing.Optional[yd
301
301
self ._logger .error ("Failed to create session. Reason: %s" , str (e ))
302
302
except Exception as e : # pylint: disable=W0703
303
303
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
304
307
305
308
return None
306
309
@@ -324,7 +327,7 @@ async def _prepare_session(self, timeout, retry_num) -> ydb.ISession:
324
327
if not new_sess :
325
328
self ._destroy (session )
326
329
return new_sess
327
- except Exception as e :
330
+ except BaseException as e :
328
331
self ._destroy (session )
329
332
raise e
330
333
@@ -338,7 +341,7 @@ async def _get_session_from_queue(self, timeout: float):
338
341
_ , session = task_wait .result ()
339
342
return session
340
343
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 :
342
345
343
346
if self ._should_stop .is_set ():
344
347
self ._logger .error ("Take session from closed session pool" )
@@ -408,7 +411,10 @@ def _destroy(self, session: ydb.ISession, wait_for_del: bool = False):
408
411
asyncio .ensure_future (coro )
409
412
return None
410
413
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 ):
412
418
self ._logger .debug ("Put on session %s" , session .session_id )
413
419
if session .closing ():
414
420
self ._destroy (session )
@@ -421,7 +427,8 @@ async def release(self, session: ydb.ISession):
421
427
self ._destroy (session )
422
428
return False
423
429
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 ))
425
432
self ._logger .debug ("Session returned to queue: %s" , session .session_id )
426
433
427
434
async def _pick_for_keepalive (self ):
@@ -445,7 +452,7 @@ async def _send_keep_alive(self, session: ydb.ISession):
445
452
await session .keep_alive (self ._req_settings )
446
453
try :
447
454
await self .release (session )
448
- except Exception : # pylint: disable=W0703
455
+ except BaseException : # pylint: disable=W0703
449
456
self ._destroy (session )
450
457
451
458
async def _keep_alive_loop (self ):
0 commit comments