@POST @Path("await-locks") public void waitForLocks(@Suspended final AsyncResponse response, WaitForLocksRequest request) { AsyncResult<Void> result = timelock.waitForLocks(request); lockLog.registerRequest(request, result); result.onComplete(() -> { if (result.isFailed()) { response.resume(result.getError()); } else if (result.isTimedOut()) { response.resume(WaitForLocksResponse.timedOut()); } else { response.resume(WaitForLocksResponse.successful()); } }); }
private void waitFor(Set<LockDescriptor> lockDescriptors) { WaitForLocksRequest request = WaitForLocksRequest.of(lockDescriptors, transactionConfig.get().getLockAcquireTimeoutMillis()); WaitForLocksResponse response = timelockService.waitForLocks(request); if (!response.wasSuccessful()) { log.error("Timed out waiting for commits to complete. Timeout was {} ms. First ten locks were {}.", SafeArg.of("requestId", request.getRequestId()), SafeArg.of("acquireTimeoutMs", transactionConfig.get().getLockAcquireTimeoutMillis()), UnsafeArg.of("firstTenLockDescriptors", Iterables.limit(lockDescriptors, 10))); throw new TransactionLockAcquisitionTimeoutException("Timed out waiting for commits to complete."); } }
@Override public WaitForLocksResponse waitForLocks(WaitForLocksRequest request) { com.palantir.lock.LockRequest legacyRequest = toLegacyWaitForLocksRequest(request.getLockDescriptors()); // this blocks indefinitely, and can only fail if the connection fails (and throws an exception) lockAnonymous(legacyRequest); return WaitForLocksResponse.successful(); }
@POST @Path("await-locks") public void waitForLocks(@Suspended final AsyncResponse response, WaitForLocksRequest request) { AsyncResult<Void> result = timelock.waitForLocks(request); lockLog.registerRequest(request, result); result.onComplete(() -> { if (result.isFailed()) { response.resume(result.getError()); } else if (result.isTimedOut()) { response.resume(WaitForLocksResponse.timedOut()); } else { response.resume(WaitForLocksResponse.successful()); } }); }
private void waitFor(Set<LockDescriptor> lockDescriptors) { WaitForLocksRequest request = WaitForLocksRequest.of(lockDescriptors, transactionConfig.get().getLockAcquireTimeoutMillis()); WaitForLocksResponse response = timelockService.waitForLocks(request); if (!response.wasSuccessful()) { log.error("Timed out waiting for commits to complete. Timeout was {} ms. First ten locks were {}.", SafeArg.of("requestId", request.getRequestId()), SafeArg.of("acquireTimeoutMs", transactionConfig.get().getLockAcquireTimeoutMillis()), UnsafeArg.of("firstTenLockDescriptors", Iterables.limit(lockDescriptors, 10))); throw new TransactionLockAcquisitionTimeoutException("Timed out waiting for commits to complete."); } }