summaryrefslogtreecommitdiffstats
path: root/contrib/python
diff options
context:
space:
mode:
authorrobot-piglet <[email protected]>2026-04-28 07:50:56 +0300
committerrobot-piglet <[email protected]>2026-04-28 08:04:40 +0300
commit92d4e7d90274c11f6cf619ebcb561f92c08cd149 (patch)
tree891a41701ea187dd37d3f8f7c8760d821c25a14f /contrib/python
parentb43d16290e56ff33972f637a0b7410f966988871 (diff)
Intermediate changes
commit_hash:920d7eff2d07d52548510bbf182e9318d21c8c2d
Diffstat (limited to 'contrib/python')
-rw-r--r--contrib/python/ydb/py3/.dist-info/METADATA2
-rw-r--r--contrib/python/ydb/py3/ya.make2
-rw-r--r--contrib/python/ydb/py3/ydb/aio/query/pool.py1
-rw-r--r--contrib/python/ydb/py3/ydb/aio/query/session.py6
-rw-r--r--contrib/python/ydb/py3/ydb/aio/query/transaction.py2
-rw-r--r--contrib/python/ydb/py3/ydb/query/base.py2
-rw-r--r--contrib/python/ydb/py3/ydb/query/pool.py1
-rw-r--r--contrib/python/ydb/py3/ydb/query/session.py22
-rw-r--r--contrib/python/ydb/py3/ydb/ydb_version.py2
9 files changed, 22 insertions, 18 deletions
diff --git a/contrib/python/ydb/py3/.dist-info/METADATA b/contrib/python/ydb/py3/.dist-info/METADATA
index c9e4bb99485..1a96485283a 100644
--- a/contrib/python/ydb/py3/.dist-info/METADATA
+++ b/contrib/python/ydb/py3/.dist-info/METADATA
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: ydb
-Version: 3.28.2
+Version: 3.28.3
Summary: YDB Python SDK
Home-page: http://github.com/ydb-platform/ydb-python-sdk
Author: Yandex LLC
diff --git a/contrib/python/ydb/py3/ya.make b/contrib/python/ydb/py3/ya.make
index 87991083694..9977d7bc6fc 100644
--- a/contrib/python/ydb/py3/ya.make
+++ b/contrib/python/ydb/py3/ya.make
@@ -2,7 +2,7 @@
PY3_LIBRARY()
-VERSION(3.28.2)
+VERSION(3.28.3)
LICENSE(Apache-2.0)
diff --git a/contrib/python/ydb/py3/ydb/aio/query/pool.py b/contrib/python/ydb/py3/ydb/aio/query/pool.py
index 45fa1acbe9b..a0d9d93c982 100644
--- a/contrib/python/ydb/py3/ydb/aio/query/pool.py
+++ b/contrib/python/ydb/py3/ydb/aio/query/pool.py
@@ -137,7 +137,6 @@ class QuerySessionPool:
async def release(self, session: QuerySession) -> None:
"""Release a session back to Session Pool."""
-
self._queue.put_nowait(session)
logger.debug("Session returned to queue: %s", session.session_id)
diff --git a/contrib/python/ydb/py3/ydb/aio/query/session.py b/contrib/python/ydb/py3/ydb/aio/query/session.py
index 67e62ff66ec..a565b266e82 100644
--- a/contrib/python/ydb/py3/ydb/aio/query/session.py
+++ b/contrib/python/ydb/py3/ydb/aio/query/session.py
@@ -62,7 +62,7 @@ class QuerySession(BaseQuerySession["AsyncDriver"]):
)
issues._process_response(first_response)
except Exception as e:
- self._invalidate()
+ self._close_session(invalidate=True)
raise e
self._loop.create_task(self._check_session_status_loop(), name="check session status task")
@@ -76,7 +76,7 @@ class QuerySession(BaseQuerySession["AsyncDriver"]):
logger.debug("Attach stream closed, session_id: %s", self._session_id)
except Exception as e:
logger.debug("Attach stream error: %s, session_id: %s", e, self._session_id)
- self._invalidate()
+ self._close_session(invalidate=True)
async def delete(self, settings: Optional[BaseRequestSettings] = None) -> None:
"""Deletes a Session of Query Service on server side and releases resources.
@@ -92,7 +92,7 @@ class QuerySession(BaseQuerySession["AsyncDriver"]):
except Exception:
pass
- self._invalidate()
+ self._close_session()
async def create(self, settings: Optional[BaseRequestSettings] = None) -> "QuerySession":
"""Creates a Session of Query Service on server side and attaches it.
diff --git a/contrib/python/ydb/py3/ydb/aio/query/transaction.py b/contrib/python/ydb/py3/ydb/aio/query/transaction.py
index e423258025f..c31d79fb088 100644
--- a/contrib/python/ydb/py3/ydb/aio/query/transaction.py
+++ b/contrib/python/ydb/py3/ydb/aio/query/transaction.py
@@ -72,7 +72,7 @@ class QueryTxContext(BaseQueryTxContext["AsyncDriver"]):
logger.warning("Failed to rollback leaked tx: %s", self._tx_state.tx_id)
except BaseException:
logger.warning("Failed to rollback leaked tx: %s", self._tx_state.tx_id)
- self.session._invalidate()
+ self.session._close_session(invalidate=True)
async def _ensure_prev_stream_finished(self) -> None:
if self._prev_stream is not None:
diff --git a/contrib/python/ydb/py3/ydb/query/base.py b/contrib/python/ydb/py3/ydb/query/base.py
index bf0d80b9dad..7fea6cd0e8c 100644
--- a/contrib/python/ydb/py3/ydb/query/base.py
+++ b/contrib/python/ydb/py3/ydb/query/base.py
@@ -205,7 +205,7 @@ def bad_session_handler(func):
try:
return func(rpc_state, response_pb, session, *args, **kwargs)
except issues.BadSession:
- session._invalidate()
+ session._close_session(invalidate=True)
raise
return decorator
diff --git a/contrib/python/ydb/py3/ydb/query/pool.py b/contrib/python/ydb/py3/ydb/query/pool.py
index cba3e47e3a1..44d4d34af16 100644
--- a/contrib/python/ydb/py3/ydb/query/pool.py
+++ b/contrib/python/ydb/py3/ydb/query/pool.py
@@ -125,7 +125,6 @@ class QuerySessionPool:
def release(self, session: QuerySession) -> None:
"""Release a session back to Session Pool."""
-
self._queue.put_nowait(session)
logger.debug("Session returned to queue: %s", session.session_id)
diff --git a/contrib/python/ydb/py3/ydb/query/session.py b/contrib/python/ydb/py3/ydb/query/session.py
index b28cba8baed..f2099f8cdbf 100644
--- a/contrib/python/ydb/py3/ydb/query/session.py
+++ b/contrib/python/ydb/py3/ydb/query/session.py
@@ -56,7 +56,6 @@ def wrapper_delete_session(
) -> "BaseQuerySession":
message = _ydb_query.DeleteSessionResponse.from_proto(response_pb)
issues._process_response(message.status)
- session._closed = True
return session
@@ -71,6 +70,7 @@ class BaseQuerySession(abc.ABC, Generic[DriverT]):
_session_id: Optional[str] = None
_node_id: Optional[int] = None
_closed: bool = False
+ _invalidated: bool = False
def __init__(self, driver: DriverT, settings: Optional[base.QueryClientSettings] = None):
self._driver = driver
@@ -122,12 +122,18 @@ class BaseQuerySession(abc.ABC, Generic[DriverT]):
return base.QueryClientSettings()
def _check_session_ready_to_use(self) -> None:
- if not self.is_active:
+ if self._session_id is None:
+ raise RuntimeError("Session is not initialized")
+ if self._invalidated:
+ raise issues.BadSession(f"Session is not active, session_id: {self._session_id}, closed: {self._closed}")
+ if self._closed:
raise RuntimeError(f"Session is not active, session_id: {self._session_id}, closed: {self._closed}")
- def _invalidate(self) -> None:
+ def _close_session(self, invalidate: bool = False) -> None:
if self._closed:
return
+ if invalidate:
+ self._invalidated = True
self._closed = True
if self._stream is not None:
@@ -161,9 +167,9 @@ class BaseQuerySession(abc.ABC, Generic[DriverT]):
issues.Cancelled,
),
):
- self._invalidate()
+ self._close_session(invalidate=True)
else:
- self._invalidate()
+ self._close_session(invalidate=True)
# Overloads for _create_call
@overload
@@ -339,7 +345,7 @@ class QuerySession(BaseQuerySession["SyncDriver"]):
)
issues._process_response(first_response)
except Exception as e:
- self._invalidate()
+ self._close_session(invalidate=True)
raise e
threading.Thread(
@@ -356,7 +362,7 @@ class QuerySession(BaseQuerySession["SyncDriver"]):
logger.debug("Attach stream closed, session_id: %s", self._session_id)
except Exception as e:
logger.debug("Attach stream error: %s, session_id: %s", e, self._session_id)
- self._invalidate()
+ self._close_session(invalidate=True)
def delete(self, settings: Optional[BaseRequestSettings] = None) -> None:
"""Deletes a Session of Query Service on server side and releases resources.
@@ -372,7 +378,7 @@ class QuerySession(BaseQuerySession["SyncDriver"]):
except Exception:
pass
- self._invalidate()
+ self._close_session()
def create(self, settings: Optional[BaseRequestSettings] = None) -> "QuerySession":
"""Creates a Session of Query Service on server side and attaches it.
diff --git a/contrib/python/ydb/py3/ydb/ydb_version.py b/contrib/python/ydb/py3/ydb/ydb_version.py
index 7804556fba4..a01510bfcb2 100644
--- a/contrib/python/ydb/py3/ydb/ydb_version.py
+++ b/contrib/python/ydb/py3/ydb/ydb_version.py
@@ -1 +1 @@
-VERSION = "3.28.2"
+VERSION = "3.28.3"