private void scheduleExpiredLockReaper() { reaperExecutor.scheduleAtFixedRate(() -> { try { heldLocks.removeExpired(); } catch (Throwable t) { log.warn("Error while removing expired lock requests. Trying again on next iteration.", t); } }, 0, LeaseExpirationTimer.LEASE_TIMEOUT_MILLIS / 2, TimeUnit.MILLISECONDS); }
@Test public void removesTimedOutRequests() { mockTimedOutRequest(); assertThat(heldLocksCollection.heldLocksById.size()).isEqualTo(1); heldLocksCollection.removeExpired(); assertThat(heldLocksCollection.heldLocksById.size()).isEqualTo(0); }
@Test public void reaperDoesNotDieIfItEncountersAnException() { doThrow(new RuntimeException("test")).when(heldLocks).removeExpired(); triggerNextReaperIteration(); triggerNextReaperIteration(); verify(heldLocks, times(2)).removeExpired(); }
@Test public void removesExpiredAndFailedRequests() { UUID nonExpiredRequest = mockNonExpiredRequest().getRequestId(); mockExpiredRequest(); mockFailedRequest(); assertThat(heldLocksCollection.heldLocksById.size()).isEqualTo(3); heldLocksCollection.removeExpired(); assertThat(heldLocksCollection.heldLocksById.size()).isEqualTo(1); assertThat(heldLocksCollection.heldLocksById.keySet().iterator().next()).isEqualTo(nonExpiredRequest); }
@Test public void schedulesReaperAtAppropriateInterval() { triggerNextReaperIteration(); triggerNextReaperIteration(); triggerNextReaperIteration(); verify(heldLocks, times(3)).removeExpired(); }
private void scheduleExpiredLockReaper() { reaperExecutor.scheduleAtFixedRate(() -> { try { heldLocks.removeExpired(); } catch (Throwable t) { log.warn("Error while removing expired lock requests. Trying again on next iteration.", t); } }, 0, LeaseExpirationTimer.LEASE_TIMEOUT_MILLIS / 2, TimeUnit.MILLISECONDS); }