Skip to content

Commit 9edfc62

Browse files
authored
PYTHON-5167 Properly cleanup test SocketGetter tasks (#2176)
1 parent 3f5d6c1 commit 9edfc62

File tree

2 files changed

+44
-10
lines changed

2 files changed

+44
-10
lines changed

test/asynchronous/test_pooling.py

+22-5
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,12 @@ async def run_mongo_thread(self):
123123

124124
self.state = "connection"
125125

126-
def __del__(self):
126+
async def release_conn(self):
127127
if self.sock:
128-
self.sock.close_conn(None)
128+
await self.sock.unpin()
129+
self.sock = None
130+
return True
131+
return False
129132

130133

131134
async def run_cases(client, cases):
@@ -352,6 +355,10 @@ async def test_no_wait_queue_timeout(self):
352355

353356
self.assertEqual(t.state, "connection")
354357
self.assertEqual(t.sock, s1)
358+
# Cleanup
359+
await t.release_conn()
360+
await t.join()
361+
await pool.close()
355362

356363
async def test_checkout_more_than_max_pool_size(self):
357364
pool = await self.create_pool(max_pool_size=2)
@@ -364,16 +371,26 @@ async def test_checkout_more_than_max_pool_size(self):
364371
socks.append(sock)
365372

366373
tasks = []
367-
for _ in range(30):
374+
for _ in range(10):
368375
t = SocketGetter(self.c, pool)
369376
await t.start()
370377
tasks.append(t)
371378
await asyncio.sleep(1)
372379
for t in tasks:
373380
self.assertEqual(t.state, "get_socket")
374-
381+
# Cleanup
375382
for socket_info in socks:
376-
socket_info.close_conn(None)
383+
await socket_info.unpin()
384+
while tasks:
385+
to_remove = []
386+
for t in tasks:
387+
if await t.release_conn():
388+
to_remove.append(t)
389+
await t.join()
390+
for t in to_remove:
391+
tasks.remove(t)
392+
await asyncio.sleep(0.05)
393+
await pool.close()
377394

378395
async def test_maxConnecting(self):
379396
client = await self.async_rs_or_single_client()

test/test_pooling.py

+22-5
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,12 @@ def run_mongo_thread(self):
123123

124124
self.state = "connection"
125125

126-
def __del__(self):
126+
def release_conn(self):
127127
if self.sock:
128-
self.sock.close_conn(None)
128+
self.sock.unpin()
129+
self.sock = None
130+
return True
131+
return False
129132

130133

131134
def run_cases(client, cases):
@@ -352,6 +355,10 @@ def test_no_wait_queue_timeout(self):
352355

353356
self.assertEqual(t.state, "connection")
354357
self.assertEqual(t.sock, s1)
358+
# Cleanup
359+
t.release_conn()
360+
t.join()
361+
pool.close()
355362

356363
def test_checkout_more_than_max_pool_size(self):
357364
pool = self.create_pool(max_pool_size=2)
@@ -364,16 +371,26 @@ def test_checkout_more_than_max_pool_size(self):
364371
socks.append(sock)
365372

366373
tasks = []
367-
for _ in range(30):
374+
for _ in range(10):
368375
t = SocketGetter(self.c, pool)
369376
t.start()
370377
tasks.append(t)
371378
time.sleep(1)
372379
for t in tasks:
373380
self.assertEqual(t.state, "get_socket")
374-
381+
# Cleanup
375382
for socket_info in socks:
376-
socket_info.close_conn(None)
383+
socket_info.unpin()
384+
while tasks:
385+
to_remove = []
386+
for t in tasks:
387+
if t.release_conn():
388+
to_remove.append(t)
389+
t.join()
390+
for t in to_remove:
391+
tasks.remove(t)
392+
time.sleep(0.05)
393+
pool.close()
377394

378395
def test_maxConnecting(self):
379396
client = self.rs_or_single_client()

0 commit comments

Comments
 (0)