Skip to content

Commit 350ada1

Browse files
committed
PYTHON-2206 Rename pool_id to generation to better match CMAP spec
1 parent 5efe0b1 commit 350ada1

File tree

7 files changed

+28
-27
lines changed

7 files changed

+28
-27
lines changed

pymongo/client_session.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -838,13 +838,13 @@ def _start_retryable_write(self):
838838

839839

840840
class _ServerSession(object):
841-
def __init__(self, pool_id):
841+
def __init__(self, generation):
842842
# Ensure id is type 4, regardless of CodecOptions.uuid_representation.
843843
self.session_id = {'id': Binary(uuid.uuid4().bytes, 4)}
844844
self.last_use = monotonic.time()
845845
self._transaction_id = 0
846846
self.dirty = False
847-
self.pool_id = pool_id
847+
self.generation = generation
848848

849849
def mark_dirty(self):
850850
"""Mark this session as dirty.
@@ -876,10 +876,10 @@ class _ServerSessionPool(collections.deque):
876876
"""
877877
def __init__(self, *args, **kwargs):
878878
super(_ServerSessionPool, self).__init__(*args, **kwargs)
879-
self.pool_id = 0
879+
self.generation = 0
880880

881881
def reset(self):
882-
self.pool_id += 1
882+
self.generation += 1
883883
self.clear()
884884

885885
def pop_all(self):
@@ -902,7 +902,7 @@ def get_server_session(self, session_timeout_minutes):
902902
if not s.timed_out(session_timeout_minutes):
903903
return s
904904

905-
return _ServerSession(self.pool_id)
905+
return _ServerSession(self.generation)
906906

907907
def return_server_session(self, server_session, session_timeout_minutes):
908908
self._clear_stale(session_timeout_minutes)
@@ -912,7 +912,8 @@ def return_server_session(self, server_session, session_timeout_minutes):
912912
def return_server_session_no_lock(self, server_session):
913913
# Discard sessions from an old pool to avoid duplicate sessions in the
914914
# child process after a fork.
915-
if server_session.pool_id == self.pool_id and not server_session.dirty:
915+
if (server_session.generation == self.generation and
916+
not server_session.dirty):
916917
self.appendleft(server_session)
917918

918919
def _clear_stale(self, session_timeout_minutes):

pymongo/monitor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def __init__(
107107
def close(self):
108108
super(Monitor, self).close()
109109

110-
# Increment the pool_id and maybe close the socket. If the executor
110+
# Increment the generation and maybe close the socket. If the executor
111111
# thread has the socket checked out, it will be closed when checked in.
112112
self._pool.reset()
113113

pymongo/pool.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -488,9 +488,9 @@ def __init__(self, sock, pool, address, id):
488488
self.compression_settings = pool.opts.compression_settings
489489
self.compression_context = None
490490

491-
# The pool's pool_id changes with each reset() so we can close sockets
492-
# created before the last reset.
493-
self.pool_id = pool.pool_id
491+
# The pool's generation changes with each reset() so we can close
492+
# sockets created before the last reset.
493+
self.generation = pool.generation
494494
self.ready = False
495495

496496
def ismaster(self, metadata, cluster_time):
@@ -956,7 +956,7 @@ def __init__(self, address, options, handshake=True):
956956

957957
# Keep track of resets, so we notice sockets created before the most
958958
# recent reset and close them.
959-
self.pool_id = 0
959+
self.generation = 0
960960
self.pid = os.getpid()
961961
self.address = address
962962
self.opts = options
@@ -985,7 +985,7 @@ def _reset(self, close):
985985
with self.lock:
986986
if self.closed:
987987
return
988-
self.pool_id += 1
988+
self.generation += 1
989989
self.pid = os.getpid()
990990
sockets, self.sockets = self.sockets, collections.deque()
991991
self.active_sockets = 0
@@ -1022,10 +1022,10 @@ def reset(self):
10221022
def close(self):
10231023
self._reset(close=True)
10241024

1025-
def remove_stale_sockets(self, reference_pool_id):
1025+
def remove_stale_sockets(self, reference_generation):
10261026
"""Removes stale sockets then adds new ones if pool is too small and
1027-
has not been reset. The `reference_pool_id` argument specifies the
1028-
`pool_id` at the point in time this operation was requested on the
1027+
has not been reset. The `reference_generation` argument specifies the
1028+
`generation` at the point in time this operation was requested on the
10291029
pool.
10301030
"""
10311031
if self.opts.max_idle_time_seconds is not None:
@@ -1050,7 +1050,7 @@ def remove_stale_sockets(self, reference_pool_id):
10501050
with self.lock:
10511051
# Close connection and return if the pool was reset during
10521052
# socket creation or while acquiring the pool lock.
1053-
if self.pool_id != reference_pool_id:
1053+
if self.generation != reference_generation:
10541054
sock_info.close_socket(ConnectionClosedReason.STALE)
10551055
break
10561056
self.sockets.appendleft(sock_info)
@@ -1205,7 +1205,7 @@ def return_socket(self, sock_info, publish_checkin=True):
12051205
else:
12061206
if self.closed:
12071207
sock_info.close_socket(ConnectionClosedReason.POOL_CLOSED)
1208-
elif sock_info.pool_id != self.pool_id:
1208+
elif sock_info.generation != self.generation:
12091209
sock_info.close_socket(ConnectionClosedReason.STALE)
12101210
elif not sock_info.closed:
12111211
sock_info.update_last_checkin_time()

pymongo/topology.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -435,10 +435,10 @@ def update_pool(self):
435435
servers = []
436436
with self._lock:
437437
for server in self._servers.values():
438-
servers.append((server, server._pool.pool_id))
438+
servers.append((server, server._pool.generation))
439439

440-
for server, pool_id in servers:
441-
server._pool.remove_stale_sockets(pool_id)
440+
for server, generation in servers:
441+
server._pool.remove_stale_sockets(generation)
442442

443443
def close(self):
444444
"""Clear pools and terminate monitors. Topology reopens on demand."""

test/test_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1462,7 +1462,7 @@ def test_reset_during_update_pool(self):
14621462
self.addCleanup(client.close)
14631463
client.admin.command('ping')
14641464
pool = get_pool(client)
1465-
pool_id = pool.pool_id
1465+
generation = pool.generation
14661466

14671467
# Continuously reset the pool.
14681468
class ResetPoolThread(threading.Thread):
@@ -1488,7 +1488,7 @@ def run(self):
14881488
while True:
14891489
for _ in range(10):
14901490
client._topology.update_pool()
1491-
if pool_id != pool.pool_id:
1491+
if generation != pool.generation:
14921492
break
14931493
finally:
14941494
t.stop()

test/test_topology.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -660,11 +660,11 @@ def _check_with_socket(self, *args, **kwargs):
660660
t = create_mock_topology(monitor_class=TestMonitor)
661661
server = wait_for_master(t)
662662
self.assertEqual(1, ismaster_count[0])
663-
pool_id = server.pool.pool_id
663+
generation = server.pool.generation
664664

665665
# Pool is reset by ismaster failure.
666666
t.request_check_all()
667-
self.assertNotEqual(pool_id, server.pool.pool_id)
667+
self.assertNotEqual(generation, server.pool.generation)
668668

669669
def test_ismaster_retry(self):
670670
# ismaster succeeds at first, then raises socket error, then succeeds.

test/utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ def __exit__(self, exc_type, exc_val, exc_tb):
207207

208208
class MockPool(object):
209209
def __init__(self, *args, **kwargs):
210-
self.pool_id = 0
210+
self.generation = 0
211211
self._lock = threading.Lock()
212212
self.opts = PoolOptions()
213213

@@ -219,7 +219,7 @@ def return_socket(self, *args, **kwargs):
219219

220220
def _reset(self):
221221
with self._lock:
222-
self.pool_id += 1
222+
self.generation += 1
223223

224224
def reset(self):
225225
self._reset()
@@ -230,7 +230,7 @@ def close(self):
230230
def update_is_writable(self, is_writable):
231231
pass
232232

233-
def remove_stale_sockets(self, reference_pool_id):
233+
def remove_stale_sockets(self, reference_generation):
234234
pass
235235

236236

0 commit comments

Comments
 (0)