@Test public void runsClosingCallbackOnShutdown() throws Exception { AtlasDbConfig atlasDbConfig = ImmutableAtlasDbConfig.builder() .keyValueService(new InMemoryAtlasDbConfig()) .defaultLockTimeoutSeconds(120) .build(); Runnable callback = mock(Runnable.class); TransactionManager manager = TransactionManagers.builder() .config(atlasDbConfig) .userAgent("test") .globalMetricsRegistry(new MetricRegistry()) .globalTaggedMetricRegistry(DefaultTaggedMetricRegistry.getDefault()) .registrar(environment) .build() .serializable(); manager.registerClosingCallback(callback); manager.close(); verify(callback, times(1)).run(); }
@Test public void absentNamespaceRequiresKvsNamespace() { assertThatThrownBy(() -> ImmutableAtlasDbConfig.builder() .keyValueService(KVS_CONFIG_WITHOUT_NAMESPACE) .leader(LEADER_CONFIG) .build()) .isInstanceOf(IllegalStateException.class) .satisfies((exception) -> assertThat(exception.getMessage(), containsString("config needs to be set"))); }
@Test public void cannotSpecifyZeroServersIfUsingTimestampBlock() { assertThatThrownBy(() -> ImmutableAtlasDbConfig.builder() .keyValueService(KVS_CONFIG_WITHOUT_NAMESPACE) .namespace(CLIENT_NAMESPACE) .timestamp(ImmutableServerListConfig.builder().build()) .lock(SINGLETON_SERVER_LIST) .build()).isInstanceOf(IllegalStateException.class); }
/** * Create a {@link TransactionManager} backed by an * {@link com.palantir.atlasdb.keyvalue.impl.InMemoryKeyValueService}. This should be used for testing * purposes only. */ public static TransactionManager createInMemory(Set<Schema> schemas) { AtlasDbConfig config = ImmutableAtlasDbConfig.builder().keyValueService(new InMemoryAtlasDbConfig()).build(); return builder() .config(config) .userAgent(UserAgents.DEFAULT_USER_AGENT) .globalMetricsRegistry(new MetricRegistry()) .globalTaggedMetricRegistry(DefaultTaggedMetricRegistry.getDefault()) .addAllSchemas(schemas) .build() .serializable(); }
private static AtlasDbConfig convertRuntimeConfigWithTimeLock(AtlasDbConfig installConfig, AtlasDbRuntimeConfig runtimeConfig) { TimeLockRuntimeConfig timeLockRuntimeConfig = runtimeConfig.timelockRuntime().get(); ImmutableTimeLockClientConfig timeLockClientConfig = ImmutableTimeLockClientConfig.builder() .client(installConfig.getNamespaceString()) .serversList(timeLockRuntimeConfig.serversList()) .build(); return ImmutableAtlasDbConfig.builder() .from(installConfig) .timelock(timeLockClientConfig) .build(); }
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 AtlasDbConfig addFallbackSslConfigurationToAtlasDbConfig( AtlasDbConfig config, Optional<SslConfiguration> sslConfiguration) { return ImmutableAtlasDbConfig.builder() .from(config) .leader(addFallbackSslConfigurationToLeader(config.leader(), sslConfiguration)) .lock(addFallbackSslConfigurationToServerList(config.lock(), sslConfiguration)) .timestamp(addFallbackSslConfigurationToServerList(config.timestamp(), sslConfiguration)) .timelock(addFallbackSslConfigurationToTimeLockClientConfig(config.timelock(), sslConfiguration)) .build(); }
@Test public void setsGlobalDefaultLockTimeout() { TimeDuration expectedTimeout = SimpleTimeDuration.of(47, TimeUnit.SECONDS); AtlasDbConfig atlasDbConfig = ImmutableAtlasDbConfig.builder() .keyValueService(new InMemoryAtlasDbConfig()) .defaultLockTimeoutSeconds((int) expectedTimeout.getTime()) .build(); TransactionManagers.builder() .config(atlasDbConfig) .userAgent("test") .globalMetricsRegistry(new MetricRegistry()) .globalTaggedMetricRegistry(DefaultTaggedMetricRegistry.getDefault()) .registrar(environment) .build() .serializable(); assertEquals(expectedTimeout, LockRequest.getDefaultLockTimeout()); LockRequest lockRequest = LockRequest .builder(ImmutableSortedMap.of(StringLockDescriptor.of("foo"), LockMode.WRITE)).build(); assertEquals(expectedTimeout, lockRequest.getLockTimeout()); }
@Test public void asyncInitializationIsSynchronousIfKvsIsReady() { AtlasDbConfig atlasDbConfig = ImmutableAtlasDbConfig.builder() .keyValueService(new InMemoryAtlasDbConfig()) .initializeAsync(true) .build(); TransactionManager manager = TransactionManagers.builder() .config(atlasDbConfig) .userAgent("test") .globalMetricsRegistry(new MetricRegistry()) .globalTaggedMetricRegistry(DefaultTaggedMetricRegistry.getDefault()) .registrar(environment) .addSchemas(GenericTestSchema.getSchema()) .build() .serializable(); assertTrue(manager.isInitialized()); performTransaction(manager); }
@Test public void asyncInitializationEventuallySucceeds() { AtlasDbConfig atlasDbConfig = ImmutableAtlasDbConfig.builder() .keyValueService(new InMemoryAsyncAtlasDbConfig()) .initializeAsync(true) .build(); TransactionManager manager = TransactionManagers.builder() .config(atlasDbConfig) .userAgent("test") .globalMetricsRegistry(new MetricRegistry()) .globalTaggedMetricRegistry(DefaultTaggedMetricRegistry.getDefault()) .registrar(environment) .addSchemas(GenericTestSchema.getSchema()) .build() .serializable(); assertFalse(manager.isInitialized()); assertThatThrownBy(() -> manager.runTaskWithRetry(unused -> null)).isInstanceOf(NotInitializedException.class); Awaitility.await().atMost(12, TimeUnit.SECONDS).until(manager::isInitialized); performTransaction(manager); }
@Test public void keyValueServiceMetricsDoNotContainUserAgent() { AtlasDbConfig atlasDbConfig = ImmutableAtlasDbConfig.builder() .keyValueService(new InMemoryAtlasDbConfig()) .build(); MetricRegistry metrics = new MetricRegistry(); TransactionManagers.builder() .config(atlasDbConfig) .userAgent("test") .globalMetricsRegistry(metrics) .globalTaggedMetricRegistry(DefaultTaggedMetricRegistry.getDefault()) .registrar(environment) .build() .serializable(); assertThat(metrics.getNames().stream() .anyMatch(metricName -> metricName.contains(USER_AGENT_NAME)), is(false)); }
/** * Create a {@link TransactionManager} backed by an * {@link com.palantir.atlasdb.keyvalue.impl.InMemoryKeyValueService}. This should be used for testing * purposes only. */ public static TransactionManager createInMemory(Set<Schema> schemas) { AtlasDbConfig config = ImmutableAtlasDbConfig.builder().keyValueService(new InMemoryAtlasDbConfig()).build(); return builder() .config(config) .userAgent(UserAgents.DEFAULT_USER_AGENT) .globalMetricsRegistry(new MetricRegistry()) .globalTaggedMetricRegistry(DefaultTaggedMetricRegistry.getDefault()) .addAllSchemas(schemas) .build() .serializable(); }
public AtlasDbServices connect() { if (services != null) { throw new IllegalStateException("connect() has already been called"); } DockerizedDatabaseUri dburi = DockerizedDatabaseUri.fromUriString(uri); KeyValueServiceConfig config = dburi.getKeyValueServiceInstrumentation() .getKeyValueServiceConfig(dburi.getAddress()); ImmutableAtlasDbConfig atlasDbConfig = ImmutableAtlasDbConfig.builder().keyValueService(config).build(); ImmutableAtlasDbRuntimeConfig runtimeConfig = ImmutableAtlasDbRuntimeConfig.defaultRuntimeConfig(); ServicesConfigModule servicesConfigModule = ServicesConfigModule.create(atlasDbConfig, runtimeConfig); services = DaggerAtlasDbServices.builder() .servicesConfigModule(servicesConfigModule) .build(); return services; }
@Test public void inMemoryConfigCannotHaveEmptyNamespaceWithEmptyTimelockClient() { InMemoryAtlasDbConfig kvsConfig = new InMemoryAtlasDbConfig(); assertFalse("This test assumes the InMemoryAtlasDbConfig has no namespace by default", kvsConfig.namespace().isPresent()); assertThatThrownBy(() -> ImmutableAtlasDbConfig.builder() .namespace(Optional.empty()) .keyValueService(kvsConfig) .timelock(TIMELOCK_CONFIG_WITH_OPTIONAL_EMPTY_CLIENT) .build()) .isInstanceOf(IllegalStateException.class) .satisfies((exception) -> assertThat(exception.getMessage(), containsString("TimeLock client should not be empty"))); }
@Test(expected = IllegalStateException.class) public void kvsConfigIsRequired() { ImmutableAtlasDbConfig.builder().build(); }
@Test public void inMemoryConfigWorksWithNonTestNamespace() { InMemoryAtlasDbConfig kvsConfig = new InMemoryAtlasDbConfig(); assertFalse("This test assumes the InMemoryAtlasDbConfig has no namespace by default", kvsConfig.namespace().isPresent()); AtlasDbConfig config = ImmutableAtlasDbConfig.builder() .namespace("clive") .keyValueService(kvsConfig) .build(); assertThat(config.getNamespaceString(), equalTo("clive")); }
@Test public void configWithNoLeaderOrLockIsValid() { AtlasDbConfig config = ImmutableAtlasDbConfig.builder() .keyValueService(KVS_CONFIG_WITH_NAMESPACE) .build(); assertThat(config, not(nullValue())); }
@Test public void configWithLeaderBlockIsValid() { AtlasDbConfig config = ImmutableAtlasDbConfig.builder() .keyValueService(KVS_CONFIG_WITH_NAMESPACE) .leader(LEADER_CONFIG) .build(); assertThat(config.getNamespaceString(), equalTo(TEST_NAMESPACE)); assertThat(config, not(nullValue())); }
@Test public void configWithTimelockBlockIsValid() { AtlasDbConfig config = ImmutableAtlasDbConfig.builder() .keyValueService(KVS_CONFIG_WITH_NAMESPACE) .timelock(TIMELOCK_CONFIG) .build(); assertThat(config.getNamespaceString(), equalTo(TEST_NAMESPACE)); assertThat(config, not(nullValue())); }