public AsyncResult<LockToken> lockImmutableTimestamp(UUID requestId, long timestamp) { return heldLocks.getExistingOrAcquire( requestId, () -> acquireImmutableTimestampLock(requestId, timestamp)); }
public AsyncResult<LockToken> lock(UUID requestId, Set<LockDescriptor> lockDescriptors, TimeLimit timeout) { return heldLocks.getExistingOrAcquire( requestId, () -> acquireLocks(requestId, lockDescriptors, timeout)); }
@Test public void doesNotCallSupplierForExistingRequest() { heldLocksCollection.getExistingOrAcquire(REQUEST_ID, () -> new AsyncResult<>()); Supplier<AsyncResult<HeldLocks>> supplier = mock(Supplier.class); heldLocksCollection.getExistingOrAcquire(REQUEST_ID, supplier); verifyNoMoreInteractions(supplier); }
@Test public void callsSupplierForNewRequest() { Supplier<AsyncResult<HeldLocks>> supplier = mock(Supplier.class); when(supplier.get()).thenReturn(new AsyncResult<>()); heldLocksCollection.getExistingOrAcquire(REQUEST_ID, supplier); verify(supplier).get(); }
@Test public void tracksRequests() { AsyncResult<HeldLocks> result = new AsyncResult<>(); heldLocksCollection.getExistingOrAcquire(REQUEST_ID, () -> result); assertThat(heldLocksCollection.heldLocksById.get(REQUEST_ID)).isEqualTo(result); }
private LockToken mockHeldLocksForNewRequest(Consumer<HeldLocks> mockApplier) { LockToken request = LockToken.of(UUID.randomUUID()); HeldLocks heldLocks = mock(HeldLocks.class); mockApplier.accept(heldLocks); AsyncResult<HeldLocks> completedResult = new AsyncResult<>(); completedResult.complete(heldLocks); heldLocksCollection.getExistingOrAcquire(request.getRequestId(), () -> completedResult); return request; }
private LockToken mockFailedRequest() { LockToken request = LockToken.of(UUID.randomUUID()); AsyncResult failedLocks = new AsyncResult(); failedLocks.fail(new RuntimeException()); heldLocksCollection.getExistingOrAcquire(request.getRequestId(), () -> failedLocks); return request; }
private LockToken mockTimedOutRequest() { LockToken request = LockToken.of(UUID.randomUUID()); AsyncResult timedOutResult = new AsyncResult(); timedOutResult.timeout(); heldLocksCollection.getExistingOrAcquire(request.getRequestId(), () -> timedOutResult); return request; }
public AsyncResult<LockToken> lock(UUID requestId, Set<LockDescriptor> lockDescriptors, TimeLimit timeout) { return heldLocks.getExistingOrAcquire( requestId, () -> acquireLocks(requestId, lockDescriptors, timeout)); }
public AsyncResult<LockToken> lockImmutableTimestamp(UUID requestId, long timestamp) { return heldLocks.getExistingOrAcquire( requestId, () -> acquireImmutableTimestampLock(requestId, timestamp)); }