Skip to content

Commit f50ef65

Browse files
authored
PYTHON-5409 Make test_implicit_sessions_checkout less flaky (mongodb#2366)
1 parent 24e9da6 commit f50ef65

File tree

2 files changed

+14
-12
lines changed

2 files changed

+14
-12
lines changed

test/asynchronous/test_session.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,11 @@ async def test_implicit_sessions_checkout(self):
194194
# successful connection checkout" test from Driver Sessions Spec.
195195
succeeded = False
196196
lsid_set = set()
197-
failures = 0
198-
for _ in range(5):
199-
listener = OvertCommandListener()
200-
client = await self.async_rs_or_single_client(event_listeners=[listener], maxPoolSize=1)
197+
listener = OvertCommandListener()
198+
client = await self.async_rs_or_single_client(event_listeners=[listener], maxPoolSize=1)
199+
# Retry up to 10 times because there is a known race that can cause multiple
200+
# sessions to be used: connection check in happens before session check in
201+
for _ in range(10):
201202
cursor = client.db.test.find({})
202203
ops: List[Tuple[Callable, List[Any]]] = [
203204
(client.db.test.find_one, [{"_id": 1}]),
@@ -240,9 +241,9 @@ async def target(op, *args):
240241
if i.command.get("lsid"):
241242
lsid_set.add(i.command.get("lsid")["id"])
242243
if len(lsid_set) == 1:
244+
# Break on first success.
243245
succeeded = True
244-
else:
245-
failures += 1
246+
break
246247
self.assertTrue(succeeded, lsid_set)
247248

248249
async def test_pool_lifo(self):

test/test_session.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,11 @@ def test_implicit_sessions_checkout(self):
194194
# successful connection checkout" test from Driver Sessions Spec.
195195
succeeded = False
196196
lsid_set = set()
197-
failures = 0
198-
for _ in range(5):
199-
listener = OvertCommandListener()
200-
client = self.rs_or_single_client(event_listeners=[listener], maxPoolSize=1)
197+
listener = OvertCommandListener()
198+
client = self.rs_or_single_client(event_listeners=[listener], maxPoolSize=1)
199+
# Retry up to 10 times because there is a known race that can cause multiple
200+
# sessions to be used: connection check in happens before session check in
201+
for _ in range(10):
201202
cursor = client.db.test.find({})
202203
ops: List[Tuple[Callable, List[Any]]] = [
203204
(client.db.test.find_one, [{"_id": 1}]),
@@ -240,9 +241,9 @@ def target(op, *args):
240241
if i.command.get("lsid"):
241242
lsid_set.add(i.command.get("lsid")["id"])
242243
if len(lsid_set) == 1:
244+
# Break on first success.
243245
succeeded = True
244-
else:
245-
failures += 1
246+
break
246247
self.assertTrue(succeeded, lsid_set)
247248

248249
def test_pool_lifo(self):

0 commit comments

Comments
 (0)