code: @Override
    protected long download(T object, File outFile) throws IOException
    {
      try {
        return RetryUtils.retry(
            () -> {
              try (final InputStream is = openObjectFunction.open(object);
                   final OutputStream os = new FileOutputStream(outFile)) {
                return IOUtils.copyLarge(is, os, buffer);
              }
            },
            retryCondition,
            outFile::delete,
            maxFetchRetry + 1,
            StringUtils.format("Failed to download object[%s]", object)
        );
      }
      catch (Exception e) {
        throw new IOException(e);
      }
    }
docs: Downloads an object. It retries downloading {@link #maxFetchRetry}
  times and throws an exception.
  
  @param object  an object to be downloaded
  @param outFile a file which the object data is stored
  
  @return number of downloaded bytes