Skip to content

Commit 932c6ee

Browse files
authored
chore: make uri a field of MultipartUploadHttpRequestManager instead of a parameter for every method (#3383)
1 parent 10b1849 commit 932c6ee

File tree

6 files changed

+145
-103
lines changed

6 files changed

+145
-103
lines changed

google-cloud-storage/src/main/java/com/google/cloud/storage/MultipartUploadClient.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import com.google.cloud.storage.multipartupload.model.ListPartsResponse;
2929
import com.google.cloud.storage.multipartupload.model.UploadPartRequest;
3030
import com.google.cloud.storage.multipartupload.model.UploadPartResponse;
31-
import java.net.URI;
3231

3332
/**
3433
* A client for interacting with Google Cloud Storage's Multipart Upload API.
@@ -111,7 +110,6 @@ public abstract CompleteMultipartUploadResponse completeMultipartUpload(
111110
public static MultipartUploadClient create(MultipartUploadSettings config) {
112111
HttpStorageOptions options = config.getOptions();
113112
return new MultipartUploadClientImpl(
114-
URI.create(options.getHost()),
115113
options.createRetrier(),
116114
MultipartUploadHttpRequestManager.createFrom(options),
117115
options.getRetryAlgorithmManager());

google-cloud-storage/src/main/java/com/google/cloud/storage/MultipartUploadClientImpl.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import com.google.cloud.storage.multipartupload.model.ListPartsResponse;
2828
import com.google.cloud.storage.multipartupload.model.UploadPartRequest;
2929
import com.google.cloud.storage.multipartupload.model.UploadPartResponse;
30-
import java.net.URI;
3130
import java.util.concurrent.atomic.AtomicBoolean;
3231

3332
/**
@@ -38,25 +37,22 @@ final class MultipartUploadClientImpl extends MultipartUploadClient {
3837

3938
private final MultipartUploadHttpRequestManager httpRequestManager;
4039
private final Retrier retrier;
41-
private final URI uri;
4240
private final HttpRetryAlgorithmManager retryAlgorithmManager;
4341

4442
MultipartUploadClientImpl(
45-
URI uri,
4643
Retrier retrier,
4744
MultipartUploadHttpRequestManager multipartUploadHttpRequestManager,
4845
HttpRetryAlgorithmManager retryAlgorithmManager) {
4946
this.httpRequestManager = multipartUploadHttpRequestManager;
5047
this.retrier = retrier;
51-
this.uri = uri;
5248
this.retryAlgorithmManager = retryAlgorithmManager;
5349
}
5450

5551
@Override
5652
public CreateMultipartUploadResponse createMultipartUpload(CreateMultipartUploadRequest request) {
5753
return retrier.run(
5854
retryAlgorithmManager.nonIdempotent(),
59-
() -> httpRequestManager.sendCreateMultipartUploadRequest(uri, request),
55+
() -> httpRequestManager.sendCreateMultipartUploadRequest(request),
6056
Decoder.identity());
6157
}
6258

@@ -65,7 +61,7 @@ public ListPartsResponse listParts(ListPartsRequest request) {
6561

6662
return retrier.run(
6763
retryAlgorithmManager.idempotent(),
68-
() -> httpRequestManager.sendListPartsRequest(uri, request),
64+
() -> httpRequestManager.sendListPartsRequest(request),
6965
Decoder.identity());
7066
}
7167

@@ -74,7 +70,7 @@ public AbortMultipartUploadResponse abortMultipartUpload(AbortMultipartUploadReq
7470

7571
return retrier.run(
7672
retryAlgorithmManager.idempotent(),
77-
() -> httpRequestManager.sendAbortMultipartUploadRequest(uri, request),
73+
() -> httpRequestManager.sendAbortMultipartUploadRequest(request),
7874
Decoder.identity());
7975
}
8076

@@ -83,7 +79,7 @@ public CompleteMultipartUploadResponse completeMultipartUpload(
8379
CompleteMultipartUploadRequest request) {
8480
return retrier.run(
8581
retryAlgorithmManager.idempotent(),
86-
() -> httpRequestManager.sendCompleteMultipartUploadRequest(uri, request),
82+
() -> httpRequestManager.sendCompleteMultipartUploadRequest(request),
8783
Decoder.identity());
8884
}
8985

@@ -96,7 +92,7 @@ public UploadPartResponse uploadPart(UploadPartRequest request, RequestBody requ
9692
if (dirty.getAndSet(true)) {
9793
requestBody.getContent().rewindTo(0);
9894
}
99-
return httpRequestManager.sendUploadPartRequest(uri, request, requestBody.getContent());
95+
return httpRequestManager.sendUploadPartRequest(request, requestBody.getContent());
10096
},
10197
Decoder.identity());
10298
}

google-cloud-storage/src/main/java/com/google/cloud/storage/MultipartUploadHttpRequestManager.java

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,26 @@ final class MultipartUploadHttpRequestManager {
5858
private final HttpRequestFactory requestFactory;
5959
private final ObjectParser objectParser;
6060
private final HeaderProvider headerProvider;
61+
private final URI uri;
6162

6263
MultipartUploadHttpRequestManager(
63-
HttpRequestFactory requestFactory, ObjectParser objectParser, HeaderProvider headerProvider) {
64+
HttpRequestFactory requestFactory,
65+
ObjectParser objectParser,
66+
HeaderProvider headerProvider,
67+
URI uri) {
6468
this.requestFactory = requestFactory;
6569
this.objectParser = objectParser;
6670
this.headerProvider = headerProvider;
71+
this.uri = uri;
6772
}
6873

6974
CreateMultipartUploadResponse sendCreateMultipartUploadRequest(
70-
URI uri, CreateMultipartUploadRequest request) throws IOException {
75+
CreateMultipartUploadRequest request) throws IOException {
7176

7277
String createUri =
7378
UriTemplate.expand(
74-
uri.toString() + "{bucket}/{key}?uploads",
79+
uri.toString(),
80+
"{bucket}/{key}?uploads",
7581
ImmutableMap.of("bucket", request.bucket(), "key", request.key()),
7682
false);
7783

@@ -85,7 +91,7 @@ CreateMultipartUploadResponse sendCreateMultipartUploadRequest(
8591
return httpRequest.execute().parseAs(CreateMultipartUploadResponse.class);
8692
}
8793

88-
ListPartsResponse sendListPartsRequest(URI uri, ListPartsRequest request) throws IOException {
94+
ListPartsResponse sendListPartsRequest(ListPartsRequest request) throws IOException {
8995

9096
ImmutableMap.Builder<String, Object> params =
9197
ImmutableMap.<String, Object>builder()
@@ -101,7 +107,8 @@ ListPartsResponse sendListPartsRequest(URI uri, ListPartsRequest request) throws
101107

102108
String listUri =
103109
UriTemplate.expand(
104-
uri.toString() + "{bucket}/{key}{?uploadId,max-parts,part-number-marker}",
110+
uri.toString(),
111+
"{bucket}/{key}{?uploadId,max-parts,part-number-marker}",
105112
params.build(),
106113
false);
107114
HttpRequest httpRequest = requestFactory.buildGetRequest(new GenericUrl(listUri));
@@ -111,12 +118,13 @@ ListPartsResponse sendListPartsRequest(URI uri, ListPartsRequest request) throws
111118
return httpRequest.execute().parseAs(ListPartsResponse.class);
112119
}
113120

114-
AbortMultipartUploadResponse sendAbortMultipartUploadRequest(
115-
URI uri, AbortMultipartUploadRequest request) throws IOException {
121+
AbortMultipartUploadResponse sendAbortMultipartUploadRequest(AbortMultipartUploadRequest request)
122+
throws IOException {
116123

117124
String abortUri =
118125
UriTemplate.expand(
119-
uri.toString() + "{bucket}/{key}{?uploadId}",
126+
uri.toString(),
127+
"{bucket}/{key}{?uploadId}",
120128
ImmutableMap.of(
121129
"bucket", request.bucket(), "key", request.key(), "uploadId", request.uploadId()),
122130
false);
@@ -129,7 +137,7 @@ AbortMultipartUploadResponse sendAbortMultipartUploadRequest(
129137
}
130138

131139
CompleteMultipartUploadResponse sendCompleteMultipartUploadRequest(
132-
URI uri, CompleteMultipartUploadRequest request) throws IOException {
140+
CompleteMultipartUploadRequest request) throws IOException {
133141
String completeUri =
134142
UriTemplate.expand(
135143
uri.toString() + "{bucket}/{key}{?uploadId}",
@@ -149,7 +157,7 @@ CompleteMultipartUploadResponse sendCompleteMultipartUploadRequest(
149157
}
150158

151159
UploadPartResponse sendUploadPartRequest(
152-
URI uri, UploadPartRequest request, RewindableContent rewindableContent) throws IOException {
160+
UploadPartRequest request, RewindableContent rewindableContent) throws IOException {
153161
String uploadUri =
154162
UriTemplate.expand(
155163
uri.toString() + "{bucket}/{key}{?partNumber,uploadId}",
@@ -194,7 +202,8 @@ static MultipartUploadHttpRequestManager createFrom(HttpStorageOptions options)
194202
return new MultipartUploadHttpRequestManager(
195203
storage.getRequestFactory(),
196204
new XmlObjectParser(new XmlMapper()),
197-
options.getMergedHeaderProvider(FixedHeaderProvider.create(stableHeaders.build())));
205+
options.getMergedHeaderProvider(FixedHeaderProvider.create(stableHeaders.build())),
206+
URI.create(options.getHost()));
198207
}
199208

200209
private void addChecksumHeader(@Nullable Crc32cLengthKnown crc32c, HttpHeaders headers) {

google-cloud-storage/src/test/java/com/google/cloud/storage/FakeHttpServer.java

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
import static io.grpc.netty.shaded.io.netty.handler.codec.http.HttpHeaderNames.CONTENT_LENGTH;
2121
import static io.grpc.netty.shaded.io.netty.handler.codec.http.HttpHeaderValues.CLOSE;
2222

23+
import com.google.api.gax.retrying.RetrySettings;
24+
import com.google.cloud.NoCredentials;
25+
import com.google.cloud.storage.it.runner.registry.Registry;
2326
import io.grpc.netty.shaded.io.netty.bootstrap.ServerBootstrap;
2427
import io.grpc.netty.shaded.io.netty.buffer.ByteBuf;
2528
import io.grpc.netty.shaded.io.netty.channel.Channel;
@@ -44,17 +47,25 @@
4447
import io.grpc.netty.shaded.io.netty.handler.logging.LoggingHandler;
4548
import java.net.InetSocketAddress;
4649
import java.net.URI;
50+
import java.time.Duration;
4751

4852
final class FakeHttpServer implements AutoCloseable {
4953

5054
private final URI endpoint;
5155
private final Channel channel;
5256
private final Runnable shutdown;
57+
private final HttpStorageOptions httpStorageOptions;
5358

54-
private FakeHttpServer(URI endpoint, Channel channel, Runnable shutdown) {
59+
private FakeHttpServer(
60+
URI endpoint, Channel channel, Runnable shutdown, HttpStorageOptions httpStorageOptions) {
5561
this.endpoint = endpoint;
5662
this.channel = channel;
5763
this.shutdown = shutdown;
64+
this.httpStorageOptions = httpStorageOptions;
65+
}
66+
67+
public HttpStorageOptions getHttpStorageOptions() {
68+
return httpStorageOptions;
5869
}
5970

6071
public URI getEndpoint() {
@@ -99,13 +110,34 @@ protected void initChannel(SocketChannel ch) {
99110
Channel channel = b.bind(address).syncUninterruptibly().channel();
100111

101112
InetSocketAddress socketAddress = (InetSocketAddress) channel.localAddress();
113+
URI endpoint = URI.create("http://localhost:" + socketAddress.getPort() + "/");
114+
HttpStorageOptions httpStorageOptions =
115+
HttpStorageOptions.http()
116+
.setHost(endpoint.toString())
117+
.setProjectId("test-proj")
118+
.setCredentials(NoCredentials.getInstance())
119+
.setOpenTelemetry(Registry.getInstance().otelSdk.get().get())
120+
// cut most retry settings by half. we're hitting an in process server.
121+
.setRetrySettings(
122+
RetrySettings.newBuilder()
123+
.setTotalTimeoutDuration(Duration.ofSeconds(25))
124+
.setInitialRetryDelayDuration(Duration.ofMillis(250))
125+
.setRetryDelayMultiplier(1.2)
126+
.setMaxRetryDelayDuration(Duration.ofSeconds(16))
127+
.setMaxAttempts(6)
128+
.setInitialRpcTimeoutDuration(Duration.ofSeconds(25))
129+
.setRpcTimeoutMultiplier(1.0)
130+
.setMaxRpcTimeoutDuration(Duration.ofSeconds(25))
131+
.build())
132+
.build();
102133
return new FakeHttpServer(
103-
URI.create("http://localhost:" + socketAddress.getPort()),
134+
endpoint,
104135
channel,
105136
() -> {
106137
bossGroup.shutdownGracefully();
107138
workerGroup.shutdownGracefully();
108-
});
139+
},
140+
httpStorageOptions);
109141
}
110142

111143
interface HttpRequestHandler {

google-cloud-storage/src/test/java/com/google/cloud/storage/ITJsonResumableSessionPutTaskTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ public void scenario4() throws Exception {
460460
StorageObject call = operationResult.getObject();
461461
assertThat(call).isNotNull();
462462
assertThat(call.getMetadata())
463-
.containsEntry("upload_id", uploadUrl.substring(endpoint.toString().length()));
463+
.containsEntry("upload_id", uploadUrl.substring(endpoint.toString().length() - 1));
464464
assertThat(operationResult.getPersistedSize()).isEqualTo(_256KiBL);
465465
}
466466
}

0 commit comments

Comments
 (0)