private void setUpLeaderBlockInConfig() throws IOException { when(config.leader()).thenReturn(Optional.of(ImmutableLeaderConfig.builder() .localServer(getUriForPort(availablePort)) .addLeaders(getUriForPort(availablePort)) .acceptorLogDir(temporaryFolder.newFolder()) .learnerLogDir(temporaryFolder.newFolder()) .quorumSize(1) .build())); }
/** * Creates timestamp and lock services for the given client. It is expected that for each client there should * only be (up to) one active timestamp service, and one active lock service at any time. * @param client Client namespace to create the services for * @return Invalidating timestamp and lock services */ private TimeLockServices createInvalidatingTimeLockServices(String client) { List<String> uris = install.cluster().clusterMembers(); ImmutableLeaderConfig leaderConfig = ImmutableLeaderConfig.builder() .addLeaders(uris.toArray(new String[uris.size()])) .localServer(install.cluster().localServer()) .sslConfiguration(PaxosRemotingUtils.getSslConfigurationOptional(install)) .quorumSize(PaxosRemotingUtils.getQuorumSize(uris)) .build(); Supplier<ManagedTimestampService> rawTimestampServiceSupplier = timestampCreator .createTimestampService(client, leaderConfig); Supplier<LockService> rawLockServiceSupplier = lockCreator::createThreadPoolingLockService; return timelockCreator.createTimeLockServices(client, rawTimestampServiceSupplier, rawLockServiceSupplier); } }
@Test(expected = IllegalStateException.class) public void cannotCreateALeaderConfigWithQuorumSizeNotBeingAMajorityOfTheLeaders() { ImmutableLeaderConfig.builder() .localServer("me") .addLeaders("not me", "me") .quorumSize(1) .build(); }
@Test(expected = IllegalStateException.class) public void cannotCreateALeaderConfigWithQuorumSizeLargerThanTheAmountOfLeaders() { ImmutableLeaderConfig.builder() .localServer("me") .addLeaders("not me", "me") .quorumSize(3) .build(); } }