@Override protected void performOneCall() { LockToken token = timelock.lock(nextRequest()).getToken(); boolean wasUnlocked = timelock.unlock(ImmutableSet.of(token)).contains(token); Preconditions.checkState(wasUnlocked, "unlock returned false"); }
@Override public LockToken lock(String client, String lockName) throws InterruptedException { LockRequest lockRequest = LockRequest.of( ImmutableSet.of(StringLockDescriptor.of(lockName)), Long.MAX_VALUE, client); LockResponse lockResponse = timelockService.lock(lockRequest); Preconditions.checkState(lockResponse.wasSuccessful(), "Jepsen failed to lock a lock, but it would wait for Long.MAX_VALUE, so this is unexpected."); return lockResponse.getToken(); }
@Override public LockResponse lock(LockRequest request) { LockResponse response = executeOnTimeLock(() -> delegate.lock(request)); if (response.wasSuccessful()) { lockRefresher.registerLock(response.getToken()); } return response; }
/** * This method should acquire any locks needed to do proper concurrency control at commit time. */ protected LockToken acquireLocksForCommit() { Set<LockDescriptor> lockDescriptors = getLocksForWrites(); LockRequest request = LockRequest.of(lockDescriptors, transactionConfig.get().getLockAcquireTimeoutMillis()); LockResponse lockResponse = timelockService.lock(request); if (!lockResponse.wasSuccessful()) { log.error("Timed out waiting while acquiring commit locks. Request id was {}. Timeout was {} ms. " + "First ten required 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 while acquiring commit locks."); } return lockResponse.getToken(); }
@Override public LockResponse lock(LockRequest request) { LockResponse response = executeOnTimeLock(() -> delegate.lock(request)); if (response.wasSuccessful()) { lockRefresher.registerLock(response.getToken()); } return response; }
/** * This method should acquire any locks needed to do proper concurrency control at commit time. */ protected LockToken acquireLocksForCommit() { Set<LockDescriptor> lockDescriptors = getLocksForWrites(); LockRequest request = LockRequest.of(lockDescriptors, transactionConfig.get().getLockAcquireTimeoutMillis()); LockResponse lockResponse = timelockService.lock(request); if (!lockResponse.wasSuccessful()) { log.error("Timed out waiting while acquiring commit locks. Request id was {}. Timeout was {} ms. " + "First ten required 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 while acquiring commit locks."); } return lockResponse.getToken(); }