public CassandraHost[] buildCassandraHosts() { if (this.hosts == null) { throw new IllegalArgumentException("Need to define at least one host in order to apply configuration."); } String[] hostVals = hosts.split(","); CassandraHost[] cassandraHosts = new CassandraHost[hostVals.length]; for (int x=0; x<hostVals.length; x++) { CassandraHost cassandraHost = this.port == CassandraHost.DEFAULT_PORT ? new CassandraHost(hostVals[x].trim()) : new CassandraHost(hostVals[x], this.port); applyConfig(cassandraHost); cassandraHosts[x] = cassandraHost; } return cassandraHosts; }
@Override public boolean unsuspendCassandraHost(String hostStr) { return connectionManager.unsuspendCassandraHost(new CassandraHost(hostStr)); }
@Override public boolean removeCassandraHost(String hostStr) { return connectionManager.removeCassandraHost(new CassandraHost(hostStr)); }
@Override public boolean addCassandraHost(String hostStr) { return connectionManager.addCassandraHost(new CassandraHost(hostStr)); }
@Override public boolean suspendCassandraHost(String hostStr) { return connectionManager.suspendCassandraHost(new CassandraHost(hostStr)); }
@Test public void testIgnoreExhaustedAll() { Mockito.when(poolWith5Active.getCassandraHost()).thenReturn(new CassandraHost("127.0.0.1:9160")); Mockito.when(poolWith7Active.getCassandraHost()).thenReturn(new CassandraHost("127.0.0.2:9161")); Mockito.when(poolWith10Active.getCassandraHost()).thenReturn(new CassandraHost("127.0.0.3:9162")); roundRobinBalancingPolicy = new RoundRobinBalancingPolicy(); /* assertEquals(poolWith10Active, roundRobinBalancingPolicy.getPool(pools, new HashSet<CassandraHost>(Arrays.asList(new CassandraHost("127.0.0.1:9160"),new CassandraHost("127.0.0.2:9161"))))); */ assertNotNull(roundRobinBalancingPolicy.getPool(pools, new HashSet<CassandraHost>(Arrays.asList(new CassandraHost("127.0.0.1:9160"),new CassandraHost("127.0.0.2:9161"),new CassandraHost("127.0.0.3:9162"))))); } }
@Test public void testIgnoreExhausted() { Mockito.when(poolWith5Active.getCassandraHost()).thenReturn(new CassandraHost("127.0.0.1:9160")); Mockito.when(poolWith7Active.getCassandraHost()).thenReturn(new CassandraHost("127.0.0.2:9161")); Mockito.when(poolWith10Active.getCassandraHost()).thenReturn(new CassandraHost("127.0.0.3:9162")); roundRobinBalancingPolicy = new RoundRobinBalancingPolicy(); assertEquals(poolWith7Active, roundRobinBalancingPolicy.getPool(pools, new HashSet<CassandraHost>(Arrays.asList(new CassandraHost("127.0.0.1:9160"))))); assertEquals(poolWith10Active, roundRobinBalancingPolicy.getPool(pools, new HashSet<CassandraHost>(Arrays.asList(new CassandraHost("127.0.0.1:9160"))))); assertEquals(poolWith7Active, roundRobinBalancingPolicy.getPool(pools, new HashSet<CassandraHost>(Arrays.asList(new CassandraHost("127.0.0.1:9160"))))); assertEquals(poolWith10Active, roundRobinBalancingPolicy.getPool(pools, new HashSet<CassandraHost>(Arrays.asList(new CassandraHost("127.0.0.1:9160"))))); }
@Test public void testSkipExhausted() { leastActiveBalancingPolicy = new LeastActiveBalancingPolicy(); assertEquals(poolWith7Active, leastActiveBalancingPolicy.getPool(pools, new HashSet<CassandraHost>(Arrays.asList(new CassandraHost("127.0.0.1:9160"))))); assertEquals(poolWith5Active, leastActiveBalancingPolicy.getPool(pools, new HashSet<CassandraHost>(Arrays.asList(new CassandraHost("127.0.0.2:9161"))))); }
@Before public void setup() { poolWith5Active = Mockito.mock(ConcurrentHClientPool.class); Mockito.when(poolWith5Active.getNumActive()).thenReturn(5); poolWith7Active = Mockito.mock(ConcurrentHClientPool.class); Mockito.when(poolWith7Active.getNumActive()).thenReturn(7); poolWith10Active = Mockito.mock(ConcurrentHClientPool.class); Mockito.when(poolWith10Active.getNumActive()).thenReturn(10); Mockito.when(poolWith5Active.getCassandraHost()).thenReturn(new CassandraHost("127.0.0.1:9160")); Mockito.when(poolWith7Active.getCassandraHost()).thenReturn(new CassandraHost("127.0.0.2:9161")); Mockito.when(poolWith10Active.getCassandraHost()).thenReturn(new CassandraHost("127.0.0.3:9162")); pools.add(poolWith5Active); pools.add(poolWith7Active); pools.add(poolWith10Active); }
@Test public void testMultipleAdded() { List<TokenRange> tokens = createRange("localhost", "google.com", "yahoo.com", "datastax.com"); Mockito.when(cluster.describeRing("TestKeyspace")).thenReturn(tokens); Mockito.when(cluster.getName()).thenReturn(TEST_CLUSTER_NAME); Mockito.when(connectionManager.getClusterName()).thenReturn(TEST_CLUSTER_NAME); Mockito.when(connectionManager.getHosts()).thenReturn(Sets.newHashSet(new CassandraHost("localhost",9160))); HFactory.setClusterForTest(cluster); NodeDiscovery q = new NodeDiscovery(cassandraHostConfigurator, connectionManager); q.doAddNodes(); Mockito.verify(connectionManager).addCassandraHost(new CassandraHost("google.com",9160)); Mockito.verify(connectionManager).addCassandraHost(new CassandraHost("yahoo.com",9160)); Mockito.verify(connectionManager).addCassandraHost(new CassandraHost("datastax.com",9160)); }
@Before public void doSetup() { cassandraHost = new CassandraHost("127.0.0.1:9170"); hThriftClient = new HThriftClient(cassandraHost); }
@Test public void testDoAdd() { List<TokenRange> tokens = createRange("localhost", "google.com"); Mockito.when(cluster.describeRing("TestKeyspace")).thenReturn(tokens); Mockito.when(cluster.getName()).thenReturn(TEST_CLUSTER_NAME); Mockito.when(connectionManager.getClusterName()).thenReturn(TEST_CLUSTER_NAME); Mockito.when(connectionManager.getHosts()).thenReturn(Sets.newHashSet(new CassandraHost("localhost",9160))); HFactory.setClusterForTest(cluster); NodeDiscovery q = new NodeDiscovery(cassandraHostConfigurator, connectionManager); q.doAddNodes(); Mockito.verify(connectionManager).addCassandraHost(new CassandraHost("google.com",9160)); }
@Test public void testNoneAdded() { List<TokenRange> tokens = createRange("localhost"); Mockito.when(cluster.describeRing("TestKeyspace")).thenReturn(tokens); Mockito.when(cluster.getName()).thenReturn(TEST_CLUSTER_NAME); Mockito.when(connectionManager.getClusterName()).thenReturn(TEST_CLUSTER_NAME); Mockito.when(connectionManager.getHosts()).thenReturn(Sets.newHashSet(new CassandraHost("localhost",9160))); HFactory.setClusterForTest(cluster); NodeDiscovery q = new NodeDiscovery(cassandraHostConfigurator, connectionManager); Assert.assertEquals(0, q.discoverNodes().size()); }
@Test public void testAddCassandraHostFail() { setupClient(); CassandraHost cassandraHost = new CassandraHost("127.0.0.1", 9180); assertFalse(connectionManager.addCassandraHost(cassandraHost)); }
@Test public void testSuspendCassandraHost() { setupClient(); CassandraHost cassandraHost = new CassandraHost("127.0.0.1", 9170); assertTrue(connectionManager.suspendCassandraHost(cassandraHost)); assertEquals(1,connectionManager.getSuspendedCassandraHosts().size()); assertTrue(connectionManager.unsuspendCassandraHost(cassandraHost)); }
@Test public void testOnHostDown() { setupClient(); final CassandraHost host = new CassandraHost("127.0.0.1", 9170); final boolean[] eventFired = {false}; connectionManager.addListener(listenerName, new ConnectionManagerEmptyListener() { @Override public void onHostDown(CassandraHost cassandraHost) { assertEquals(cassandraHost, host); eventFired[0] = true; } }); connectionManager.markHostAsDown(host); assertTrue(eventFired[0]); }
@Test public void testOnSuspendCassandraHost() { setupClient(); final CassandraHost host = new CassandraHost("127.0.0.1", 9170); assertTrue(connectionManager.suspendCassandraHost(host)); final boolean[] eventFired = {false}; connectionManager.addListener(listenerName, new ConnectionManagerEmptyListener() { @Override public void onSuspendHost(CassandraHost cassandraHost, boolean removed) { assertEquals(cassandraHost, host); assertTrue(removed); eventFired[0] = true; } }); }
@Test public void testMarkHostDownWithNoRetry() { cassandraHostConfigurator = new CassandraHostConfigurator("127.0.0.1:9170"); cassandraHostConfigurator.setRetryDownedHosts(false); connectionManager = new HConnectionManager(clusterName, cassandraHostConfigurator); new CassandraHost("127.0.0.1", 9170); HClient client = connectionManager.borrowClient(); connectionManager.markHostAsDown(client.getCassandraHost()); assertEquals(0,connectionManager.getActivePools().size()); }
@Test public void testRemoveHost() { setupClient(); CassandraHost cassandraHost = new CassandraHost("127.0.0.1", 9170); connectionManager.removeCassandraHost(cassandraHost); assertEquals(0,connectionManager.getActivePools().size()); assertTrue(connectionManager.addCassandraHost(cassandraHost)); assertEquals(1,connectionManager.getActivePools().size()); connectionManager.markHostAsDown(cassandraHost); assertTrue(connectionManager.removeCassandraHost(cassandraHost)); }
@Test public void testApplyConfig() { CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator("localhost:9170"); cassandraHostConfigurator.setMaxActive(15); cassandraHostConfigurator.setMaxConnectTimeMillis(30000); cassandraHostConfigurator.setMaxLastSuccessTimeMillis(40000); CassandraHost extraHost = new CassandraHost("localhost:9171"); cassandraHostConfigurator.applyConfig(extraHost); assertEquals(15, extraHost.getMaxActive()); assertEquals(30000, extraHost.getMaxConnectTimeMillis()); assertEquals(40000, extraHost.getMaxLastSuccessTimeMillis()); }