From 45779b3e4f2da0cfe972edda3382d8aab01efb49 Mon Sep 17 00:00:00 2001 From: Vikash Singh <3116482+vi3k6i5@users.noreply.github.com> Date: Mon, 28 Mar 2022 12:32:52 +0530 Subject: [PATCH] fix: add session.exists() check in PingingPool.get() method as session.ping() uses a cached result. --- google/cloud/spanner_v1/pool.py | 15 +++++++-------- tests/unit/test_pool.py | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/google/cloud/spanner_v1/pool.py b/google/cloud/spanner_v1/pool.py index 56a78ef672..dd5da532e4 100644 --- a/google/cloud/spanner_v1/pool.py +++ b/google/cloud/spanner_v1/pool.py @@ -387,15 +387,14 @@ def get(self, timeout=None): if timeout is None: timeout = self.default_timeout - ping_after, session = self._sessions.get(block=True, timeout=timeout) + _, session = self._sessions.get(block=True, timeout=timeout) - if _NOW() > ping_after: - # Using session.exists() guarantees the returned session exists. - # session.ping() uses a cached result in the backend which could - # result in a recently deleted session being returned. - if not session.exists(): - session = self._new_session() - session.create() + # Using session.exists() guarantees the returned session exists. + # session.ping() uses a cached result in the backend which could + # result in a recently deleted session being returned. + if not session.exists(): + session = self._new_session() + session.create() return session diff --git a/tests/unit/test_pool.py b/tests/unit/test_pool.py index 593420187d..462e3ead86 100644 --- a/tests/unit/test_pool.py +++ b/tests/unit/test_pool.py @@ -433,7 +433,7 @@ def test_get_hit_no_ping(self): session = pool.get() self.assertIs(session, SESSIONS[0]) - self.assertFalse(session._exists_checked) + self.assertTrue(session._exists_checked) self.assertFalse(pool._sessions.full()) def test_get_hit_w_ping(self):