private void scheduleTimeout() { if (result.isComplete()) { return; } timeoutExecutor.schedule(() -> timeoutAll(), timeout.getTimeMillis(), TimeUnit.MILLISECONDS); }
private AsyncResult<HeldLocks> acquireImmutableTimestampLock(UUID requestId, long timestamp) { AsyncLock immutableTsLock = immutableTsTracker.getLockFor(timestamp); return lockAcquirer.acquireLocks(requestId, OrderedLocks.fromSingleLock(immutableTsLock), TimeLimit.zero()); }
static TimeLimit zero() { return of(0L); }
private void waitForTimeout(TimeLimit timeout) { Stopwatch timer = Stopwatch.createStarted(); long buffer = 250L; while (timer.elapsed(TimeUnit.MILLISECONDS) < timeout.getTimeMillis() + buffer) { Uninterruptibles.sleepUninterruptibly(buffer, TimeUnit.MILLISECONDS); } }
@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()); }
@Override public AsyncResult<LockToken> lock(LockRequest request) { return lockService.lock( request.getRequestId(), request.getLockDescriptors(), TimeLimit.of(request.getAcquireTimeoutMs())); }
@Test public void doesNotTimeOutBeforeSpecifiedTime() { acquire(lockB); AsyncResult<?> result = acquire(lockA, lockB, lockC); executor.tick(TIMEOUT.getTimeMillis() - 1L, TimeUnit.MILLISECONDS); verify(lockB, never()).timeout(REQUEST_ID); assertThat(result.isTimedOut()).isFalse(); }
private AsyncResult<HeldLocks> acquireImmutableTimestampLock(UUID requestId, long timestamp) { AsyncLock immutableTsLock = immutableTsTracker.getLockFor(timestamp); return lockAcquirer.acquireLocks(requestId, OrderedLocks.fromSingleLock(immutableTsLock), TimeLimit.zero()); }
@Override public AsyncResult<Void> waitForLocks(WaitForLocksRequest request) { return lockService.waitForLocks( request.getRequestId(), request.getLockDescriptors(), TimeLimit.of(request.getAcquireTimeoutMs())); }
@Test public void timesOutRequestAfterSpecifiedTime() { acquire(lockB); AsyncResult<?> result = acquire(lockA, lockB, lockC); executor.tick(TIMEOUT.getTimeMillis() + 1L, TimeUnit.MILLISECONDS); verify(lockB).timeout(REQUEST_ID); assertThat(result.isTimedOut()).isTrue(); }
static TimeLimit zero() { return of(0L); }
@Test public void stopsAcquiringAndUnlocksAfterTimeout() { acquire(lockB); AsyncResult<?> result = acquire(lockA, lockB, lockC); executor.tick(TIMEOUT.getTimeMillis() + 1L, TimeUnit.MILLISECONDS); verify(lockC, never()).lock(any()); assertNotLocked(lockA); assertNotLocked(lockB); assertNotLocked(lockC); }
@Override public AsyncResult<Void> waitForLocks(WaitForLocksRequest request) { return lockService.waitForLocks( request.getRequestId(), request.getLockDescriptors(), TimeLimit.of(request.getAcquireTimeoutMs())); }
private void scheduleTimeout() { if (result.isComplete()) { return; } timeoutExecutor.schedule(() -> timeoutAll(), timeout.getTimeMillis(), TimeUnit.MILLISECONDS); }
@Override public AsyncResult<LockToken> lock(LockRequest request) { return lockService.lock( request.getRequestId(), request.getLockDescriptors(), TimeLimit.of(request.getAcquireTimeoutMs())); }