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'."