Skip to content

Commit 9278868

Browse files
Removing transport from ServiceOptions hierarchy (#1723)
This allows a client to support multiple transports in the future, e.g. Datastore supports http now but grpc support will be added later. Related changes: * Renaming HttpServiceOptions to HttpTransportOptions * Renaming GrpcServiceOptions to GrpcTransportOptions * Creating new TransportOptions interface
1 parent ca51fe9 commit 9278868

62 files changed

Lines changed: 1248 additions & 812 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryOptions.java

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,22 @@
1616

1717
package com.google.cloud.bigquery;
1818

19-
import com.google.cloud.HttpServiceOptions;
19+
import com.google.cloud.HttpTransportOptions;
20+
import com.google.cloud.ServiceDefaults;
21+
import com.google.cloud.ServiceFactory;
22+
import com.google.cloud.ServiceOptions;
23+
import com.google.cloud.TransportOptions;
2024
import com.google.cloud.bigquery.spi.BigQueryRpc;
2125
import com.google.cloud.bigquery.spi.BigQueryRpcFactory;
2226
import com.google.cloud.bigquery.spi.DefaultBigQueryRpc;
27+
import com.google.cloud.spi.ServiceRpcFactory;
2328
import com.google.common.collect.ImmutableSet;
2429

2530
import java.util.Set;
2631

27-
public class BigQueryOptions extends HttpServiceOptions<BigQuery, BigQueryRpc, BigQueryOptions> {
32+
public class BigQueryOptions extends ServiceOptions<BigQuery, BigQueryRpc, BigQueryOptions> {
2833

34+
private static final String API_SHORT_NAME = "BigQuery";
2935
private static final String BIGQUERY_SCOPE = "https://www.googleapis.com/auth/bigquery";
3036
private static final Set<String> SCOPES = ImmutableSet.of(BIGQUERY_SCOPE);
3137
private static final long serialVersionUID = -2437598817433266049L;
@@ -51,7 +57,7 @@ public BigQueryRpc create(BigQueryOptions options) {
5157
}
5258

5359
public static class Builder extends
54-
HttpServiceOptions.Builder<BigQuery, BigQueryRpc, BigQueryOptions, Builder> {
60+
ServiceOptions.Builder<BigQuery, BigQueryRpc, BigQueryOptions, Builder> {
5561

5662
private Builder() {
5763
}
@@ -60,24 +66,46 @@ private Builder(BigQueryOptions options) {
6066
super(options);
6167
}
6268

69+
@Override
70+
public Builder setTransportOptions(TransportOptions transportOptions) {
71+
if (!(transportOptions instanceof HttpTransportOptions)) {
72+
throw new IllegalArgumentException(
73+
"Only http transport is allowed for " + API_SHORT_NAME + ".");
74+
}
75+
return super.setTransportOptions(transportOptions);
76+
}
77+
6378
@Override
6479
public BigQueryOptions build() {
6580
return new BigQueryOptions(this);
6681
}
6782
}
6883

6984
private BigQueryOptions(Builder builder) {
70-
super(BigQueryFactory.class, BigQueryRpcFactory.class, builder);
85+
super(BigQueryFactory.class, BigQueryRpcFactory.class, builder, new BigQueryDefaults());
7186
}
7287

73-
@Override
74-
protected BigQueryFactory getDefaultServiceFactory() {
75-
return DefaultBigqueryFactory.INSTANCE;
88+
private static class BigQueryDefaults implements
89+
ServiceDefaults<BigQuery, BigQueryRpc, BigQueryOptions> {
90+
91+
@Override
92+
public BigQueryFactory getDefaultServiceFactory() {
93+
return DefaultBigqueryFactory.INSTANCE;
94+
}
95+
96+
@Override
97+
public BigQueryRpcFactory getDefaultRpcFactory() {
98+
return DefaultBigQueryRpcFactory.INSTANCE;
99+
}
100+
101+
@Override
102+
public TransportOptions getDefaultTransportOptions() {
103+
return getDefaultHttpTransportOptions();
104+
}
76105
}
77106

78-
@Override
79-
protected BigQueryRpcFactory getDefaultRpcFactory() {
80-
return DefaultBigQueryRpcFactory.INSTANCE;
107+
public static HttpTransportOptions getDefaultHttpTransportOptions() {
108+
return HttpTransportOptions.newBuilder().build();
81109
}
82110

83111
@Override

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/DefaultBigQueryRpc.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@
5858
import com.google.api.services.bigquery.model.TableList;
5959
import com.google.api.services.bigquery.model.TableReference;
6060
import com.google.api.services.bigquery.model.TableRow;
61+
import com.google.cloud.HttpTransportOptions;
6162
import com.google.cloud.bigquery.BigQueryException;
6263
import com.google.cloud.bigquery.BigQueryOptions;
6364
import com.google.common.base.Function;
6465
import com.google.common.collect.ImmutableList;
6566
import com.google.common.collect.Iterables;
66-
6767
import java.io.IOException;
6868
import java.math.BigInteger;
6969
import java.util.List;
@@ -80,8 +80,9 @@ public class DefaultBigQueryRpc implements BigQueryRpc {
8080
private final Bigquery bigquery;
8181

8282
public DefaultBigQueryRpc(BigQueryOptions options) {
83-
HttpTransport transport = options.getHttpTransportFactory().create();
84-
HttpRequestInitializer initializer = options.getHttpRequestInitializer();
83+
HttpTransportOptions transportOptions = (HttpTransportOptions) options.getTransportOptions();
84+
HttpTransport transport = transportOptions.getHttpTransportFactory().create();
85+
HttpRequestInitializer initializer = transportOptions.getHttpRequestInitializer(options);
8586
this.options = options;
8687
bigquery = new Bigquery.Builder(transport, new JacksonFactory(), initializer)
8788
.setRootUrl(options.getHost())

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/testing/RemoteBigQueryHelper.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.google.cloud.bigquery.testing;
1818

1919
import com.google.auth.oauth2.ServiceAccountCredentials;
20+
import com.google.cloud.HttpTransportOptions;
2021
import com.google.cloud.RetryParams;
2122
import com.google.cloud.bigquery.BigQuery;
2223
import com.google.cloud.bigquery.BigQueryException;
@@ -36,7 +37,8 @@
3637
* {@link RetryParams#getMaxRetryDelayMillis()} is {@code 30000},
3738
* {@link RetryParams#getTotalRetryPeriodMillis()} is {@code 120000} and
3839
* {@link RetryParams#getInitialRetryDelayMillis()} is {@code 250}.
39-
* {@link BigQueryOptions#getConnectTimeout()} and {@link BigQueryOptions#getReadTimeout()} are both
40+
* {@link HttpTransportOptions#getConnectTimeout()} and
41+
* {@link HttpTransportOptions#getReadTimeout()} are both
4042
* set to {@code 60000}.
4143
*/
4244
public class RemoteBigQueryHelper {
@@ -88,12 +90,14 @@ public static String generateDatasetName() {
8890
public static RemoteBigQueryHelper create(String projectId, InputStream keyStream)
8991
throws BigQueryHelperException {
9092
try {
93+
HttpTransportOptions transportOptions = BigQueryOptions.getDefaultHttpTransportOptions();
94+
transportOptions = transportOptions.toBuilder().setConnectTimeout(60000).setReadTimeout(60000)
95+
.build();
9196
BigQueryOptions bigqueryOptions = BigQueryOptions.newBuilder()
9297
.setCredentials(ServiceAccountCredentials.fromStream(keyStream))
9398
.setProjectId(projectId)
9499
.setRetryParams(retryParams())
95-
.setConnectTimeout(60000)
96-
.setReadTimeout(60000)
100+
.setTransportOptions(transportOptions)
97101
.build();
98102
return new RemoteBigQueryHelper(bigqueryOptions);
99103
} catch (IOException ex) {
@@ -109,10 +113,12 @@ public static RemoteBigQueryHelper create(String projectId, InputStream keyStrea
109113
* credentials.
110114
*/
111115
public static RemoteBigQueryHelper create() {
116+
HttpTransportOptions transportOptions = BigQueryOptions.getDefaultHttpTransportOptions();
117+
transportOptions = transportOptions.toBuilder().setConnectTimeout(60000).setReadTimeout(60000)
118+
.build();
112119
BigQueryOptions bigqueryOptions = BigQueryOptions.newBuilder()
113120
.setRetryParams(retryParams())
114-
.setConnectTimeout(60000)
115-
.setReadTimeout(60000)
121+
.setTransportOptions(transportOptions)
116122
.build();
117123
return new RemoteBigQueryHelper(bigqueryOptions);
118124
}

google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/BigQueryImplTest.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@
4444
import com.google.common.collect.ImmutableMap;
4545
import com.google.common.collect.Iterables;
4646
import com.google.common.collect.Lists;
47-
47+
import java.math.BigInteger;
48+
import java.util.List;
49+
import java.util.Map;
4850
import org.easymock.Capture;
4951
import org.easymock.EasyMock;
5052
import org.junit.After;
@@ -53,10 +55,6 @@
5355
import org.junit.Test;
5456
import org.junit.rules.ExpectedException;
5557

56-
import java.math.BigInteger;
57-
import java.util.List;
58-
import java.util.Map;
59-
6058
public class BigQueryImplTest {
6159

6260
private static final String PROJECT = "project";
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright 2017 Google Inc. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.google.cloud.bigquery;
18+
19+
import com.google.cloud.GrpcTransportOptions;
20+
import org.junit.Rule;
21+
import org.junit.Test;
22+
import org.junit.rules.ExpectedException;
23+
24+
public class BigQueryOptionsTest {
25+
@Rule
26+
public ExpectedException thrown = ExpectedException.none();
27+
28+
@Test
29+
public void testInvalidTransport() {
30+
thrown.expect(IllegalArgumentException.class);
31+
BigQueryOptions.newBuilder().setTransportOptions(GrpcTransportOptions.newBuilder().build());
32+
}
33+
34+
}

google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/testing/RemoteBigQueryHelperTest.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,18 @@
1919
import static org.junit.Assert.assertEquals;
2020
import static org.junit.Assert.assertTrue;
2121

22+
import com.google.cloud.HttpTransportOptions;
2223
import com.google.cloud.bigquery.BigQuery;
2324
import com.google.cloud.bigquery.BigQuery.DatasetDeleteOption;
2425
import com.google.cloud.bigquery.BigQueryOptions;
25-
26+
import java.io.ByteArrayInputStream;
27+
import java.io.InputStream;
28+
import java.util.concurrent.ExecutionException;
2629
import org.easymock.EasyMock;
2730
import org.junit.Rule;
2831
import org.junit.Test;
2932
import org.junit.rules.ExpectedException;
3033

31-
import java.io.ByteArrayInputStream;
32-
import java.io.InputStream;
33-
import java.util.concurrent.ExecutionException;
34-
3534
public class RemoteBigQueryHelperTest {
3635

3736
private static final String DATASET_NAME = "dataset-name";
@@ -82,8 +81,10 @@ public void testCreateFromStream() {
8281
RemoteBigQueryHelper helper = RemoteBigQueryHelper.create(PROJECT_ID, JSON_KEY_STREAM);
8382
BigQueryOptions options = helper.getOptions();
8483
assertEquals(PROJECT_ID, options.getProjectId());
85-
assertEquals(60000, options.getConnectTimeout());
86-
assertEquals(60000, options.getReadTimeout());
84+
assertEquals(60000,
85+
((HttpTransportOptions) options.getTransportOptions()).getConnectTimeout());
86+
assertEquals(60000,
87+
((HttpTransportOptions) options.getTransportOptions()).getReadTimeout());
8788
assertEquals(10, options.getRetryParams().getRetryMaxAttempts());
8889
assertEquals(6, options.getRetryParams().getRetryMinAttempts());
8990
assertEquals(30000, options.getRetryParams().getMaxRetryDelayMillis());

google-cloud-compute/src/main/java/com/google/cloud/compute/ComputeOptions.java

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,22 @@
1616

1717
package com.google.cloud.compute;
1818

19-
import com.google.cloud.HttpServiceOptions;
19+
import com.google.cloud.HttpTransportOptions;
20+
import com.google.cloud.ServiceDefaults;
21+
import com.google.cloud.ServiceFactory;
22+
import com.google.cloud.ServiceOptions;
23+
import com.google.cloud.TransportOptions;
2024
import com.google.cloud.compute.spi.ComputeRpc;
2125
import com.google.cloud.compute.spi.ComputeRpcFactory;
2226
import com.google.cloud.compute.spi.DefaultComputeRpc;
27+
import com.google.cloud.spi.ServiceRpcFactory;
2328
import com.google.common.collect.ImmutableSet;
2429

2530
import java.util.Set;
2631

27-
public class ComputeOptions extends HttpServiceOptions<Compute, ComputeRpc, ComputeOptions> {
32+
public class ComputeOptions extends ServiceOptions<Compute, ComputeRpc, ComputeOptions> {
2833

34+
private static final String API_SHORT_NAME = "Compute";
2935
private static final String COMPUTE_SCOPE = "https://www.googleapis.com/auth/compute";
3036
private static final Set<String> SCOPES = ImmutableSet.of(COMPUTE_SCOPE);
3137
private static final long serialVersionUID = 6983703596543425691L;
@@ -51,7 +57,7 @@ public ComputeRpc create(ComputeOptions options) {
5157
}
5258

5359
public static class Builder extends
54-
HttpServiceOptions.Builder<Compute, ComputeRpc, ComputeOptions, Builder> {
60+
ServiceOptions.Builder<Compute, ComputeRpc, ComputeOptions, Builder> {
5561

5662
private Builder() {
5763
}
@@ -60,24 +66,46 @@ private Builder(ComputeOptions options) {
6066
super(options);
6167
}
6268

69+
@Override
70+
public Builder setTransportOptions(TransportOptions transportOptions) {
71+
if (!(transportOptions instanceof HttpTransportOptions)) {
72+
throw new IllegalArgumentException(
73+
"Only http transport is allowed for " + API_SHORT_NAME + ".");
74+
}
75+
return super.setTransportOptions(transportOptions);
76+
}
77+
6378
@Override
6479
public ComputeOptions build() {
6580
return new ComputeOptions(this);
6681
}
6782
}
6883

6984
private ComputeOptions(Builder builder) {
70-
super(ComputeFactory.class, ComputeRpcFactory.class, builder);
85+
super(ComputeFactory.class, ComputeRpcFactory.class, builder, new ComputeDefaults());
7186
}
7287

73-
@Override
74-
protected ComputeFactory getDefaultServiceFactory() {
75-
return DefaultComputeFactory.INSTANCE;
88+
private static class ComputeDefaults implements
89+
ServiceDefaults<Compute, ComputeRpc, ComputeOptions> {
90+
91+
@Override
92+
public ComputeFactory getDefaultServiceFactory() {
93+
return DefaultComputeFactory.INSTANCE;
94+
}
95+
96+
@Override
97+
public ComputeRpcFactory getDefaultRpcFactory() {
98+
return DefaultComputeRpcFactory.INSTANCE;
99+
}
100+
101+
@Override
102+
public TransportOptions getDefaultTransportOptions() {
103+
return getDefaultHttpTransportOptions();
104+
}
76105
}
77106

78-
@Override
79-
protected ComputeRpcFactory getDefaultRpcFactory() {
80-
return DefaultComputeRpcFactory.INSTANCE;
107+
public static HttpTransportOptions getDefaultHttpTransportOptions() {
108+
return HttpTransportOptions.newBuilder().build();
81109
}
82110

83111
@Override

google-cloud-compute/src/main/java/com/google/cloud/compute/spi/DefaultComputeRpc.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@
6868
import com.google.api.services.compute.model.Tags;
6969
import com.google.api.services.compute.model.Zone;
7070
import com.google.api.services.compute.model.ZoneList;
71+
import com.google.cloud.HttpTransportOptions;
7172
import com.google.cloud.compute.ComputeException;
7273
import com.google.cloud.compute.ComputeOptions;
7374
import com.google.common.collect.ImmutableList;
74-
7575
import java.io.IOException;
7676
import java.util.Map;
7777

@@ -81,8 +81,9 @@ public class DefaultComputeRpc implements ComputeRpc {
8181
private final Compute compute;
8282

8383
public DefaultComputeRpc(ComputeOptions options) {
84-
HttpTransport transport = options.getHttpTransportFactory().create();
85-
HttpRequestInitializer initializer = options.getHttpRequestInitializer();
84+
HttpTransportOptions transportOptions = (HttpTransportOptions) options.getTransportOptions();
85+
HttpTransport transport = transportOptions.getHttpTransportFactory().create();
86+
HttpRequestInitializer initializer = transportOptions.getHttpRequestInitializer(options);
8687
this.options = options;
8788
compute = new Compute.Builder(transport, new JacksonFactory(), initializer)
8889
.setRootUrl(options.getHost())

0 commit comments

Comments
 (0)