@Override protected SenderThreadLocalBackOffData initialValue() { int addSeconds = threadsSecondsDifference.incrementAndGet(); senderThreadLocalData = new SenderThreadLocalBackOffData(backOffTimeoutsInMilliseconds, addSeconds * 1000); registerSenderData(senderThreadLocalData); return senderThreadLocalData; }
public boolean backOffCurrentSenderThread() { SenderThreadLocalBackOffData currentThreadData = this.get(); return currentThreadData.backOff(); }
public void onDoneSending() { SenderThreadLocalBackOffData currentThreadData = this.get(); currentThreadData.onDoneSending(); }
private static void verifyOnDoneSending(SenderThreadLocalBackOffData sender) { sender.onDoneSending(); assertFalse(sender.isTryingToSend()); } }
private static void verifyBackOff(SenderThreadLocalBackOffData sender, int backOffTimes, int expectedSeconds) { long started = System.nanoTime(); for (int i = 0; i < backOffTimes; ++i) { sender.backOff(); } int elapsed = (int)((double)(System.nanoTime() - started) / 1000000000.0); assertTrue(String.format("BackOff lasted %d which is less than expected %d", elapsed, expectedSeconds), elapsed >= expectedSeconds); assertTrue(String.format("BackOff lasted %d which is more than expected %d", elapsed, expectedSeconds), elapsed <= expectedSeconds + 2); assertTrue(sender.isTryingToSend()); }
public synchronized void stopAllSendersBackOffActivities() { for (SenderThreadLocalBackOffData sender : allSendersData) { sender.stop(); } stopped = true; }
public long backOffCurrentSenderThreadValue() { SenderThreadLocalBackOffData currentThreadData = this.get(); return currentThreadData.backOffTimerValue(); }
@Test public void testStateAfterCtor() { final SenderThreadLocalBackOffData sender = createSenderThreadLocalData(new long[] {1000}); assertFalse(sender.isTryingToSend()); }
private synchronized void registerSenderData(SenderThreadLocalBackOffData senderData) { if (stopped) { senderData.stop(); } allSendersData.add(senderData); }
private SenderThreadLocalBackOffData createSenderThreadLocalData(long[] backOffs) { SenderThreadLocalBackOffData sender = new SenderThreadLocalBackOffData(backOffs, 0); return sender; }
@Override public void run() { sender.stop(); } });
@Test public void testStopWhileWaiting() throws InterruptedException { final SenderThreadLocalBackOffData sender = createSenderThreadLocalData(new long[]{10000}); Thread thread = new Thread(new Runnable() { @Override public void run() { sender.stop(); } }); thread.setDaemon(true); thread.start(); sender.backOff(); verifyOnDoneSending(sender); thread.join(); }
@Test(expected = NullPointerException.class) public void testNotSupplyingBackOffTimesContainer() { new SenderThreadLocalBackOffData(null, 0); }
@Test(expected = IllegalArgumentException.class) public void testWithEmptyBackOffTimesContainer() { new SenderThreadLocalBackOffData(new long[]{}, 0); }
@Test(expected = IllegalArgumentException.class) public void testWithEmptyNegativeAddSeconds() { new SenderThreadLocalBackOffData(new long[]{1000}, -1); }