/** * Accepts a single {@link Schema}. * * @see TransactionManagers#createInMemory(Set) */ public static TransactionManager createInMemory(Schema schema) { return createInMemory(ImmutableSet.of(schema)); }
@SuppressWarnings("MethodLength") private TransactionManager serializableInternal(@Output List<AutoCloseable> closeables) { MetricsManager metricsManager = MetricsManagers.of(globalMetricsRegistry(), globalTaggedMetricRegistry()); () -> runtimeConfigSupplier().get().orElse(defaultRuntime); config().keyValueService(), Suppliers.compose(AtlasDbRuntimeConfig::keyValueService, runtimeConfigSupplier::get), config().leader(), config().namespace(), Optional.empty(), config().initializeAsync(), adapter); SimpleTimeDuration.of(config().getDefaultLockTimeoutSeconds(), TimeUnit.SECONDS)); LockAndTimestampServices lockAndTimestampServices = createLockAndTimestampServices( metricsManager, config(), runtimeConfigSupplier, registrar(), () -> LockServiceImpl.create(lockServerOptions()), timestampSupplier, managementSupplier, atlasFactory.getTimestampStoreInvalidator(), userAgent()); adapter.setTimestampService(lockAndTimestampServices.timestamp()); KvsProfilingLogger.setSlowLogThresholdMillis(config().getKvsSlowLogThresholdMillis()); KeyValueService keyValueService = initializeCloseable(() -> { KeyValueService kvs = atlasFactory.getKeyValueService(); kvs = ProfilingKeyValueService.create(kvs);
private static boolean areTransactionManagerInitializationPrerequisitesSatisfied( AsyncInitializer initializer, LockAndTimestampServices lockAndTimestampServices) { return initializer.isInitialized() && timeLockMigrationCompleteIfNeeded(lockAndTimestampServices); }
private static LockAndTimestampServices createRawInstrumentedServices( MetricsManager metricsManager, AtlasDbConfig config, Supplier<AtlasDbRuntimeConfig> runtimeConfigSupplier, Consumer<Object> env, com.google.common.base.Supplier<LockService> lock, com.google.common.base.Supplier<TimestampService> time, com.google.common.base.Supplier<TimestampManagementService> timeManagement, TimestampStoreInvalidator invalidator, String userAgent) { AtlasDbRuntimeConfig initialRuntimeConfig = runtimeConfigSupplier.get(); assertNoSpuriousTimeLockBlockInRuntimeConfig(config, initialRuntimeConfig); if (config.leader().isPresent()) { return createRawLeaderServices( metricsManager, config.leader().get(), env, lock, time, timeManagement, userAgent); } else if (config.timestamp().isPresent() && config.lock().isPresent()) { return createRawRemoteServices(metricsManager, config, userAgent); } else if (isUsingTimeLock(config, initialRuntimeConfig)) { return createRawServicesFromTimeLock(metricsManager, config, runtimeConfigSupplier, invalidator, userAgent); } else { return createRawEmbeddedServices(metricsManager, env, lock, time, timeManagement); } }
public BenchmarksResource(AtlasDbConfig config) { this.txnManager = TransactionManagers.builder() .config(config) .userAgent(UserAgents.DEFAULT_USER_AGENT) .globalMetricsRegistry(new MetricRegistry()) .globalTaggedMetricRegistry(new DefaultTaggedMetricRegistry()) .addSchemas(BenchmarksSchema.SCHEMA) .allowHiddenTableAccess(true) .runtimeConfigSupplier(Optional::empty) .build().serializable(); }
private TransactionManagers.LockAndTimestampServices getLockAndTimestampServices() { InMemoryTimestampService ts = new InMemoryTimestampService(); return TransactionManagers.createLockAndTimestampServices( metricsManager, config, () -> runtimeConfig, environment, LockServiceImpl::create, () -> ts, () -> ts, invalidator, USER_AGENT); }
private CoordinationService<InternalSchemaMetadata> getSchemaMetadataCoordinationService( MetricsManager metricsManager, LockAndTimestampServices lockAndTimestampServices, KeyValueService keyValueService) { @SuppressWarnings("unchecked") // Coordination service clearly has this type. CoordinationService<InternalSchemaMetadata> metadataCoordinationService = AtlasDbMetrics.instrument( metricsManager.getRegistry(), CoordinationService.class, CoordinationServices.createDefault( keyValueService, lockAndTimestampServices.timestamp(), config().initializeAsync())); MetadataCoordinationServiceMetrics.registerMetrics(metricsManager, metadataCoordinationService); return metadataCoordinationService; }
/** * 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 LockAndTimestampServices createRawInstrumentedServices( MetricsManager metricsManager, AtlasDbConfig config, Supplier<AtlasDbRuntimeConfig> runtimeConfigSupplier, Consumer<Object> env, com.google.common.base.Supplier<LockService> lock, com.google.common.base.Supplier<TimestampService> time, com.google.common.base.Supplier<TimestampManagementService> timeManagement, TimestampStoreInvalidator invalidator, String userAgent) { AtlasDbRuntimeConfig initialRuntimeConfig = runtimeConfigSupplier.get(); assertNoSpuriousTimeLockBlockInRuntimeConfig(config, initialRuntimeConfig); if (config.leader().isPresent()) { return createRawLeaderServices( metricsManager, config.leader().get(), env, lock, time, timeManagement, userAgent); } else if (config.timestamp().isPresent() && config.lock().isPresent()) { return createRawRemoteServices(metricsManager, config, userAgent); } else if (isUsingTimeLock(config, initialRuntimeConfig)) { return createRawServicesFromTimeLock(metricsManager, config, runtimeConfigSupplier, invalidator, userAgent); } else { return createRawEmbeddedServices(metricsManager, env, lock, time, timeManagement); } }
private TransactionManagers.LockAndTimestampServices createLockAndTimestampServicesForConfig( AtlasDbConfig atlasDbConfig, AtlasDbRuntimeConfig atlasDbRuntimeConfig) { InMemoryTimestampService ts = new InMemoryTimestampService(); return TransactionManagers.createLockAndTimestampServices( metricsManager, atlasDbConfig, () -> atlasDbRuntimeConfig, environment, LockServiceImpl::create, () -> ts, () -> ts, invalidator, USER_AGENT); } }
private CoordinationService<InternalSchemaMetadata> getSchemaMetadataCoordinationService( MetricsManager metricsManager, LockAndTimestampServices lockAndTimestampServices, KeyValueService keyValueService) { @SuppressWarnings("unchecked") // Coordination service clearly has this type. CoordinationService<InternalSchemaMetadata> metadataCoordinationService = AtlasDbMetrics.instrument( metricsManager.getRegistry(), CoordinationService.class, CoordinationServices.createDefault( keyValueService, lockAndTimestampServices.timestamp(), config().initializeAsync())); MetadataCoordinationServiceMetrics.registerMetrics(metricsManager, metadataCoordinationService); return metadataCoordinationService; }
@SuppressWarnings("MethodLength") private TransactionManager serializableInternal(@Output List<AutoCloseable> closeables) { MetricsManager metricsManager = MetricsManagers.of(globalMetricsRegistry(), globalTaggedMetricRegistry()); () -> runtimeConfigSupplier().get().orElse(defaultRuntime); config().keyValueService(), Suppliers.compose(AtlasDbRuntimeConfig::keyValueService, runtimeConfigSupplier::get), config().leader(), config().namespace(), Optional.empty(), config().initializeAsync(), adapter); SimpleTimeDuration.of(config().getDefaultLockTimeoutSeconds(), TimeUnit.SECONDS)); LockAndTimestampServices lockAndTimestampServices = createLockAndTimestampServices( metricsManager, config(), runtimeConfigSupplier, registrar(), () -> LockServiceImpl.create(lockServerOptions()), timestampSupplier, managementSupplier, atlasFactory.getTimestampStoreInvalidator(), userAgent()); adapter.setTimestampService(lockAndTimestampServices.timestamp()); KvsProfilingLogger.setSlowLogThresholdMillis(config().getKvsSlowLogThresholdMillis()); KeyValueService keyValueService = initializeCloseable(() -> { KeyValueService kvs = atlasFactory.getKeyValueService(); kvs = ProfilingKeyValueService.create(kvs);
@SuppressWarnings("OptionalUsedAsFieldOrParameterType") private TransactionManager createTransactionManager(AtlasDbConfig config, Optional<AtlasDbRuntimeConfig> atlasDbRuntimeConfigOptional, Environment environment, TaggedMetricRegistry taggedMetricRegistry) { return TransactionManagers.builder() .config(config) .userAgent("ete test") .globalMetricsRegistry(environment.metrics()) .globalTaggedMetricRegistry(taggedMetricRegistry) .registrar(environment.jersey()::register) .addAllSchemas(ETE_SCHEMAS) .runtimeConfigSupplier(() -> atlasDbRuntimeConfigOptional) .build() .serializable(); }
@Test public void canCreateInMemoryWithSetOfSchemas() { TransactionManagers.createInMemory(ImmutableSet.of( GenericTestSchema.getSchema())); }
@Test public void timeLockMigrationReportsReadyIfMigrationNotNeeded() { when(lockAndTimestampServices.migrator()).thenReturn(Optional.empty()); assertTrue(TransactionManagers.timeLockMigrationCompleteIfNeeded(lockAndTimestampServices)); }
private void verifyUserAgentOnTimestampAndLockRequests(String timestampPath, String lockPath) { InMemoryTimestampService ts = new InMemoryTimestampService(); TransactionManagers.LockAndTimestampServices lockAndTimestamp = TransactionManagers.createLockAndTimestampServices( metricsManager, config, () -> runtimeConfig, environment, LockServiceImpl::create, () -> ts, () -> ts, invalidator, USER_AGENT); lockAndTimestamp.timelock().getFreshTimestamp(); lockAndTimestamp.timelock().currentTimeMillis(); availableServer.verify(postRequestedFor(urlMatching(timestampPath)) .withHeader(USER_AGENT_HEADER, WireMock.equalTo(USER_AGENT))); availableServer.verify(postRequestedFor(urlMatching(lockPath)) .withHeader(USER_AGENT_HEADER, WireMock.equalTo(USER_AGENT))); }
@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 canCreateInMemory() { TransactionManagers.createInMemory(GenericTestSchema.getSchema()); }
@Test public void timeLockMigrationReportsReadyIfMigrationDone() { when(migrator.isInitialized()).thenReturn(true); when(lockAndTimestampServices.migrator()).thenReturn(Optional.of(migrator)); assertTrue(TransactionManagers.timeLockMigrationCompleteIfNeeded(lockAndTimestampServices)); }
@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)); }