From 277778548131e4682f0c68697ea334ca13690e4c Mon Sep 17 00:00:00 2001 From: Petr Malik Date: Mon, 14 Nov 2016 17:52:30 -0500 Subject: [PATCH] Fix Cassandra cluster restart Look the node up by both '127.0.0.1' and the private IP (if not found). Change-Id: Iddd76e6abc5d4ecc68cbd53c554ea994c51db115 --- .../experimental/cassandra/service.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/trove/guestagent/datastore/experimental/cassandra/service.py b/trove/guestagent/datastore/experimental/cassandra/service.py index a961446a17..f9db6b517b 100644 --- a/trove/guestagent/datastore/experimental/cassandra/service.py +++ b/trove/guestagent/datastore/experimental/cassandra/service.py @@ -766,8 +766,8 @@ class CassandraAppStatus(service.BaseDbStatus): def _get_actual_db_status(self): try: - self.client.execute('SELECT now() FROM system.local;') - return rd_instance.ServiceStatuses.RUNNING + if self.client.local_node_is_up(): + return rd_instance.ServiceStatuses.RUNNING except NoHostAvailable: return rd_instance.ServiceStatuses.SHUTDOWN except Exception: @@ -1238,6 +1238,20 @@ class CassandraConnection(object): return query.format(*identifiers) return query + def node_is_up(self, host_ip): + """Test whether the Cassandra node located at the given IP is up. + """ + for host in self._cluster.metadata.all_hosts(): + if host.address == host_ip: + return host.is_up + return False + + def local_node_is_up(self): + """Test whether Cassandra is up on the localhost. + """ + return (self.node_is_up('127.0.0.1') or + self.node_is_up(netutils.get_my_ipv4())) + def _connect(self): if not self._cluster.is_shutdown: LOG.debug("Connecting to a Cassandra cluster as '%s'."