protected boolean awaitCompletionOnQueue(String queueId, long duration, TimeUnit unit) throws InterruptedException {
if (!isStarted()) {
return true;
}
log.debug("awaitCompletion " + queueId + " starting");
long durationMs = min(unit.toMillis(duration), TimeUnit.DAYS.toMillis(1));
long deadline = System.currentTimeMillis() + durationMs;
while (System.currentTimeMillis() < deadline) {
Thread.sleep(100);
int lag = getMetrics(queueId).getScheduled().intValue();
if (lag == 0) {
if (log.isDebugEnabled()) {
log.debug("awaitCompletion for " + queueId + " completed " + getMetrics(queueId));
}
return true;
}
if (!log.isDebugEnabled()) {
log.debug("awaitCompletion for " + queueId + " not completed " + getMetrics(queueId));
}
}
log.warn(String.format("%s timeout after: %.2fs, %s", queueId, durationMs / 1000.0, getMetrics(queueId)));
return false;
}