void removeCounterListener(String counterName) { if (trace) { log.tracef("Remove listener for counter '%s'", counterName); } counterListener.computeIfPresent(counterName, (name, handle) -> { handle.remove(); return null; }); }
public static void assertNoEvents(Handle<EventLogger> eventLogger) { assertTrue(eventLogger.getCounterListener().eventLog.isEmpty()); }
l.getCounterListener().assertEvent(0, CounterState.VALID, 1, CounterState.VALID); l.getCounterListener().assertEvent(1, CounterState.VALID, 2, CounterState.VALID); l.getCounterListener().assertEvent(2, CounterState.VALID, 2, CounterState.UPPER_BOUND_REACHED); assertTrue(l.getCounterListener().queue.isEmpty()); l.getCounterListener().assertEvent(2, CounterState.UPPER_BOUND_REACHED, 1, CounterState.VALID); l.getCounterListener().assertEvent(1, CounterState.VALID, 0, CounterState.VALID); l.getCounterListener().assertEvent(0, CounterState.VALID, -1, CounterState.VALID); l.getCounterListener().assertEvent(-1, CounterState.VALID, -2, CounterState.VALID); eventuallyEquals(-2L, () -> counters[0].sync().getValue()); counters[0].decrementAndGet(); l.getCounterListener().assertEvent(-2, CounterState.VALID, -2, CounterState.LOWER_BOUND_REACHED); assertTrue(l.getCounterListener().queue.isEmpty()); eventuallyEquals(-2L, () -> counters[0].sync().getValue()); l.remove(); assertTrue(l.getCounterListener().queue.isEmpty());
public void testSimpleListener(Method method) throws Exception { final String counterName = method.getName(); final TestCounter[] counters = new TestCounter[clusterSize()]; for (int i = 0; i < clusterSize(); ++i) { counters[i] = createCounter(counterManager(i), counterName); } Handle<ListenerQueue> l = counters[0].addListener(new ListenerQueue(counterName)); incrementInEachCounter(counters); ListenerQueue lq = l.getCounterListener(); printQueue(lq); lq.assertEvent(0, CounterState.VALID, 1, CounterState.VALID); lq.assertEvent(1, CounterState.VALID, 2, CounterState.VALID); lq.assertEvent(2, CounterState.VALID, 3, CounterState.VALID); lq.assertEvent(3, CounterState.VALID, 4, CounterState.VALID); assertEquals(4L, counters[0].getValue()); l.remove(); incrementInEachCounter(counters); assertTrue(l.getCounterListener().queue.isEmpty()); }
public static void assertNextValidEvent(Handle<EventLogger> eventLogger, long oldValue, long newValue) throws InterruptedException { CounterEvent event = eventLogger.getCounterListener().waitingPoll(); assertValidEvent(event, oldValue, newValue); }
@Override public void testListenerWithBounds(Method method) throws InterruptedException { final String counterName = method.getName(); final CounterManager counterManager = counterManagerSupplier.get(); assertTrue(counterManager .defineCounter(counterName, builder(BOUNDED_STRONG).initialValue(0).lowerBound(0).upperBound(20).build())); StrongCounter counter = counterManager.getStrongCounter(counterName); Handle<EventLogger> handle = counter.addListener(new EventLogger()); add(counter, 1, 1); expectException(ExecutionException.class, CounterOutOfBoundsException.class, () -> counter.addAndGet(20).get()); assertCounterValue(counter, 20); reset(counter); expectException(CounterOutOfBoundsException.class, () -> add(counter, -1, 0)); assertCounterValue(counter, 0); assertNextValidEvent(handle, 0, 1); assertNextEvent(handle, 1, CounterState.VALID, 20, CounterState.UPPER_BOUND_REACHED); assertNextEvent(handle, 20, CounterState.UPPER_BOUND_REACHED, 0, CounterState.VALID); assertNextEvent(handle, 0, CounterState.VALID, 0, CounterState.LOWER_BOUND_REACHED); assertNoEvents(handle); handle.remove(); }
public void testMultipleListeners(Method method) throws InterruptedException { final String counterName = method.getName(); final TestCounter[] counters = new TestCounter[clusterSize()]; final List<Handle<ListenerQueue>> listeners = new ArrayList<>(clusterSize()); for (int i = 0; i < clusterSize(); ++i) { counters[i] = createCounter(counterManager(i), counterName); listeners.add(counters[i].addListener(new ListenerQueue(counterName + "-listener-" + i))); } incrementInEachCounter(counters); for (int i = 0; i < clusterSize(); ++i) { ListenerQueue lq = listeners.get(i).getCounterListener(); printQueue(lq); lq.assertEvent(0, CounterState.VALID, 1, CounterState.VALID); lq.assertEvent(1, CounterState.VALID, 2, CounterState.VALID); lq.assertEvent(2, CounterState.VALID, 3, CounterState.VALID); lq.assertEvent(3, CounterState.VALID, 4, CounterState.VALID); assertEquals(4L, counters[i].getValue()); } }
private void assertNextEvent(Handle<EventLogger> handle, long oldValue, CounterState oldState, long newValue, CounterState newState) throws InterruptedException { CounterEvent event = handle.getCounterListener().waitingPoll(); assertNotNull(event); assertEquals(oldValue, event.getOldValue()); assertEquals(oldState, event.getOldState()); assertEquals(newValue, event.getNewValue()); assertEquals(newState, event.getNewState()); } }
ListenerQueue lq = l1.getCounterListener(); printQueue(lq); lq.assertEvent(0, CounterState.VALID, 1, CounterState.VALID); lq.assertEvent(3, CounterState.VALID, 4, CounterState.VALID); lq = l2.getCounterListener(); printQueue(lq); lq.assertEvent(0, CounterState.VALID, 1, CounterState.VALID); lq = l1.getCounterListener(); printQueue(lq); lq.assertEvent(4, CounterState.VALID, 3, CounterState.VALID); lq.assertEvent(1, CounterState.VALID, 0, CounterState.VALID); lq = l2.getCounterListener(); printQueue(lq); lq.assertEvent(4, CounterState.VALID, 3, CounterState.VALID);