DelayingRunner runner = actions.get(backoff); if (runner == null) { actions.put(backoff, new DelayingRunner(backoff, e)); } else { runner.add(e); asyncProcess.incTaskCounters(runner.getActions().getRegions(), server); String traceText = "AsyncProcess.sendMultiAction"; Runnable runnable = createSingleServerRequest(runner.getActions(), numAttempt, server, callsInProgress); if (runner.getSleepTime() > 0) { runner.setRunner(runnable); traceText = "AsyncProcess.clientBackoff.sendMultiAction"; runnable = runner; if (asyncProcess.connection.getConnectionMetrics() != null) { asyncProcess.connection.getConnectionMetrics().incrDelayRunners(); asyncProcess.connection.getConnectionMetrics().updateDelayInterval(runner.getSleepTime());
@Override public void run() { if (!sleep()) { LOG.warn( "Interrupted while sleeping for expected sleep time " + sleepTime + " ms"); } //TODO maybe we should consider switching to a listenableFuture for the actual callable and // then handling the results/errors as callbacks. That way we can decrement outstanding tasks // even if we get interrupted here, but for now, we still need to run so we decrement the // outstanding tasks this.runnable.run(); }
@SuppressWarnings({ "rawtypes", "unchecked" }) @Test public void testDelayingRunner() throws Exception{ MultiAction ma = new MultiAction(); ma.add(hri1.getRegionName(), new Action(new Put(DUMMY_BYTES_1), 0)); final AtomicLong endTime = new AtomicLong(); final long sleepTime = 1000; DelayingRunner runner = new DelayingRunner(sleepTime, ma.actions.entrySet().iterator().next()); runner.setRunner(new Runnable() { @Override public void run() { endTime.set(EnvironmentEdgeManager.currentTime()); } }); long startTime = EnvironmentEdgeManager.currentTime(); runner.run(); long delay = endTime.get() - startTime; assertTrue("DelayingRunner did not delay long enough", delay >= sleepTime); assertFalse("DelayingRunner delayed too long", delay > sleepTime + sleepTime*0.2); }
public DelayingRunner(long sleepTime, Map.Entry<byte[], List<Action>> e) { this.sleepTime = sleepTime; add(e); }
@SuppressWarnings({ "rawtypes", "unchecked" }) @Test public void testDelayingRunner() throws Exception{ MultiAction ma = new MultiAction(); ma.add(hri1.getRegionName(), new Action(new Put(DUMMY_BYTES_1), 0)); final AtomicLong endTime = new AtomicLong(); final long sleepTime = 1000; DelayingRunner runner = new DelayingRunner(sleepTime, ma.actions.entrySet().iterator().next()); runner.setRunner(new Runnable() { @Override public void run() { endTime.set(EnvironmentEdgeManager.currentTime()); } }); long startTime = EnvironmentEdgeManager.currentTime(); runner.run(); long delay = endTime.get() - startTime; assertTrue("DelayingRunner did not delay long enough", delay >= sleepTime); assertFalse("DelayingRunner delayed too long", delay > sleepTime + sleepTime*0.2); }
public DelayingRunner(long sleepTime, Map.Entry<byte[], List<Action>> e) { this.sleepTime = sleepTime; add(e); }
DelayingRunner runner = actions.get(backoff); if (runner == null) { actions.put(backoff, new DelayingRunner(backoff, e)); } else { runner.add(e); asyncProcess.incTaskCounters(runner.getActions().getRegions(), server); String traceText = "AsyncProcess.sendMultiAction"; Runnable runnable = createSingleServerRequest(runner.getActions(), numAttempt, server, callsInProgress); if (runner.getSleepTime() > 0) { runner.setRunner(runnable); traceText = "AsyncProcess.clientBackoff.sendMultiAction"; runnable = runner; if (asyncProcess.connection.getConnectionMetrics() != null) { asyncProcess.connection.getConnectionMetrics().incrDelayRunners(); asyncProcess.connection.getConnectionMetrics().updateDelayInterval(runner.getSleepTime());
@Override public void run() { if (!sleep()) { LOG.warn( "Interrupted while sleeping for expected sleep time " + sleepTime + " ms"); } //TODO maybe we should consider switching to a listenableFuture for the actual callable and // then handling the results/errors as callbacks. That way we can decrement outstanding tasks // even if we get interrupted here, but for now, we still need to run so we decrement the // outstanding tasks this.runnable.run(); }
public DelayingRunner(long sleepTime, Map.Entry<byte[], List<Action>> e) { this.sleepTime = sleepTime; add(e); }
DelayingRunner runner = actions.get(backoff); if (runner == null) { actions.put(backoff, new DelayingRunner(backoff, e)); } else { runner.add(e); String traceText = "AsyncProcess.sendMultiAction"; Runnable runnable = new SingleServerRequestRunnable(runner.getActions(), numAttempt, server, callsInProgress); if (runner.getSleepTime() > 0) { runner.setRunner(runnable); traceText = "AsyncProcess.clientBackoff.sendMultiAction"; runnable = runner; if (connection.getConnectionMetrics() != null) { connection.getConnectionMetrics().incrDelayRunners(); connection.getConnectionMetrics().updateDelayInterval(runner.getSleepTime());
@Override public void run() { if (!sleep()) { LOG.warn( "Interrupted while sleeping for expected sleep time " + sleepTime + " ms"); } //TODO maybe we should consider switching to a listenableFuture for the actual callable and // then handling the results/errors as callbacks. That way we can decrement outstanding tasks // even if we get interrupted here, but for now, we still need to run so we decrement the // outstanding tasks this.runnable.run(); }
public DelayingRunner(long sleepTime, Map.Entry<byte[], List<Action<T>>> e) { this.sleepTime = sleepTime; add(e); }
DelayingRunner runner = actions.get(backoff); if (runner == null) { actions.put(backoff, new DelayingRunner(backoff, e)); } else { runner.add(e); asyncProcess.incTaskCounters(runner.getActions().getRegions(), server); String traceText = "AsyncProcess.sendMultiAction"; Runnable runnable = createSingleServerRequest(runner.getActions(), numAttempt, server, callsInProgress); if (runner.getSleepTime() > 0) { runner.setRunner(runnable); traceText = "AsyncProcess.clientBackoff.sendMultiAction"; runnable = runner; if (asyncProcess.connection.getConnectionMetrics() != null) { asyncProcess.connection.getConnectionMetrics().incrDelayRunners(); asyncProcess.connection.getConnectionMetrics().updateDelayInterval(runner.getSleepTime());
@Override public void run() { if (!sleep()) { LOG.warn( "Interrupted while sleeping for expected sleep time " + sleepTime + " ms"); } //TODO maybe we should consider switching to a listenableFuture for the actual callable and // then handling the results/errors as callbacks. That way we can decrement outstanding tasks // even if we get interrupted here, but for now, we still need to run so we decrement the // outstanding tasks this.runnable.run(); }