boolean shouldRetry(RouterException exception) {
      if (exception == null) {
        return false;
      }
      switch (exception.getErrorCode()) {
        case AmbryUnavailable:
        case OperationTimedOut:
        case UnexpectedInternalError:
          return failedAttempts < routerConfig.routerGetBlobRetryLimitCount
              && time.milliseconds() < timeLimitForRetryInMs;
        default:
          return false;
      }
    }
Return a boolean value to indicate whether we should retry on fetching this chunk based on the given exception.
To Retry on a Get failure, these conditions have to be met at the same time
<p>
  <ol>
    <li>Exception is AmbryUnavailable, or OperationTimeout, or UnexpectedInternalError. The errors that return 503</li>
    <li>Failed attempts is less than the maximum retry count</li>
    <li>Operation duration is less than maximum retry duration</li>
  </ol>
</p>
@param exception The exception for this chunk operation.
@return {@code True} to retry this chunk. otherwise, return false.
ambry-router/src/main/java/com/github/ambry/router/GetBlobOperation.java