code: private <T> T retryOnException(ObjectStoreOperation<T> op,
        Supplier<String> description) throws IOException {
      RetryPolicy retryPolicy = getRetryPolicy();
      IOException thrownException = null;
      while (retryPolicy.attempt()) {
        try {
          return op.apply();
        } catch (IOException e) {
          LOG.debug("Attempt {} to {} failed with exception : {}", retryPolicy.getAttemptCount(),
              description.get(), e.toString());
          thrownException = e;
        }
      }
      throw thrownException;
    }
docs: Retries the given object store operation when it throws exceptions
  to resolve eventual consistency issue.
  
  @param op the object store operation to retry
  @param description the description regarding the operation
  @return the operation result if operation succeed