Skip to content

Commit 13ce915

Browse files
Do not update pool if already created
In some cases We want to only update the pool if previous do not exist or is shutdown. This commit adds additional validation to add_or_renew_pool to make sure this condition is met when needed. Fixes: scylladb#317
1 parent 9269bb3 commit 13ce915

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

cassandra/cluster.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1991,7 +1991,7 @@ def on_up(self, host):
19911991
futures_results = []
19921992
callback = partial(self._on_up_future_completed, host, futures, futures_results, futures_lock)
19931993
for session in tuple(self.sessions):
1994-
future = session.add_or_renew_pool(host, is_host_addition=False)
1994+
future = session.add_or_renew_pool(host, is_host_addition=False, require_previous_shutdown_or_none=False)
19951995
if future is not None:
19961996
have_future = True
19971997
future.add_done_callback(callback)
@@ -2130,7 +2130,7 @@ def future_completed(future):
21302130

21312131
have_future = False
21322132
for session in tuple(self.sessions):
2133-
future = session.add_or_renew_pool(host, is_host_addition=True)
2133+
future = session.add_or_renew_pool(host, is_host_addition=True, require_previous_shutdown_or_none=False)
21342134
if future is not None:
21352135
have_future = True
21362136
futures.add(future)
@@ -2661,7 +2661,7 @@ def __init__(self, cluster, hosts, keyspace=None):
26612661
# create connection pools in parallel
26622662
self._initial_connect_futures = set()
26632663
for host in hosts:
2664-
future = self.add_or_renew_pool(host, is_host_addition=False)
2664+
future = self.add_or_renew_pool(host, is_host_addition=False, require_previous_shutdown_or_none=False)
26652665
if future:
26662666
self._initial_connect_futures.add(future)
26672667

@@ -3284,7 +3284,7 @@ def __del__(self):
32843284
# when cluster.shutdown() is called explicitly.
32853285
pass
32863286

3287-
def add_or_renew_pool(self, host, is_host_addition):
3287+
def add_or_renew_pool(self, host, is_host_addition, require_previous_shutdown_or_none):
32883288
"""
32893289
For internal use only.
32903290
"""
@@ -3332,7 +3332,11 @@ def callback(pool, errors):
33323332
self._lock.acquire()
33333333
return False
33343334
self._lock.acquire()
3335-
self._pools[host] = new_pool
3335+
if require_previous_shutdown_or_none and (previous and not previous.is_shutdown):
3336+
new_pool.shutdown()
3337+
return True
3338+
else:
3339+
self._pools[host] = new_pool
33363340

33373341
log.debug("Added pool for host %s to session", host)
33383342
if previous:
@@ -3372,7 +3376,7 @@ def update_created_pools(self):
33723376
# to allow us to attempt connections to hosts that have gone from ignored to something
33733377
# else.
33743378
if distance != HostDistance.IGNORED and host.is_up in (True, None):
3375-
future = self.add_or_renew_pool(host, False)
3379+
future = self.add_or_renew_pool(host, False, require_previous_shutdown_or_none=True)
33763380
elif distance != pool.host_distance:
33773381
# the distance has changed
33783382
if distance == HostDistance.IGNORED:

0 commit comments

Comments
 (0)