public boolean backOffCurrentSenderThread() { SenderThreadLocalBackOffData currentThreadData = this.get(); return currentThreadData.backOff(); }
@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(); }
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()); }