private AsyncResult<HeldLocks> acquireImmutableTimestampLock(UUID requestId, long timestamp) { AsyncLock immutableTsLock = immutableTsTracker.getLockFor(timestamp); return lockAcquirer.acquireLocks(requestId, OrderedLocks.fromSingleLock(immutableTsLock), TimeLimit.zero()); }
private AsyncResult<Void> lock(long timestamp, UUID requestId) { return tracker.getLockFor(timestamp).lock(requestId); }
private void unlock(long timestamp, UUID requestId) { tracker.getLockFor(timestamp).unlock(requestId); }
@Test public void tracksTimestampsInOrder() { AsyncLock lock2 = tracker.getLockFor(TIMESTAMP_2); lock2.lock(REQUEST_1); AsyncLock lock1 = tracker.getLockFor(TIMESTAMP_1); lock1.lock(REQUEST_2); assertThat(tracker.getImmutableTimestamp().get()).isEqualTo(TIMESTAMP_1); lock1.unlock(REQUEST_2); assertThat(tracker.getImmutableTimestamp().get()).isEqualTo(TIMESTAMP_2); }
@Before public void before() { when(acquirer.acquireLocks(any(), any(), any())).thenReturn(new AsyncResult<>()); when(acquirer.waitForLocks(any(), any(), any())).thenReturn(new AsyncResult<>()); when(locks.getAll(any())).thenReturn(OrderedLocks.fromSingleLock(newLock())); when(immutableTimestampTracker.getImmutableTimestamp()).thenReturn(Optional.empty()); when(immutableTimestampTracker.getLockFor(anyLong())).thenReturn(newLock()); }
@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 unRegistersTimestampWhenUnlocked() { AsyncLock lock1 = tracker.getLockFor(TIMESTAMP_1); lock1.lock(REQUEST_1); lock1.unlock(REQUEST_1); assertThat(tracker.getImmutableTimestamp()).isEqualTo(Optional.empty()); }
private AsyncResult<HeldLocks> acquireImmutableTimestampLock(UUID requestId, long timestamp) { AsyncLock immutableTsLock = immutableTsTracker.getLockFor(timestamp); return lockAcquirer.acquireLocks(requestId, OrderedLocks.fromSingleLock(immutableTsLock), TimeLimit.zero()); }