@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 delegatesImmutableTimestampRequestsToTracker() { UUID requestId = UUID.randomUUID(); long timestamp = 123L; AsyncLock immutableTsLock = spy(newLock()); when(immutableTimestampTracker.getLockFor(timestamp)).thenReturn(immutableTsLock); lockService.lockImmutableTimestamp(requestId, timestamp); verify(acquirer).acquireLocks(requestId, orderedLocks(immutableTsLock), TimeLimit.zero()); }
@Test public void canLockAndUnlockImmutableTimestamp() { long timestamp = 123L; LockToken token = service.lockImmutableTimestamp(REQUEST_1, timestamp).get(); assertThat(service.getImmutableTimestamp().get()).isEqualTo(123L); service.unlock(token); assertThat(service.getImmutableTimestamp()).isEqualTo(Optional.empty()); }
@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); }