private void retry(int attempt, Throwable error, ErrorClassification errorClassification, Context recoveryContext, SettablePromise<T> recoveryResult) {
    long backoffTime = _policy.getBackoffPolicy().nextBackoff(attempt, error);

    if (errorClassification == ErrorClassification.UNRECOVERABLE) {
      // For fatal errors there are no retries.
      LOGGER.debug(String.format("Attempt %s of %s interrupted: %s", attempt, _name, error.getMessage()));
      recoveryResult.fail(error);
    } else if (_policy.getTerminationPolicy().shouldTerminate(attempt, System.currentTimeMillis() - _startedAt + backoffTime)) {
      // Retry policy commands that no more retries should be done.
      LOGGER.debug(String.format("Too many exceptions after attempt %s of %s, aborting: %s", attempt, _name, error.getMessage()));
      recoveryResult.fail(error);
    } else {
      // Schedule a new retry task after a computed backoff timeout.
      LOGGER.debug(String.format("Attempt %s of %s failed and will be retried after %s millis: %s", attempt, _name, backoffTime, error.getMessage()));
      Task<T> retryTask = wrap(attempt);
      Promises.propagateResult(retryTask, recoveryResult);
      recoveryContext.createTimer(backoffTime, TimeUnit.MILLISECONDS, retryTask);
    }
  }
private void retry(int attempt, Throwable error, ErrorClassification errorClassification, Context recoveryContext, SettablePromise<T> recoveryResult) {
    long backoffTime = _policy.getBackoffPolicy().nextBackoff(attempt, error);

    if (errorClassification == ErrorClassification.UNRECOVERABLE) {
      
      LOGGER.debug(String.format("Attempt %s of %s interrupted: %s", attempt, _name, error.getMessage()));
      recoveryResult.fail(error);
    } else if (_policy.getTerminationPolicy().shouldTerminate(attempt, System.currentTimeMillis() - _startedAt + backoffTime)) {
      
      LOGGER.debug(String.format("Too many exceptions after attempt %s of %s, aborting: %s", attempt, _name, error.getMessage()));
      recoveryResult.fail(error);
    } else {
      
      LOGGER.debug(String.format("Attempt %s of %s failed and will be retried after %s millis: %s", attempt, _name, backoffTime, error.getMessage()));
      Task<T> retryTask = wrap(attempt);
      Promises.propagateResult(retryTask, recoveryResult);
      recoveryContext.createTimer(backoffTime, TimeUnit.MILLISECONDS, retryTask);
    }
  }
private void retry ( int attempt , Throwable error , ErrorClassification errorClassification , Context recoveryContext , SettablePromise < T > recoveryResult ) { long backoffTime = _policy . getBackoffPolicy ( ) . nextBackoff ( attempt , error ) ; if ( errorClassification == ErrorClassification . UNRECOVERABLE ) { // For fatal errors there are no retries. LOGGER . debug ( String . format ( "Attempt %s of %s interrupted: %s" , attempt , _name , error . getMessage ( ) ) ) ; recoveryResult . fail ( error ) ; } else if ( _policy . getTerminationPolicy ( ) . shouldTerminate ( attempt , System . currentTimeMillis ( ) - _startedAt + backoffTime ) ) { // Retry policy commands that no more retries should be done. LOGGER . debug ( String . format ( "Too many exceptions after attempt %s of %s, aborting: %s" , attempt , _name , error . getMessage ( ) ) ) ; recoveryResult . fail ( error ) ; } else { // Schedule a new retry task after a computed backoff timeout. LOGGER . debug ( String . format ( "Attempt %s of %s failed and will be retried after %s millis: %s" , attempt , _name , backoffTime , error . getMessage ( ) ) ) ; Task < T > retryTask = wrap ( attempt ) ; Promises . propagateResult ( retryTask , recoveryResult ) ; recoveryContext . createTimer ( backoffTime , TimeUnit . MILLISECONDS , retryTask ) ; } }
Invoke event monitors and schedule a retry if policy allows.
Invoke event monitors and schedule a retry if policy allows .