Skip to content

Commit 40821e3

Browse files
authored
Merge pull request #68 from MBogda/fix-stuck-sessions
Fix: release sessions without transaction id.
2 parents 05d9299 + c5ba55a commit 40821e3

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

ydb_sqlalchemy/dbapi/connection.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ def __init__(
5757
self.interactive_transaction: bool = False # AUTOCOMMIT
5858
self.tx_mode: ydb.AbstractTransactionModeBuilder = ydb.SerializableReadWrite()
5959
self.tx_context: Optional[ydb.TxContext] = None
60+
self.session: Optional[ydb.Session] = None
6061
self.use_scan_query: bool = False
6162
self.request_settings: ydb.BaseRequestSettings = ydb.BaseRequestSettings()
6263

@@ -139,22 +140,29 @@ def get_ydb_request_settings(self) -> ydb.BaseRequestSettings:
139140

140141
def begin(self):
141142
self.tx_context = None
143+
if self.session:
144+
self._maybe_await(self.session_pool.release, self.session)
145+
self.session = None
142146
if self.interactive_transaction and not self.use_scan_query:
143-
session = self._maybe_await(self.session_pool.acquire)
144-
self.tx_context = session.transaction(self.tx_mode)
147+
self.session = self._maybe_await(self.session_pool.acquire)
148+
self.tx_context = self.session.transaction(self.tx_mode)
145149
self._maybe_await(self.tx_context.begin)
146150

147151
def commit(self):
148152
if self.tx_context and self.tx_context.tx_id:
149153
self._maybe_await(self.tx_context.commit)
150-
self._maybe_await(self.session_pool.release, self.tx_context.session)
151154
self.tx_context = None
155+
if self.session:
156+
self._maybe_await(self.session_pool.release, self.session)
157+
self.session = None
152158

153159
def rollback(self):
154160
if self.tx_context and self.tx_context.tx_id:
155161
self._maybe_await(self.tx_context.rollback)
156-
self._maybe_await(self.session_pool.release, self.tx_context.session)
157162
self.tx_context = None
163+
if self.session:
164+
self._maybe_await(self.session_pool.release, self.session)
165+
self.session = None
158166

159167
def close(self):
160168
self.rollback()

0 commit comments

Comments
 (0)