@Before public void before() { when(timer.isExpired()).thenReturn(false); lockA.lock(REQUEST_ID); lockB.lock(REQUEST_ID); heldLocks = new HeldLocks(new LockLog(new MetricRegistry(), () -> 2L), ImmutableList.of(lockA, lockB), REQUEST_ID, timer); }
/** * Unlocks if expired, and returns whether the locks are now unlocked (regardless of whether or not they were * unlocked as a result of calling this method). */ public synchronized boolean unlockIfExpired() { if (expirationTimer.isExpired()) { if (unlock()) { lockLog.lockExpired(token.getRequestId(), getLockDescriptors()); } } return isUnlocked; }
public void registerRequest(LockRequest request, AsyncResult<?> result) { registerRequest(RequestInfo.of(request), result); }
private void registerRequest(RequestInfo requestInfo, AsyncResult<?> result) { if (result.isComplete()) { requestComplete(requestInfo, result, 0L); return; } long start = System.currentTimeMillis(); result.onComplete(() -> { long durationMillis = System.currentTimeMillis() - start; requestComplete(requestInfo, result, durationMillis); }); }
private void registerRequest(RequestInfo requestInfo, AsyncResult<?> result) { if (result.isComplete()) { requestComplete(requestInfo, result, 0L); return; } long start = System.currentTimeMillis(); result.onComplete(() -> { long durationMillis = System.currentTimeMillis() - start; requestComplete(requestInfo, result, durationMillis); }); }
public void registerRequest(WaitForLocksRequest request, AsyncResult<?> result) { registerRequest(RequestInfo.of(request), result); }
private TimeLockAgent(MetricsManager metricsManager, TimeLockInstallConfiguration install, Supplier<TimeLockRuntimeConfiguration> runtime, TimeLockDeprecatedConfiguration deprecated, Consumer<Object> registrar) { this.metricsManager = metricsManager; this.install = install; this.runtime = runtime; this.registrar = registrar; this.paxosResource = PaxosResource.create(metricsManager.getRegistry(), install.paxos().dataDirectory().toString()); this.leadershipCreator = new PaxosLeadershipCreator(this.metricsManager, install, runtime, registrar); this.lockCreator = new LockCreator(runtime, deprecated); this.timestampCreator = getTimestampCreator(metricsManager.getRegistry()); LockLog lockLog = new LockLog(metricsManager.getRegistry(), Suppliers.compose(TimeLockRuntimeConfiguration::slowLockLogTriggerMillis, runtime::get)); this.timelockCreator = new AsyncTimeLockServicesCreator(metricsManager, lockLog, leadershipCreator); }
/** * Unlocks if expired, and returns whether the locks are now unlocked (regardless of whether or not they were * unlocked as a result of calling this method). */ public synchronized boolean unlockIfExpired() { if (expirationTimer.isExpired()) { if (unlock()) { lockLog.lockExpired(token.getRequestId(), getLockDescriptors()); } } return isUnlocked; }
@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()); } }); }
@POST @Path("lock") public void lock(@Suspended final AsyncResponse response, LockRequest request) { AsyncResult<LockToken> result = timelock.lock(request); lockLog.registerRequest(request, result); result.onComplete(() -> { if (result.isFailed()) { response.resume(result.getError()); } else if (result.isTimedOut()) { response.resume(LockResponse.timedOut()); } else { response.resume(LockResponse.successful(result.get())); } }); }
public void registerRequest(LockRequest request, AsyncResult<?> result) { registerRequest(RequestInfo.of(request), result); }
public void registerRequest(WaitForLocksRequest request, AsyncResult<?> result) { registerRequest(RequestInfo.of(request), result); }
@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()); } }); }
@POST @Path("lock") public void lock(@Suspended final AsyncResponse response, LockRequest request) { AsyncResult<LockToken> result = timelock.lock(request); lockLog.registerRequest(request, result); result.onComplete(() -> { if (result.isFailed()) { response.resume(result.getError()); } else if (result.isTimedOut()) { response.resume(LockResponse.timedOut()); } else { response.resume(LockResponse.successful(result.get())); } }); }