Skip to content

Commit c19049d

Browse files
authored
feat: Resolve API futures on getDownload/UploadResults calls (#2064)
* feat: Resolve API futures on getDownload/UploadResults calls * removing reference to APIFutures after rebase
1 parent 12a7a6f commit c19049d

File tree

3 files changed

+29
-26
lines changed

3 files changed

+29
-26
lines changed

google-cloud-storage/src/main/java/com/google/cloud/storage/transfermanager/DownloadJob.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import static com.google.common.base.Preconditions.checkNotNull;
2020

2121
import com.google.api.core.ApiFuture;
22+
import com.google.api.core.ApiFutures;
23+
import com.google.api.gax.rpc.ApiExceptions;
2224
import com.google.common.base.MoreObjects;
2325
import com.google.common.collect.ImmutableList;
2426
import java.util.List;
@@ -39,8 +41,8 @@ private DownloadJob(
3941
this.parallelDownloadConfig = parallelDownloadConfig;
4042
}
4143

42-
public @NonNull List<ApiFuture<DownloadResult>> getDownloadResults() {
43-
return downloadResults;
44+
public @NonNull List<DownloadResult> getDownloadResults() {
45+
return ApiExceptions.callAndTranslateApiException(ApiFutures.allAsList(downloadResults));
4446
}
4547

4648
public @NonNull ParallelDownloadConfig getParallelDownloadConfig() {

google-cloud-storage/src/main/java/com/google/cloud/storage/transfermanager/UploadJob.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import static com.google.common.base.Preconditions.checkNotNull;
2020

2121
import com.google.api.core.ApiFuture;
22+
import com.google.api.core.ApiFutures;
23+
import com.google.api.gax.rpc.ApiExceptions;
2224
import com.google.common.base.MoreObjects;
2325
import com.google.common.collect.ImmutableList;
2426
import java.util.List;
@@ -28,19 +30,19 @@
2830

2931
public final class UploadJob {
3032

31-
@NonNull private final List<ApiFuture<UploadResult>> uploadResponses;
33+
@NonNull private final List<ApiFuture<UploadResult>> uploadResults;
3234

3335
@NonNull private final ParallelUploadConfig parallelUploadConfig;
3436

3537
private UploadJob(
36-
@NonNull List<ApiFuture<UploadResult>> successResponses,
38+
@NonNull List<ApiFuture<UploadResult>> uploadResults,
3739
@NonNull ParallelUploadConfig parallelUploadConfig) {
38-
this.uploadResponses = successResponses;
40+
this.uploadResults = uploadResults;
3941
this.parallelUploadConfig = parallelUploadConfig;
4042
}
4143

42-
public List<ApiFuture<UploadResult>> getUploadResponses() {
43-
return uploadResponses;
44+
public List<UploadResult> getUploadResults() {
45+
return ApiExceptions.callAndTranslateApiException(ApiFutures.allAsList(uploadResults));
4446
}
4547

4648
public ParallelUploadConfig getParallelUploadConfig() {
@@ -56,19 +58,19 @@ public boolean equals(Object o) {
5658
return false;
5759
}
5860
UploadJob uploadJob = (UploadJob) o;
59-
return uploadResponses.equals(uploadJob.uploadResponses)
61+
return uploadResults.equals(uploadJob.uploadResults)
6062
&& parallelUploadConfig.equals(uploadJob.parallelUploadConfig);
6163
}
6264

6365
@Override
6466
public int hashCode() {
65-
return Objects.hash(uploadResponses, parallelUploadConfig);
67+
return Objects.hash(uploadResults, parallelUploadConfig);
6668
}
6769

6870
@Override
6971
public String toString() {
7072
return MoreObjects.toStringHelper(this)
71-
.add("successResponses", uploadResponses)
73+
.add("uploadResults", uploadResults)
7274
.add("parallelUploadConfig", parallelUploadConfig)
7375
.toString();
7476
}
@@ -79,16 +81,16 @@ public static Builder newBuilder() {
7981

8082
public static final class Builder {
8183

82-
private @NonNull List<ApiFuture<UploadResult>> uploadResponses;
84+
private @NonNull List<ApiFuture<UploadResult>> uploadResults;
8385

8486
private @MonotonicNonNull ParallelUploadConfig parallelUploadConfig;
8587

8688
private Builder() {
87-
this.uploadResponses = ImmutableList.of();
89+
this.uploadResults = ImmutableList.of();
8890
}
8991

90-
public Builder setUploadResponses(@NonNull List<ApiFuture<UploadResult>> uploadResponses) {
91-
this.uploadResponses = ImmutableList.copyOf(uploadResponses);
92+
public Builder setUploadResponses(@NonNull List<ApiFuture<UploadResult>> uploadResults) {
93+
this.uploadResults = ImmutableList.copyOf(uploadResults);
9294
return this;
9395
}
9496

@@ -98,9 +100,9 @@ public Builder setParallelUploadConfig(@NonNull ParallelUploadConfig parallelUpl
98100
}
99101

100102
public UploadJob build() {
101-
checkNotNull(uploadResponses);
103+
checkNotNull(uploadResults);
102104
checkNotNull(parallelUploadConfig);
103-
return new UploadJob(uploadResponses, parallelUploadConfig);
105+
return new UploadJob(uploadResults, parallelUploadConfig);
104106
}
105107
}
106108
}

google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITTransferManagerTest.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import static com.google.common.truth.Truth.assertThat;
2020

21-
import com.google.api.core.ApiFutures;
2221
import com.google.cloud.WriteChannel;
2322
import com.google.cloud.storage.BlobId;
2423
import com.google.cloud.storage.BlobInfo;
@@ -130,7 +129,7 @@ public void uploadFiles() throws Exception {
130129
ParallelUploadConfig parallelUploadConfig =
131130
ParallelUploadConfig.newBuilder().setBucketName(bucketName).build();
132131
UploadJob job = transferManager.uploadFiles(files, parallelUploadConfig);
133-
List<UploadResult> uploadResults = ApiFutures.allAsList(job.getUploadResponses()).get();
132+
List<UploadResult> uploadResults = job.getUploadResults();
134133
assertThat(uploadResults).hasSize(3);
135134
}
136135
}
@@ -152,7 +151,7 @@ public void uploadFilesWithOpts() throws Exception {
152151
.setWriteOptsPerRequest(Collections.singletonList(BlobWriteOption.doesNotExist()))
153152
.build();
154153
UploadJob job = transferManager.uploadFiles(files, parallelUploadConfig);
155-
List<UploadResult> uploadResults = ApiFutures.allAsList(job.getUploadResponses()).get();
154+
List<UploadResult> uploadResults = job.getUploadResults();
156155
assertThat(uploadResults).hasSize(3);
157156
}
158157
}
@@ -169,7 +168,7 @@ public void downloadBlobs() throws Exception {
169168
.setDownloadDirectory(baseDir)
170169
.build();
171170
DownloadJob job = transferManager.downloadBlobs(blobs, parallelDownloadConfig);
172-
List<DownloadResult> downloadResults = ApiFutures.allAsList(job.getDownloadResults()).get();
171+
List<DownloadResult> downloadResults = job.getDownloadResults();
173172
try {
174173
assertThat(downloadResults).hasSize(3);
175174
} finally {
@@ -194,7 +193,7 @@ public void downloadBlobsAllowChunked() throws Exception {
194193
.setDownloadDirectory(baseDir)
195194
.build();
196195
DownloadJob job = transferManager.downloadBlobs(blobs, parallelDownloadConfig);
197-
List<DownloadResult> downloadResults = ApiFutures.allAsList(job.getDownloadResults()).get();
196+
List<DownloadResult> downloadResults = job.getDownloadResults();
198197
assertThat(downloadResults).hasSize(3);
199198

200199
List<String> expectedContents =
@@ -232,7 +231,7 @@ public void uploadNonexistentBucket() throws Exception {
232231
ParallelUploadConfig parallelUploadConfig =
233232
ParallelUploadConfig.newBuilder().setBucketName(bucketName).build();
234233
UploadJob job = transferManager.uploadFiles(files, parallelUploadConfig);
235-
List<UploadResult> uploadResults = ApiFutures.allAsList(job.getUploadResponses()).get();
234+
List<UploadResult> uploadResults = job.getUploadResults();
236235
assertThat(uploadResults.get(0).getStatus()).isEqualTo(TransferStatus.FAILED_TO_START);
237236
assertThat(uploadResults.get(0).getException()).isInstanceOf(StorageException.class);
238237
}
@@ -248,7 +247,7 @@ public void uploadNonexistentFile() throws Exception {
248247
ParallelUploadConfig parallelUploadConfig =
249248
ParallelUploadConfig.newBuilder().setBucketName(bucketName).build();
250249
UploadJob job = transferManager.uploadFiles(files, parallelUploadConfig);
251-
List<UploadResult> uploadResults = ApiFutures.allAsList(job.getUploadResponses()).get();
250+
List<UploadResult> uploadResults = job.getUploadResults();
252251
assertThat(uploadResults.get(0).getStatus()).isEqualTo(TransferStatus.FAILED_TO_START);
253252
assertThat(uploadResults.get(0).getException()).isInstanceOf(NoSuchFileException.class);
254253
}
@@ -266,7 +265,7 @@ public void downloadNonexistentBucket() throws Exception {
266265
.setDownloadDirectory(baseDir)
267266
.build();
268267
DownloadJob job = transferManager.downloadBlobs(blobs, parallelDownloadConfig);
269-
List<DownloadResult> downloadResults = ApiFutures.allAsList(job.getDownloadResults()).get();
268+
List<DownloadResult> downloadResults = job.getDownloadResults();
270269
List<DownloadResult> failedToStart =
271270
downloadResults.stream()
272271
.filter(x -> x.getStatus() == TransferStatus.FAILED_TO_START)
@@ -291,7 +290,7 @@ public void downloadBlobsChunkedFail() throws Exception {
291290
.setDownloadDirectory(baseDir)
292291
.build();
293292
DownloadJob job = transferManager.downloadBlobs(blobs, parallelDownloadConfig);
294-
List<DownloadResult> downloadResults = ApiFutures.allAsList(job.getDownloadResults()).get();
293+
List<DownloadResult> downloadResults = job.getDownloadResults();
295294
assertThat(downloadResults).hasSize(3);
296295
List<DownloadResult> failedToStart =
297296
downloadResults.stream()
@@ -317,7 +316,7 @@ public void downloadBlobsPreconditionFailure() throws Exception {
317316
.setOptionsPerRequest(ImmutableList.of(BlobSourceOption.generationMatch(-1)))
318317
.build();
319318
DownloadJob job = transferManager.downloadBlobs(blobs, parallelDownloadConfig);
320-
List<DownloadResult> downloadResults = ApiFutures.allAsList(job.getDownloadResults()).get();
319+
List<DownloadResult> downloadResults = job.getDownloadResults();
321320
assertThat(downloadResults).hasSize(3);
322321
List<DownloadResult> failedToStart =
323322
downloadResults.stream()

0 commit comments

Comments
 (0)