public void cacheInitialCassandraHosts() { cassandraHosts = config.servers().stream() .sorted(Comparator.comparing(InetSocketAddress::toString)) .collect(Collectors.toList()); cassandraHosts.forEach(this::addPool); }
@Value.Check protected final void check() { Preconditions.checkState(!servers().isEmpty(), "'servers' must have at least one entry"); for (InetSocketAddress addr : servers()) { Preconditions.checkState(addr.getPort() > 0, "each server must specify a port ([host]:[port])"); } double evictionCheckProportion = proportionConnectionsToCheckPerEvictionRun(); Preconditions.checkArgument(evictionCheckProportion > 0.01 && evictionCheckProportion <= 1, "'proportionConnectionsToCheckPerEvictionRun' must be between 0.01 and 1"); } }
private static boolean attemptToCreateKeyspace(CassandraKeyValueServiceConfig config) { return config.servers().stream().anyMatch(host -> attemptToCreateIfNotExists(config, host)); }
@Override @Value.Default public int concurrentGetRangesThreadPoolSize() { return poolSize() * servers().size(); }
static boolean uniqueSchemaWithQuorumAgreementAndOtherNodesUnreachable( CassandraKeyValueServiceConfig config, Map<String, List<String>> versions) { List<String> reachableSchemas = getDistinctReachableSchemas(versions); if (reachableSchemas.size() > 1) { return false; } int numberOfServers = config.servers().size(); int numberOfVisibleNodes = getNumberOfReachableNodes(versions); return numberOfVisibleNodes >= ((numberOfServers / 2) + 1); }
@VisibleForTesting InetSocketAddress getAddressForHost(String host) throws UnknownHostException { if (config.addressTranslation().containsKey(host)) { return config.addressTranslation().get(host); } InetAddress resolvedHost = InetAddress.getByName(host); Set<InetSocketAddress> allKnownHosts = Sets.union(currentPools.keySet(), config.servers()); for (InetSocketAddress address : allKnownHosts) { if (Objects.equals(address.getAddress(), resolvedHost)) { return address; } } Set<Integer> allKnownPorts = allKnownHosts.stream() .map(InetSocketAddress::getPort) .collect(Collectors.toSet()); if (allKnownPorts.size() == 1) { // if everyone is on one port, try and use that return new InetSocketAddress(resolvedHost, Iterables.getOnlyElement(allKnownPorts)); } else { throw new UnknownHostException("Couldn't find the provided host in server list or current servers"); } }
private static ExecutorService createInstrumentedFixedThreadPool(CassandraKeyValueServiceConfig config, MetricRegistry registry) { return new InstrumentedExecutorService( createFixedThreadPool("Atlas Cassandra KVS", config.poolSize() * config.servers().size()), registry, MetricRegistry.name(CassandraKeyValueService.class, "executorService")); }
config.servers().stream().map(InetSocketAddress::getHostName).collect(Collectors.toList())) .toString();
@Test public void preservesOtherPropertiesOnResolvedConfigWithNamespace() { CassandraKeyValueServiceConfig newConfig = CassandraAtlasDbFactory.preprocessKvsConfig(CONFIG_WITHOUT_KEYSPACE, Optional::empty, Optional.of(KEYSPACE)); assertThat(newConfig.servers()).isEqualTo(SERVERS); assertThat(newConfig.replicationFactor()).isEqualTo(1); }
@Test public void hostIsAutomaticallyAddedOnStartup() { when(config.servers()).thenReturn(ImmutableSet.of(HOST_1)); when(config.autoRefreshNodes()).thenReturn(true); setCassandraServersTo(HOST_1, HOST_2); createClientPool(); assertThat(poolServers).containsExactlyInAnyOrder(HOST_1, HOST_2); }
@Test public void hostIsAutomaticallyRemovedOnStartup() { when(config.servers()).thenReturn(ImmutableSet.of(HOST_1, HOST_2, HOST_3)); when(config.autoRefreshNodes()).thenReturn(true); setCassandraServersTo(HOST_1); createClientPool(); assertThat(poolServers).containsExactlyInAnyOrder(HOST_1); }
@Test public void otherPropertiesConservedWhenAddingKeyspace() { CassandraKeyValueServiceConfig newConfig = CassandraKeyValueServiceConfigs.copyWithKeyspace( CONFIG_WITHOUT_KEYSPACE, KEYSPACE); assertThat(newConfig.replicationFactor()).isEqualTo(1); assertThat(newConfig.servers()).isEqualTo(SERVERS); }
@Test public void hostsAreNotRemovedOrAddedWhenRefreshIsDisabled() { when(config.servers()).thenReturn(ImmutableSet.of(HOST_1, HOST_2)); when(config.autoRefreshNodes()).thenReturn(false); setCassandraServersTo(HOST_1); createClientPool(); assertThat(poolServers).containsExactlyInAnyOrder(HOST_1, HOST_2); setCassandraServersTo(HOST_1, HOST_2, HOST_3); deterministicExecutor.tick(config.poolRefreshIntervalSeconds(), TimeUnit.SECONDS); assertThat(poolServers).containsExactlyInAnyOrder(HOST_1, HOST_2); }
@Test public void hostIsAutomaticallyRemovedOnRefresh() { when(config.servers()).thenReturn(ImmutableSet.of(HOST_1, HOST_2, HOST_3)); when(config.autoRefreshNodes()).thenReturn(true); setCassandraServersTo(HOST_1, HOST_2, HOST_3); createClientPool(); assertThat(poolServers).containsExactlyInAnyOrder(HOST_1, HOST_2, HOST_3); setCassandraServersTo(HOST_1, HOST_2); deterministicExecutor.tick(config.poolRefreshIntervalSeconds(), TimeUnit.SECONDS); assertThat(poolServers).containsExactlyInAnyOrder(HOST_1, HOST_2); }
@Test public void hostIsAutomaticallyAddedOnRefresh() { when(config.servers()).thenReturn(ImmutableSet.of(HOST_1, HOST_2)); when(config.autoRefreshNodes()).thenReturn(true); setCassandraServersTo(HOST_1, HOST_2); createClientPool(); assertThat(poolServers).containsExactlyInAnyOrder(HOST_1, HOST_2); setCassandraServersTo(HOST_1, HOST_2, HOST_3); deterministicExecutor.tick(config.poolRefreshIntervalSeconds(), TimeUnit.SECONDS); assertThat(poolServers).containsExactlyInAnyOrder(HOST_1, HOST_2, HOST_3); }
private synchronized void refreshPool() { blacklist.checkAndUpdate(cassandra.getPools()); if (config.autoRefreshNodes()) { setServersInPoolTo(cassandra.refreshTokenRangesAndGetServers()); } else { setServersInPoolTo(config.servers()); } cassandra.debugLogStateOfPool(); }
@SuppressWarnings("OptionalUsedAsFieldOrParameterType") // Unpacking it seems less readable private CassandraClientPoolImpl clientPoolWith( ImmutableSet<InetSocketAddress> servers, ImmutableSet<InetSocketAddress> serversInPool, Optional<Exception> failureMode) { when(config.servers()).thenReturn(servers); CassandraClientPoolImpl cassandraClientPool = CassandraClientPoolImpl.createImplForTest( MetricsManagers.of(metricRegistry, taggedMetricRegistry), config, CassandraClientPoolImpl.StartupChecks.DO_NOT_RUN, blacklist); serversInPool.forEach(address -> cassandraClientPool.getCurrentPools() .put(address, getMockPoolingContainerForHost(address, failureMode))); return cassandraClientPool; }
@Test public void hostsAreResetToConfigOnRefreshWhenRefreshIsDisabled() { when(config.servers()).thenReturn(ImmutableSet.of(HOST_1, HOST_2)); when(config.autoRefreshNodes()).thenReturn(false); setCassandraServersTo(HOST_1); createClientPool(); assertThat(poolServers).containsExactlyInAnyOrder(HOST_1, HOST_2); cassandra.addPool(HOST_3); assertThat(poolServers).containsExactlyInAnyOrder(HOST_1, HOST_2, HOST_3); deterministicExecutor.tick(config.poolRefreshIntervalSeconds(), TimeUnit.SECONDS); assertThat(poolServers).containsExactlyInAnyOrder(HOST_1, HOST_2); setCassandraServersTo(HOST_2, HOST_3); cassandra.removePool(HOST_1); assertThat(poolServers).containsExactlyInAnyOrder(HOST_2); deterministicExecutor.tick(config.poolRefreshIntervalSeconds(), TimeUnit.SECONDS); assertThat(poolServers).containsExactlyInAnyOrder(HOST_1, HOST_2); }
public void cacheInitialCassandraHosts() { cassandraHosts = config.servers().stream() .sorted(Comparator.comparing(InetSocketAddress::toString)) .collect(Collectors.toList()); cassandraHosts.forEach(this::addPool); }
@Override @Value.Default public int concurrentGetRangesThreadPoolSize() { return poolSize() * servers().size(); }