in priam/src/main/java/com/netflix/priam/utils/BoundedExponentialRetryCallable.java [48:81]
public T call() throws Exception {
long delay = min; // ms
int retry = 0;
int logCounter = 0;
while (true) {
try {
return retriableCall();
} catch (CancellationException e) {
throw e;
} catch (Exception e) {
retry++;
if (delay < max && retry <= maxRetries) {
delay *= 2;
logger.error("Retry #{} for: {}", retry, e.getMessage());
if (++logCounter == 1 && logger.isInfoEnabled())
logger.info("Exception --> " + ExceptionUtils.getStackTrace(e));
sleeper.sleep(delay);
} else if (delay >= max && retry <= maxRetries) {
if (logger.isErrorEnabled()) {
logger.error(
String.format(
"Retry #%d for: %s",
retry, ExceptionUtils.getStackTrace(e)));
}
sleeper.sleep(max);
} else {
throw e;
}
} finally {
forEachExecution();
}
}
}