package me.prettyprint.cassandra.connection;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import me.prettyprint.cassandra.service.CassandraHost;
import me.prettyprint.cassandra.service.CassandraHostConfigurator;
public class HostTimeoutTrackerTest {
private HostTimeoutTracker hostTimeoutTracker;
@Before
public void setup() {
// map cassandraHost --> arrayBlockingQueue of timestamp Longs
// - if abq.size > size, && peekLast.get > time, add host to excludedMap<cassandraHost,timestampOfExclusion> for <suspendTime> ms
// - background thread to sweep for exclusion time expiration every <sweepInterval> seconds
// - getExcludedHosts calls excludedMap.keySet
//
// HTL with a three timeout trigger durring 500ms intervals
CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator("localhost:9170");
cassandraHostConfigurator.setHostTimeoutCounter(3);
HConnectionManager connectionManager = new HConnectionManager("TestCluster", cassandraHostConfigurator);
hostTimeoutTracker = new HostTimeoutTracker(connectionManager, cassandraHostConfigurator);
}
@Test
public void testTrackHostLatency() {
CassandraHost cassandraHost = new CassandraHost("localhost:9170");
assertFalse(hostTimeoutTracker.checkTimeout(cassandraHost));
assertFalse(hostTimeoutTracker.checkTimeout(cassandraHost));
assertFalse(hostTimeoutTracker.checkTimeout(cassandraHost));
try {
Thread.currentThread().sleep(501);
} catch (InterruptedException e) {
}
assertTrue(hostTimeoutTracker.checkTimeout(cassandraHost));
// ...
// in HConnectionManager:
// - if ( hostLatencyTracker.checkTimeout(cassandraHost) )
// markHostAsDown(cassandraHost);
// excludeHosts.add(cassandraHost);
}
}