@Override public LockImmutableTimestampResponse lockImmutableTimestamp(IdentifiedTimeLockRequest request) { long timestamp = timestampService.getFreshTimestamp(); // this will always return synchronously LockToken token = lockService.lockImmutableTimestamp(request.getRequestId(), timestamp).get(); long immutableTs = lockService.getImmutableTimestamp().orElse(timestamp); return LockImmutableTimestampResponse.of(immutableTs, token); }
@Test public void registersImmutableTimestampLock() { when(delegate.lockImmutableTimestamp(any())).thenReturn(LockImmutableTimestampResponse.of(123L, TOKEN_1)); timelock.lockImmutableTimestamp(IdentifiedTimeLockRequest.create()); verify(refresher).registerLock(TOKEN_1); }
@Test public void lockImmutableTimestampLocksFreshTimestamp() throws InterruptedException { long immutableTs = 3L; LockRefreshToken expectedToken = mockImmutableTsLockResponse(); mockMinLockedInVersionIdResponse(immutableTs); LockImmutableTimestampResponse expectedResponse = LockImmutableTimestampResponse.of(immutableTs, toTokenV2(expectedToken)); assertEquals(expectedResponse, timelock.lockImmutableTimestamp(IdentifiedTimeLockRequest.create())); }
@Override public LockImmutableTimestampResponse lockImmutableTimestamp(IdentifiedTimeLockRequest request) { long immutableLockTs = timestampService.getFreshTimestamp(); LockDescriptor lockDesc = AtlasTimestampLockDescriptor.of(immutableLockTs); com.palantir.lock.LockRequest lockRequest = com.palantir.lock.LockRequest.builder( ImmutableSortedMap.of(lockDesc, LockMode.READ)) .withLockedInVersionId(immutableLockTs).build(); LockRefreshToken lock; try { lock = lockService.lock(immutableTsLockClient.getClientId(), lockRequest); } catch (InterruptedException e) { throw Throwables.throwUncheckedException(e); } try { return LockImmutableTimestampResponse.of( getImmutableTimestampInternal(immutableLockTs), LockTokenConverter.toTokenV2(lock)); } catch (Throwable e) { if (lock != null) { lockService.unlock(lock); } throw Throwables.rewrapAndThrowUncheckedException(e); } }
@Override public LockImmutableTimestampResponse lockImmutableTimestamp(IdentifiedTimeLockRequest request) { long timestamp = timestampService.getFreshTimestamp(); // this will always return synchronously LockToken token = lockService.lockImmutableTimestamp(request.getRequestId(), timestamp).get(); long immutableTs = lockService.getImmutableTimestamp().orElse(timestamp); return LockImmutableTimestampResponse.of(immutableTs, token); }