@Value.Check protected final void check() { Preconditions.checkState(quorumSize() > leaders().size() / 2, "The quorumSize '%s' must be over half the amount of leader entries %s.", quorumSize(), leaders()); Preconditions.checkState(leaders().size() >= quorumSize(), "The quorumSize '%s' must be less than or equal to the amount of leader entries %s.", quorumSize(), leaders()); Preconditions.checkArgument(leaders().contains(localServer()), "The localServer '%s' must included in the leader entries %s.", localServer(), leaders()); Preconditions.checkArgument(ensureDirectoryExists(learnerLogDir()), "Learner log directory '%s' does not exist and cannot be created.", learnerLogDir()); Preconditions.checkArgument(ensureDirectoryExists(acceptorLogDir()), "Acceptor log directory '%s' does not exist and cannot be created.", acceptorLogDir()); }
private static Optional<LeaderConfig> addFallbackSslConfigurationToLeader( Optional<LeaderConfig> config, Optional<SslConfiguration> sslConfiguration) { return config.map(leader -> ImmutableLeaderConfig.builder() .from(leader) .sslConfiguration(getFirstPresentOptional(leader.sslConfiguration(), sslConfiguration)) .build()); }
public static LocalPaxosServices createInstrumentedLocalServices(MetricsManager metricsManager, LeaderConfig config, Supplier<LeaderRuntimeConfig> runtime, String userAgent) { Set<String> remoteLeaderUris = Sets.newHashSet(config.leaders()); remoteLeaderUris.remove(config.localServer()); RemotePaxosServerSpec remotePaxosServerSpec = ImmutableRemotePaxosServerSpec.builder() .remoteLeaderUris(remoteLeaderUris) .remoteAcceptorUris(remoteLeaderUris) .remoteLearnerUris(remoteLeaderUris) .build(); return createInstrumentedLocalServices(metricsManager, config, runtime, remotePaxosServerSpec, userAgent); }
PaxosAcceptorImpl.newAcceptor(config.acceptorLogDir().getPath())); PaxosLearner ourLearner = AtlasDbMetrics.instrument(metricsManager.getRegistry(), PaxosLearner.class, PaxosLearnerImpl.newLearner(config.learnerLogDir().getPath(), leadershipEventRecorder)); ServiceCreator.createTrustContext(config.sslConfiguration()); MetricRegistry.name(PaxosProposer.class, "executor")); PaxosProposer proposer = AtlasDbMetrics.instrument(metricsManager.getRegistry(), PaxosProposer.class, PaxosProposerImpl.newProposer(ourLearner, acceptors, learners, config.quorumSize(), leaderUuid, proposerExecutorService)); .learners(learners) .executorServiceFactory(leaderElectionExecutor) .pingRateMs(config.pingRateMs()) .randomWaitBeforeProposingLeadershipMs(config.randomWaitBeforeProposingLeadershipMs()) .leaderPingResponseWaitMs(config.leaderPingResponseWaitMs()) .eventRecorder(leadershipEventRecorder) .onlyLogOnQuorumFailure(Suppliers.compose(LeaderRuntimeConfig::onlyLogOnQuorumFailure, runtime::get))
.servers(leaderConfig.leaders()) .sslConfiguration(leaderConfig.sslConfiguration()) .build(); LockService remoteLock = new ServiceCreator<>(metricsManager, LockService.class, userAgent) .apply(serverListConfig); if (leaderConfig.leaders().size() == 1) { String localServerId = localPingableLeader.getUUID(); PingableLeader remotePingableLeader = AtlasDbFeignTargetFactory.createRsProxy( ServiceCreator.createTrustContext(leaderConfig.sslConfiguration()), Iterables.getOnlyElement(leaderConfig.leaders()), PingableLeader.class, userAgent);
private void checkLeaderAndTimelockBlocks() { if (leader().isPresent()) { Preconditions.checkState(areTimeAndLockConfigsAbsent(), "If the leader block is present, then the lock and timestamp server blocks must both be absent."); Preconditions.checkState(!timelock().isPresent(), "If the leader block is present, then the timelock block must be absent."); Preconditions.checkState(!leader().get().leaders().isEmpty(), "Leader config must have at least one server."); } if (timelock().isPresent()) { Preconditions.checkState(areTimeAndLockConfigsAbsent(), "If the timelock block is present, then the lock and timestamp blocks must both be absent."); } }
private boolean ensureDirectoryExists(File directory) { if (learnerLogDir().exists()) { return true; } try { Files.createDirectories(Paths.get(directory.getPath())); return true; } catch (Throwable t) { log.error("Could not create the directory {}", SafeArg.of("dirName", directory.getPath()), t); return false; } } }
PaxosAcceptorImpl.newAcceptor(config.acceptorLogDir().getPath())); PaxosLearner ourLearner = AtlasDbMetrics.instrument(metricsManager.getRegistry(), PaxosLearner.class, PaxosLearnerImpl.newLearner(config.learnerLogDir().getPath(), leadershipEventRecorder)); ServiceCreator.createTrustContext(config.sslConfiguration()); MetricRegistry.name(PaxosProposer.class, "executor")); PaxosProposer proposer = AtlasDbMetrics.instrument(metricsManager.getRegistry(), PaxosProposer.class, PaxosProposerImpl.newProposer(ourLearner, acceptors, learners, config.quorumSize(), leaderUuid, proposerExecutorService)); .learners(learners) .executorServiceFactory(leaderElectionExecutor) .pingRateMs(config.pingRateMs()) .randomWaitBeforeProposingLeadershipMs(config.randomWaitBeforeProposingLeadershipMs()) .leaderPingResponseWaitMs(config.leaderPingResponseWaitMs()) .eventRecorder(leadershipEventRecorder) .onlyLogOnQuorumFailure(Suppliers.compose(LeaderRuntimeConfig::onlyLogOnQuorumFailure, runtime::get))
private static AtlasDbConfig convertConfigWithLeaderBlockToClientConfig(AtlasDbConfig serverConfig) { ServerListConfig leaders = ImmutableServerListConfig.builder() .servers(serverConfig.leader().get().leaders()) .sslConfiguration(serverConfig.leader().get().sslConfiguration()) .build(); return ImmutableAtlasDbConfig.builder() .from(serverConfig) .leader(Optional.empty()) .lock(leaders) .timestamp(leaders) .build(); }
public static LocalPaxosServices createInstrumentedLocalServices(MetricsManager metricsManager, LeaderConfig config, Supplier<LeaderRuntimeConfig> runtime, String userAgent) { Set<String> remoteLeaderUris = Sets.newHashSet(config.leaders()); remoteLeaderUris.remove(config.localServer()); RemotePaxosServerSpec remotePaxosServerSpec = ImmutableRemotePaxosServerSpec.builder() .remoteLeaderUris(remoteLeaderUris) .remoteAcceptorUris(remoteLeaderUris) .remoteLearnerUris(remoteLeaderUris) .build(); return createInstrumentedLocalServices(metricsManager, config, runtime, remotePaxosServerSpec, userAgent); }
private void checkLeaderAndTimelockBlocks() { if (leader().isPresent()) { Preconditions.checkState(areTimeAndLockConfigsAbsent(), "If the leader block is present, then the lock and timestamp server blocks must both be absent."); Preconditions.checkState(!timelock().isPresent(), "If the leader block is present, then the timelock block must be absent."); Preconditions.checkState(!leader().get().leaders().isEmpty(), "Leader config must have at least one server."); } if (timelock().isPresent()) { Preconditions.checkState(areTimeAndLockConfigsAbsent(), "If the timelock block is present, then the lock and timestamp blocks must both be absent."); } }
private boolean ensureDirectoryExists(File directory) { if (learnerLogDir().exists()) { return true; } try { Files.createDirectories(Paths.get(directory.getPath())); return true; } catch (Throwable t) { log.error("Could not create the directory {}", SafeArg.of("dirName", directory.getPath()), t); return false; } } }
@Value.Check protected final void check() { Preconditions.checkState(quorumSize() > leaders().size() / 2, "The quorumSize '%s' must be over half the amount of leader entries %s.", quorumSize(), leaders()); Preconditions.checkState(leaders().size() >= quorumSize(), "The quorumSize '%s' must be less than or equal to the amount of leader entries %s.", quorumSize(), leaders()); Preconditions.checkArgument(leaders().contains(localServer()), "The localServer '%s' must included in the leader entries %s.", localServer(), leaders()); Preconditions.checkArgument(ensureDirectoryExists(learnerLogDir()), "Learner log directory '%s' does not exist and cannot be created.", learnerLogDir()); Preconditions.checkArgument(ensureDirectoryExists(acceptorLogDir()), "Acceptor log directory '%s' does not exist and cannot be created.", acceptorLogDir()); }
.servers(leaderConfig.leaders()) .sslConfiguration(leaderConfig.sslConfiguration()) .build(); LockService remoteLock = new ServiceCreator<>(metricsManager, LockService.class, userAgent) .apply(serverListConfig); if (leaderConfig.leaders().size() == 1) { String localServerId = localPingableLeader.getUUID(); PingableLeader remotePingableLeader = AtlasDbFeignTargetFactory.createRsProxy( ServiceCreator.createTrustContext(leaderConfig.sslConfiguration()), Iterables.getOnlyElement(leaderConfig.leaders()), PingableLeader.class, userAgent);
@Test public void addingAbsentFallbackSslWhenItDoesntExistsLeavesItAsAbsent() { AtlasDbConfig withoutSsl = ImmutableAtlasDbConfig.builder() .keyValueService(KVS_CONFIG_WITH_NAMESPACE) .leader(LEADER_CONFIG) .build(); AtlasDbConfig withSsl = AtlasDbConfigs.addFallbackSslConfigurationToAtlasDbConfig(withoutSsl, NO_SSL_CONFIG); assertThat(withSsl.leader().get().sslConfiguration(), is(NO_SSL_CONFIG)); }
@Test public void addingFallbackSslAddsItToLeaderBlock() { AtlasDbConfig withoutSsl = ImmutableAtlasDbConfig.builder() .keyValueService(KVS_CONFIG_WITH_NAMESPACE) .leader(LEADER_CONFIG) .build(); AtlasDbConfig withSsl = AtlasDbConfigs.addFallbackSslConfigurationToAtlasDbConfig(withoutSsl, SSL_CONFIG); assertThat(withSsl.leader().get().sslConfiguration(), is(SSL_CONFIG)); assertThat(withoutSsl.getNamespaceString(), equalTo(TEST_NAMESPACE)); }
@Test public void addingFallbackSslWhenItExistsDoesntOverride() { AtlasDbConfig withoutSsl = ImmutableAtlasDbConfig.builder() .keyValueService(KVS_CONFIG_WITH_NAMESPACE) .leader(ImmutableLeaderConfig.builder() .from(LEADER_CONFIG) .sslConfiguration(SSL_CONFIG) .build()) .build(); AtlasDbConfig withSsl = AtlasDbConfigs.addFallbackSslConfigurationToAtlasDbConfig(withoutSsl, OTHER_SSL_CONFIG); assertThat(withSsl.leader().get().sslConfiguration(), is(SSL_CONFIG)); }
private static Optional<LeaderConfig> addFallbackSslConfigurationToLeader( Optional<LeaderConfig> config, Optional<SslConfiguration> sslConfiguration) { return config.map(leader -> ImmutableLeaderConfig.builder() .from(leader) .sslConfiguration(getFirstPresentOptional(leader.sslConfiguration(), sslConfiguration)) .build()); }