private AsyncResult<LockToken> lock(UUID requestId, String... locks) { return service.lock(requestId, descriptors(locks), TIMEOUT); }
@Test public void doesNotAcquireDuplicateRequests() { Set<LockDescriptor> descriptors = descriptors(LOCK_A); lockService.lock(REQUEST_ID, descriptors, DEADLINE); lockService.lock(REQUEST_ID, descriptors, DEADLINE); verify(acquirer, times(1)).acquireLocks(any(), any(), any()); verifyNoMoreInteractions(acquirer); }
@Override public AsyncResult<LockToken> lock(LockRequest request) { return lockService.lock( request.getRequestId(), request.getLockDescriptors(), TimeLimit.of(request.getAcquireTimeoutMs())); }
@Test public void propagatesTimeoutExceptionIfRequestTimesOut() { AsyncResult<HeldLocks> timedOutResult = new AsyncResult<>(); timedOutResult.timeout(); when(acquirer.acquireLocks(any(), any(), any())).thenReturn(timedOutResult); AsyncResult<?> result = lockService.lock(REQUEST_ID, descriptors(LOCK_A), DEADLINE); assertThat(result.isTimedOut()).isTrue(); }
@Test @ShouldRetry public void requestsAreIdempotentWithRespectToTimeout() { lockSynchronously(REQUEST_1, LOCK_A); service.lock(REQUEST_2, descriptors(LOCK_A), SHORT_TIMEOUT); AsyncResult<LockToken> duplicate = service.lock(REQUEST_2, descriptors(LOCK_A), LONG_TIMEOUT); waitForTimeout(SHORT_TIMEOUT); assertThat(duplicate.isTimedOut()).isTrue(); }
@Test @ShouldRetry public void lockRequestTimesOutWhenTimeoutPasses() { lockSynchronously(REQUEST_1, LOCK_A); AsyncResult<LockToken> result = service.lock(REQUEST_2, descriptors(LOCK_A), SHORT_TIMEOUT); assertThat(result.isTimedOut()).isFalse(); waitForTimeout(SHORT_TIMEOUT); assertThat(result.isTimedOut()).isTrue(); }
@Test public void passesOrderedLocksToAcquirer() { OrderedLocks expected = orderedLocks(newLock(), newLock()); Set<LockDescriptor> descriptors = descriptors(LOCK_A, LOCK_B); when(locks.getAll(descriptors)).thenReturn(expected); lockService.lock(REQUEST_ID, descriptors, DEADLINE); verify(acquirer).acquireLocks(REQUEST_ID, expected, DEADLINE); }
@Test @ShouldRetry public void timedOutRequestDoesNotHoldLocks() { LockToken lockBToken = lockSynchronously(REQUEST_1, LOCK_B); service.lock(REQUEST_2, descriptors(LOCK_A, LOCK_B), SHORT_TIMEOUT); waitForTimeout(SHORT_TIMEOUT); assertNotLocked(LOCK_A); service.unlock(lockBToken); assertNotLocked(LOCK_B); }
@Override public AsyncResult<LockToken> lock(LockRequest request) { return lockService.lock( request.getRequestId(), request.getLockDescriptors(), TimeLimit.of(request.getAcquireTimeoutMs())); }