public T call()

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();
            }
        }
    }