From 3894df15878f0e8f26845ca1f5cf66a55f8f4ba8 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Thu, 29 Apr 2021 17:03:49 +0200 Subject: [PATCH] Improve chunked upload 2.0 in S3 --- .../java/org/cryptomator/data/cloud/s3/S3Impl.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/data/src/main/java/org/cryptomator/data/cloud/s3/S3Impl.java b/data/src/main/java/org/cryptomator/data/cloud/s3/S3Impl.java index 7ea2debf..a0dd07cd 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/s3/S3Impl.java +++ b/data/src/main/java/org/cryptomator/data/cloud/s3/S3Impl.java @@ -204,7 +204,7 @@ class S3Impl { progressAware.onProgress(Progress.started(UploadState.upload(file))); - final CompletableFuture result = new CompletableFuture<>(); + final CompletableFuture> result = new CompletableFuture<>(); if (size <= CHUNKED_UPLOAD_MAX_SIZE) { uploadFile(file, data, progressAware, result, size); @@ -213,8 +213,8 @@ class S3Impl { } try { - ObjectMetadata objectMetadata = result.get(); - objectMetadata = objectMetadata == null ? client().getObjectMetadata(cloud.s3Bucket(), file.getPath()) : objectMetadata; + Optional objectMetadataOptional = result.get(); + ObjectMetadata objectMetadata = objectMetadataOptional.orElseGet(() -> client().getObjectMetadata(cloud.s3Bucket(), file.getPath())); progressAware.onProgress(Progress.completed(UploadState.upload(file))); return S3CloudNodeFactory.file(file.getParent(), file.getName(), objectMetadata); } catch (ExecutionException | InterruptedException e) { @@ -223,7 +223,7 @@ class S3Impl { } - private void uploadFile(final S3File file, DataSource data, final ProgressAware progressAware, CompletableFuture result, final long size) // + private void uploadFile(final S3File file, DataSource data, final ProgressAware progressAware, CompletableFuture> result, final long size) // throws IOException { AtomicLong bytesTransferred = new AtomicLong(0); ProgressListener listener = progressEvent -> { @@ -241,10 +241,10 @@ class S3Impl { PutObjectRequest request = new PutObjectRequest(cloud.s3Bucket(), file.getPath(), data.open(context), metadata); request.setGeneralProgressListener(listener); - result.complete(client().putObject(request).getMetadata()); + result.complete(Optional.of(client().putObject(request).getMetadata())); } - private void uploadChunkedFile(final S3File file, DataSource data, final ProgressAware progressAware, CompletableFuture result, final long size) // + private void uploadChunkedFile(final S3File file, DataSource data, final ProgressAware progressAware, CompletableFuture> result, final long size) // throws IOException { TransferUtility tu = TransferUtility // @@ -259,7 +259,7 @@ class S3Impl { public void onStateChanged(int id, TransferState state) { if (state.equals(TransferState.COMPLETED)) { progressAware.onProgress(Progress.completed(UploadState.upload(file))); - result.complete(null); + result.complete(Optional.empty()); } }