package me.prettyprint.cassandra.connection; import java.util.concurrent.TimeUnit; import me.prettyprint.cassandra.service.CassandraHostConfigurator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class NodeAutoDiscoverService extends BackgroundCassandraHostService { private static final Logger log = LoggerFactory.getLogger(NodeAutoDiscoverService.class); public static final int DEF_AUTO_DISCOVERY_DELAY = 30; private NodeDiscovery newNodeSearch; public NodeAutoDiscoverService(HConnectionManager connectionManager, CassandraHostConfigurator cassandraHostConfigurator) { super(connectionManager, cassandraHostConfigurator); this.retryDelayInSeconds = cassandraHostConfigurator.getAutoDiscoveryDelayInSeconds(); newNodeSearch = new NodeDiscovery(cassandraHostConfigurator, connectionManager); sf = executor.scheduleWithFixedDelay(new QueryRing(), retryDelayInSeconds, retryDelayInSeconds, TimeUnit.SECONDS); } @Override void shutdown() { log.error("Auto Discovery retry shutdown hook called"); if ( sf != null ) { sf.cancel(true); } if ( executor != null ) { executor.shutdownNow(); } log.error("AutoDiscovery retry shutdown complete"); } @Override public void applyRetryDelay() { // no op for now } public void doAddNodes() { newNodeSearch.doAddNodes(); } class QueryRing implements Runnable { @Override public void run() { doAddNodes(); } } }