@Override public boolean awaitCompletion(String queueId, long duration, TimeUnit unit) throws InterruptedException { if (!isStarted()) { return true; } SequenceTracer.start("awaitCompletion on " + (queueId == null ? "all queues" : queueId)); long durationInMs = TimeUnit.MILLISECONDS.convert(duration, unit); long deadline = getTimestampAfter(durationInMs); int pause = (int) Math.min(durationInMs, 500L); log.debug("awaitForCompletion {} ms", durationInMs); do { if (noScheduledOrRunningWork(queueId)) { completionSynchronizer.signalCompletedWork(); SequenceTracer.stop("done"); return true; } completionSynchronizer.waitForCompletedWork(pause); } while (System.currentTimeMillis() < deadline); log.info("awaitCompletion timeout after {} ms", durationInMs); SequenceTracer.destroy("timeout after " + durationInMs + " ms"); return false; }
SequenceTracer.stop("Work done " + (completionTime - startTime) + " ms"); return; } catch (RuntimeException e) {
desc.asEventListener().handleEvent(event); long elapsed = System.currentTimeMillis() - t0; SequenceTracer.stop("done in " + elapsed + " ms"); if (stats != null) { stats.logSyncExec(desc, elapsed);