@Provides @Singleton public TimelockService provideTimelockService(TransactionManagers.LockAndTimestampServices lts) { return lts.timelock(); }
private void assertThatTimeAndLockMetricsAreRecorded(String timestampMetric, String lockMetric) { assertThat(metricsManager.getRegistry().timer(timestampMetric).getCount(), is(equalTo(0L))); assertThat(metricsManager.getRegistry().timer(lockMetric).getCount(), is(equalTo(0L))); TransactionManagers.LockAndTimestampServices lockAndTimestamp = getLockAndTimestampServices(); lockAndTimestamp.timelock().getFreshTimestamp(); lockAndTimestamp.timelock().currentTimeMillis(); assertThat(metricsManager.getRegistry().timer(timestampMetric).getCount(), is(equalTo(1L))); assertThat(metricsManager.getRegistry().timer(lockMetric).getCount(), is(equalTo(1L))); }
private void verifyUsingTimeLockByGettingAFreshTimestamp() { when(config.namespace()).thenReturn(Optional.of(CLIENT)); getLockAndTimestampServices().timelock().getFreshTimestamp(); availableServer.verify(1, postRequestedFor(urlMatching(TIMELOCK_TIMESTAMP_PATH))); }
metricsManager, kvs, lts.timelock(), lts.timestampManagement(), lts.lock(),
private static Callback<TransactionManager> timelockConsistencyCheckCallback( AtlasDbConfig atlasDbConfig, AtlasDbRuntimeConfig initialRuntimeConfig, LockAndTimestampServices lockAndTimestampServices) { if (isUsingTimeLock(atlasDbConfig, initialRuntimeConfig)) { // Only do the consistency check if we're using TimeLock. // This avoids a bootstrapping problem with leader-block services without async initialisation, // where you need a working timestamp service to check consistency, you need to check consistency // before you can return a TM, you need to return a TM to listen on ports, and you need to listen on // ports in order to get a working timestamp service. return ConsistencyCheckRunner.create( ImmutableTimestampCorroborationConsistencyCheck.builder() .conservativeBound(TransactionManager::getUnreadableTimestamp) .freshTimestampSource(unused -> lockAndTimestampServices.timelock().getFreshTimestamp()) .build()); } return Callback.noOp(); }
private static LockAndTimestampServices withMetrics( MetricsManager metricsManager, LockAndTimestampServices lockAndTimestampServices) { TimelockService timelockServiceWithBatching = lockAndTimestampServices.timelock(); TimelockService instrumentedTimelockService = new InstrumentedTimelockService( timelockServiceWithBatching, metricsManager.getRegistry()); return ImmutableLockAndTimestampServices.builder() .from(lockAndTimestampServices) .timestamp(new TimelockTimestampServiceAdapter(instrumentedTimelockService)) .timelock(instrumentedTimelockService) .build(); }
@Provides @Singleton public TimelockService provideTimelockService(TransactionManagers.LockAndTimestampServices lts) { return lts.timelock(); }
private static LockAndTimestampServices withCorroboratingTimestampService( LockAndTimestampServices lockAndTimestampServices) { TimelockService timelockService = TimestampCorroboratingTimelockService .create(lockAndTimestampServices.timelock()); TimestampService corroboratingTimestampService = new TimelockTimestampServiceAdapter(timelockService); return ImmutableLockAndTimestampServices.builder() .from(lockAndTimestampServices) .timelock(timelockService) .timestamp(corroboratingTimestampService) .build(); }
private static LockAndTimestampServices withRefreshingLockService( LockAndTimestampServices lockAndTimestampServices) { TimeLockClient timeLockClient = TimeLockClient.createDefault(lockAndTimestampServices.timelock()); return ImmutableLockAndTimestampServices.builder() .from(lockAndTimestampServices) .timestamp(new TimelockTimestampServiceAdapter(timeLockClient)) .timelock(timeLockClient) .lock(LockRefreshingLockService.create(lockAndTimestampServices.lock())) .close(timeLockClient::close) .build(); }
KeyValueService kvs = atlasFactory.getKeyValueService(); kvs = ProfilingKeyValueService.create(kvs); kvs = new SafeTableClearerKeyValueService(lockAndTimestampServices.timelock()::getImmutableTimestamp, kvs); new TimelockTimestampServiceAdapter(lockAndTimestampServices.timelock()), Suppliers.compose(SweepConfig::writeThreshold, sweepConfig::get), Suppliers.compose(SweepConfig::writeSizeThreshold, sweepConfig::get) new DefaultCleanerBuilder(keyValueService, lockAndTimestampServices.timelock(), ImmutableList.of(follower), transactionService) .setBackgroundScrubAggressively(config().backgroundScrubAggressively()) metricsManager, keyValueService, lockAndTimestampServices.timelock(), lockAndTimestampServices.timestampManagement(), lockAndTimestampServices.lock(),
invalidator, userAgent); TimeLockClient timeLockClient = TimeLockClient.withSynchronousUnlocker(lockAndTimestampServices.timelock()); return ImmutableLockAndTimestampServices.builder() .from(lockAndTimestampServices)
metricsManager, kvs, lts.timelock(), lts.timestampManagement(), lts.lock(),
metricsManager, kvs, lts.timelock(), lts.timestampManagement(), lts.lock(),
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))); }
private static Callback<TransactionManager> timelockConsistencyCheckCallback( AtlasDbConfig atlasDbConfig, AtlasDbRuntimeConfig initialRuntimeConfig, LockAndTimestampServices lockAndTimestampServices) { if (isUsingTimeLock(atlasDbConfig, initialRuntimeConfig)) { // Only do the consistency check if we're using TimeLock. // This avoids a bootstrapping problem with leader-block services without async initialisation, // where you need a working timestamp service to check consistency, you need to check consistency // before you can return a TM, you need to return a TM to listen on ports, and you need to listen on // ports in order to get a working timestamp service. return ConsistencyCheckRunner.create( ImmutableTimestampCorroborationConsistencyCheck.builder() .conservativeBound(TransactionManager::getUnreadableTimestamp) .freshTimestampSource(unused -> lockAndTimestampServices.timelock().getFreshTimestamp()) .build()); } return Callback.noOp(); }
@Test public void remoteCallsElidedIfTalkingToLocalServer() throws IOException, InterruptedException { setUpForLocalServices(); setUpLeaderBlockInConfig(); TransactionManagers.LockAndTimestampServices lockAndTimestamp = getLockAndTimestampServices(); availableServer.verify(getRequestedFor(urlMatching(LEADER_UUID_PATH))); lockAndTimestamp.timelock().getFreshTimestamp(); lockAndTimestamp.lock().currentTimeMillis(); availableServer.verify(0, postRequestedFor(urlMatching(TIMESTAMP_PATH)) .withHeader(USER_AGENT_HEADER, WireMock.equalTo(USER_AGENT))); availableServer.verify(0, postRequestedFor(urlMatching(LOCK_PATH)) .withHeader(USER_AGENT_HEADER, WireMock.equalTo(USER_AGENT))); }
private static LockAndTimestampServices withMetrics( MetricsManager metricsManager, LockAndTimestampServices lockAndTimestampServices) { TimelockService timelockServiceWithBatching = lockAndTimestampServices.timelock(); TimelockService instrumentedTimelockService = new InstrumentedTimelockService( timelockServiceWithBatching, metricsManager.getRegistry()); return ImmutableLockAndTimestampServices.builder() .from(lockAndTimestampServices) .timestamp(new TimelockTimestampServiceAdapter(instrumentedTimelockService)) .timelock(instrumentedTimelockService) .build(); }
@Test public void remoteCallsStillMadeIfPingableLeader404s() throws IOException, InterruptedException { setUpForRemoteServices(); setUpLeaderBlockInConfig(); TransactionManagers.LockAndTimestampServices lockAndTimestamp = getLockAndTimestampServices(); availableServer.verify(getRequestedFor(urlMatching(LEADER_UUID_PATH))); lockAndTimestamp.timelock().getFreshTimestamp(); lockAndTimestamp.lock().currentTimeMillis(); availableServer.verify(postRequestedFor(urlMatching(TIMESTAMP_PATH)) .withHeader(USER_AGENT_HEADER, WireMock.equalTo(USER_AGENT))); availableServer.verify(postRequestedFor(urlMatching(LOCK_PATH)) .withHeader(USER_AGENT_HEADER, WireMock.equalTo(USER_AGENT))); }
private static LockAndTimestampServices withRefreshingLockService( LockAndTimestampServices lockAndTimestampServices) { TimeLockClient timeLockClient = TimeLockClient.createDefault(lockAndTimestampServices.timelock()); return ImmutableLockAndTimestampServices.builder() .from(lockAndTimestampServices) .timestamp(new TimelockTimestampServiceAdapter(timeLockClient)) .timelock(timeLockClient) .lock(LockRefreshingLockService.create(lockAndTimestampServices.lock())) .close(timeLockClient::close) .build(); }
private static LockAndTimestampServices withCorroboratingTimestampService( LockAndTimestampServices lockAndTimestampServices) { TimelockService timelockService = TimestampCorroboratingTimelockService .create(lockAndTimestampServices.timelock()); TimestampService corroboratingTimestampService = new TimelockTimestampServiceAdapter(timelockService); return ImmutableLockAndTimestampServices.builder() .from(lockAndTimestampServices) .timelock(timelockService) .timestamp(corroboratingTimestampService) .build(); }