code: private void execUpload(UploadPartRequest request) {
      File file = request.getFile();
      ListenableFuture<PartETag> futureTag =
          mExecutor.submit((Callable) () -> {
            PartETag partETag;
            AmazonClientException lastException;
            try {
              do {
                try {
                  partETag = mClient.uploadPart(request).getPartETag();
                  return partETag;
                } catch (AmazonClientException e) {
                  lastException = e;
                }
              } while (mRetryPolicy.attempt());
            } finally {
              // Delete the uploaded or failed to upload file
              if (!file.delete()) {
                LOG.error("Failed to delete temporary file @ {}", file.getPath());
              }
            }
            throw new IOException("Fail to upload part " + request.getPartNumber()
                + " to " + request.getKey(), lastException);
          });
      mTagFutures.add(futureTag);
      LOG.debug("Submit upload part request. key={}, partNum={}, file={}, fileSize={}, lastPart={}.",
          mKey, request.getPartNumber(), file.getPath(), file.length(), request.isLastPart());
    }
docs: Executes the upload part request.
  
  @param request the upload part request