Skip to content

Commit 3526fc2

Browse files
committed
try to reorganize acquire logic
1 parent 67faec4 commit 3526fc2

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

ydb/query/pool.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,30 +50,32 @@ def acquire(self, timeout: float) -> QuerySessionSync:
5050
logger.error("An attempt to take session from closed session pool.")
5151
raise RuntimeError("An attempt to take session from closed session pool.")
5252

53+
session = None
5354
try:
5455
_, session = self._queue.get_nowait()
56+
except queue.Empty:
57+
pass
58+
59+
if session is None and self._current_size == self._size:
60+
try:
61+
_, session = self._queue.get(block=True, timeout=timeout)
62+
except queue.Empty:
63+
raise issues.SessionPoolEmpty("Timeout on acquire session")
64+
65+
if session is not None:
5566
if session._state.attached:
5667
logger.debug(f"Acquired active session from queue: {session._state.session_id}")
5768
return session
5869
else:
5970
self._current_size -= 1
6071
logger.debug(f"Acquired dead session from queue: {session._state.session_id}")
61-
except queue.Empty:
62-
pass
63-
64-
if self._current_size < self._size:
65-
logger.debug(
66-
f"Session pool is not large enough: {self._current_size} < {self._size}, will create new one."
67-
)
68-
session = self._create_new_session()
69-
self._current_size += 1
70-
return session
7172

72-
try:
73-
_, session = self._queue.get(block=True, timeout=timeout)
74-
return session if session._state.attached else self._create_new_session()
75-
except queue.Empty:
76-
raise issues.SessionPoolEmpty("Timeout on acquire session")
73+
logger.debug(
74+
f"Session pool is not large enough: {self._current_size} < {self._size}, will create new one."
75+
)
76+
session = self._create_new_session()
77+
self._current_size += 1
78+
return session
7779

7880
def release(self, session: QuerySessionSync) -> None:
7981
with self._lock:

0 commit comments

Comments
 (0)