From dc6180be3ae32cd171b4eef31fb9efc6cd89f761 Mon Sep 17 00:00:00 2001 From: Tyler Hobbs Date: Thu, 6 Mar 2014 17:16:03 -0600 Subject: [PATCH] Silence control conn errors around shutdown --- cassandra/cluster.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/cassandra/cluster.py b/cassandra/cluster.py index f9cbb3b8..e91a161b 100644 --- a/cassandra/cluster.py +++ b/cassandra/cluster.py @@ -1440,7 +1440,7 @@ class ControlConnection(object): if self._is_shutdown: return - self._cluster.executor.submit(self._reconnect) + self._submit(self._reconnect) def _reconnect(self): log.debug("[control connection] Attempting to reconnect") @@ -1479,6 +1479,14 @@ class ControlConnection(object): self._reconnection_handler = new_handler return old + def _submit(self, *args, **kwargs): + try: + if not self._cluster._is_shutdown: + return self._cluster.executor.submit(*args, **kwargs) + except ReferenceError: + pass + return None + def shutdown(self): with self._lock: if self._is_shutdown: @@ -1504,6 +1512,9 @@ class ControlConnection(object): self._signal_error() def _refresh_schema(self, connection, keyspace=None, table=None): + if self._cluster._is_shutdown: + return + self.wait_for_schema_agreement(connection) where_clause = "" @@ -1645,9 +1656,9 @@ class ControlConnection(object): table = event['table'] or None if event['change_type'] in ("CREATED", "DROPPED"): keyspace = keyspace if table else None - self._cluster.executor.submit(self.refresh_schema, keyspace) + self._submit(self.refresh_schema, keyspace) elif event['change_type'] == "UPDATED": - self._cluster.executor.submit(self.refresh_schema, keyspace, table) + self._submit(self.refresh_schema, keyspace, table) def wait_for_schema_agreement(self, connection=None): # Each schema change typically generates two schema refreshes, one