Skip to content

Commit 6ed8609

Browse files
committed
Timeout schema agreement check queries
1 parent 9c766f9 commit 6ed8609

2 files changed

Lines changed: 11 additions & 3 deletions

File tree

cassandra/cluster.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1489,10 +1489,18 @@ def wait_for_schema_agreement(self, connection=None):
14891489
start = self._time.time()
14901490
elapsed = 0
14911491
cl = ConsistencyLevel.ONE
1492-
while elapsed < self._cluster.max_schema_agreement_wait:
1492+
total_timeout = self._cluster.max_schema_agreement_wait
1493+
while elapsed < total_timeout:
14931494
peers_query = QueryMessage(query=self._SELECT_SCHEMA_PEERS, consistency_level=cl)
14941495
local_query = QueryMessage(query=self._SELECT_SCHEMA_LOCAL, consistency_level=cl)
1495-
peers_result, local_result = connection.wait_for_responses(peers_query, local_query)
1496+
try:
1497+
timeout = min(2.0, total_timeout - elapsed)
1498+
peers_result, local_result = connection.wait_for_responses(peers_query, local_query, timeout=timeout)
1499+
except OperationTimedOut:
1500+
log.debug("[control connection] Timed out waiting for response during schema agreement check")
1501+
elapsed = self._time.time() - start
1502+
continue
1503+
14961504
peers_result = dict_factory(*peers_result.results)
14971505

14981506
versions = set()

tests/unit/test_control_connection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def __init__(self):
8787
["192.168.1.2", "10.0.0.2", "a", "dc1", "rack1", ["2", "102", "202"]]]
8888
]
8989

90-
def wait_for_responses(self, peer_query, local_query):
90+
def wait_for_responses(self, peer_query, local_query, timeout=None):
9191
local_response = ResultMessage(
9292
kind=ResultMessage.KIND_ROWS, results=self.local_results)
9393
peer_response = ResultMessage(

0 commit comments

Comments
 (0)