public void close() { if (!isClosed) { isClosed = true; if (null != countersManager) { countersManager.free(counterId); } } } }
/** * Free the counter slot for reuse. */ public void close() { if (!isClosed) { isClosed = true; if (null != countersManager) { countersManager.free(id); } } } }
public void free(final int counterId) { lock.lock(); try { super.free(counterId); } finally { lock.unlock(); } } }
@Test public void shouldRemoveCounterOnClientTimeout() { final long registrationId = driverProxy.addCounter( COUNTER_TYPE_ID, counterKeyAndLabel, COUNTER_KEY_OFFSET, COUNTER_KEY_LENGTH, counterKeyAndLabel, COUNTER_LABEL_OFFSET, COUNTER_LABEL_LENGTH); driverConductor.doWork(); final ArgumentCaptor<Integer> captor = ArgumentCaptor.forClass(Integer.class); verify(mockClientProxy).onCounterReady(eq(registrationId), captor.capture()); doWorkUntil(() -> (CLIENT_LIVENESS_TIMEOUT_NS * 2) - nanoClock.nanoTime() <= 0); verify(spyCountersManager).free(captor.getValue()); }
@Test public void shouldInformClientsOfRemovedCounter() { final long registrationId = driverProxy.addCounter( COUNTER_TYPE_ID, counterKeyAndLabel, COUNTER_KEY_OFFSET, COUNTER_KEY_LENGTH, counterKeyAndLabel, COUNTER_LABEL_OFFSET, COUNTER_LABEL_LENGTH); driverConductor.doWork(); final long removeCorrelationId = driverProxy.removeCounter(registrationId); driverConductor.doWork(); final ArgumentCaptor<Integer> captor = ArgumentCaptor.forClass(Integer.class); final InOrder inOrder = inOrder(mockClientProxy); inOrder.verify(mockClientProxy).onCounterReady(eq(registrationId), captor.capture()); inOrder.verify(mockClientProxy).operationSucceeded(removeCorrelationId); inOrder.verify(mockClientProxy).onUnavailableCounter(eq(registrationId), captor.capture()); verify(spyCountersManager).free(captor.getValue()); }
@Test public void shouldRemoveSingleCounter() { final long registrationId = driverProxy.addCounter( COUNTER_TYPE_ID, counterKeyAndLabel, COUNTER_KEY_OFFSET, COUNTER_KEY_LENGTH, counterKeyAndLabel, COUNTER_LABEL_OFFSET, COUNTER_LABEL_LENGTH); driverConductor.doWork(); final long removeCorrelationId = driverProxy.removeCounter(registrationId); driverConductor.doWork(); final ArgumentCaptor<Integer> captor = ArgumentCaptor.forClass(Integer.class); final InOrder inOrder = inOrder(mockClientProxy); inOrder.verify(mockClientProxy).onCounterReady(eq(registrationId), captor.capture()); inOrder.verify(mockClientProxy).operationSucceeded(removeCorrelationId); verify(spyCountersManager).free(captor.getValue()); }
@Test public void shouldNotRemoveCounterOnClientKeepalive() { final long registrationId = driverProxy.addCounter( COUNTER_TYPE_ID, counterKeyAndLabel, COUNTER_KEY_OFFSET, COUNTER_KEY_LENGTH, counterKeyAndLabel, COUNTER_LABEL_OFFSET, COUNTER_LABEL_LENGTH); driverConductor.doWork(); final ArgumentCaptor<Integer> captor = ArgumentCaptor.forClass(Integer.class); verify(mockClientProxy).onCounterReady(eq(registrationId), captor.capture()); doWorkUntil(() -> { driverProxy.sendClientKeepalive(); return (CLIENT_LIVENESS_TIMEOUT_NS * 2) - nanoClock.nanoTime() <= 0; }); verify(spyCountersManager, never()).free(captor.getValue()); }
@Test public void shouldFreeAndNotReuseCountersThatHaveCooldown() { final int abc = managerWithCooldown.allocate("abc"); final int def = managerWithCooldown.allocate("def"); final int ghi = managerWithCooldown.allocate("ghi"); managerWithCooldown.free(def); currentTimestamp += FREE_TO_REUSE_TIMEOUT - 1; assertThat(managerWithCooldown.allocate("the next label"), is(greaterThan(ghi))); }
@Test public void shouldFreeAndReuseCountersAfterCooldown() { final int abc = managerWithCooldown.allocate("abc"); final int def = managerWithCooldown.allocate("def"); final int ghi = managerWithCooldown.allocate("ghi"); managerWithCooldown.free(def); currentTimestamp += FREE_TO_REUSE_TIMEOUT; assertThat(managerWithCooldown.allocate("the next label"), is(def)); }
@Test public void shouldFreeAndReuseCounters() { final int abc = manager.allocate("abc"); final int def = manager.allocate("def"); final int ghi = manager.allocate("ghi"); manager.free(def); reader.forEach(consumer); final InOrder inOrder = Mockito.inOrder(consumer); inOrder.verify(consumer).accept(abc, "abc"); inOrder.verify(consumer).accept(ghi, "ghi"); inOrder.verifyNoMoreInteractions(); assertThat(manager.allocate("the next label"), is(def)); }
public void close() { if (!isClosed) { isClosed = true; if (null != countersManager) { countersManager.free(counterId); } } } }
/** * Free the counter slot for reuse. */ public void close() { if (!isClosed) { isClosed = true; countersManager.free(counterId); } } }
public void close() { if (null != countersManager) { if (!isClosed) { isClosed = true; countersManager.free(counterId); } } } }
/** * Free the counter slot for reuse. */ public void close() { if (!isClosed) { isClosed = true; if (null != countersManager) { countersManager.free(id); } } } }
public void free(final int counterId) { lock.lock(); try { super.free(counterId); } finally { lock.unlock(); } } }