private void scheduleTimeout() { if (result.isComplete()) { return; } timeoutExecutor.schedule(() -> timeoutAll(), timeout.getTimeMillis(), TimeUnit.MILLISECONDS); }
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 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(); }
@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(); }
@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); }
private void scheduleTimeout() { if (result.isComplete()) { return; } timeoutExecutor.schedule(() -> timeoutAll(), timeout.getTimeMillis(), TimeUnit.MILLISECONDS); }