Skip to content

Commit 1b3d68b

Browse files
committed
Make schema agreement waiting code renew connection on each iteration
When schema agreement is started it could happen that control connection is getting disconnected/reconnected, when it happens schema agreement code used to use disconnected connection to run all the queries. As result, it could lead to schema agreement timeout, even if all nodes got schema updated long time ago.
1 parent a401409 commit 1b3d68b

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

cassandra/cluster.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4206,7 +4206,7 @@ def _handle_schema_change(self, event):
42064206
delay = self._delay_for_event_type('schema_change', self._schema_event_refresh_window)
42074207
self._cluster.scheduler.schedule_unique(delay, self.refresh_schema, **event)
42084208

4209-
def wait_for_schema_agreement(self, connection=None, preloaded_results=None, wait_time=None):
4209+
def wait_for_schema_agreement(self, target_connection=None, preloaded_results=None, wait_time=None):
42104210

42114211
total_timeout = wait_time if wait_time is not None else self._cluster.max_schema_agreement_wait
42124212
if total_timeout <= 0:
@@ -4216,12 +4216,12 @@ def wait_for_schema_agreement(self, connection=None, preloaded_results=None, wai
42164216
# from the response type and one from the pushed notification. Holding
42174217
# a lock is just a simple way to cut down on the number of schema queries
42184218
# we'll make.
4219+
42194220
with self._schema_agreement_lock:
42204221
if self._is_shutdown:
42214222
return
42224223

4223-
if not connection:
4224-
connection = self._connection
4224+
connection = target_connection or self._connection
42254225

42264226
if preloaded_results:
42274227
log.debug("[control connection] Attempting to use preloaded results for schema agreement")
@@ -4240,6 +4240,8 @@ def wait_for_schema_agreement(self, connection=None, preloaded_results=None, wai
42404240
select_peers_query = self._get_peers_query(self.PeersQueryType.PEERS_SCHEMA, connection)
42414241

42424242
while elapsed < total_timeout:
4243+
connection = target_connection or self._connection
4244+
42434245
peers_query = QueryMessage(query=maybe_add_timeout_to_query(select_peers_query, self._metadata_request_timeout),
42444246
consistency_level=cl)
42454247
local_query = QueryMessage(query=maybe_add_timeout_to_query(self._SELECT_SCHEMA_LOCAL, self._metadata_request_timeout),

0 commit comments

Comments
 (0)