Skip to content

Commit 874829a

Browse files
authored
feat: enabling regapic by giving an option to user to use http (#1261)
* feat: enabling regapic by giving an option to user to use http * enabling retry settings * fix lint * fix deps failure * fix deps failure * trying out ipv6 address resolution * Revert "trying out ipv6 address resolution" This reverts commit 1bf0e29. * upgrading emulator * fix lint * downgrading to 2.0.2 to maintain java 8 compatibility * incorporating feedbacks * test retry settings while configuring DatastoreRpc instance * fix test * fix header * fix clirr check * fix lint * fix integration test * fix lint * incorporating feedback
1 parent 74941d8 commit 874829a

File tree

9 files changed

+220
-166
lines changed

9 files changed

+220
-166
lines changed

google-cloud-datastore/pom.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,6 @@
106106
<groupId>com.google.oauth-client</groupId>
107107
<artifactId>google-oauth-client</artifactId>
108108
</dependency>
109-
<dependency>
110-
<groupId>com.google.auth</groupId>
111-
<artifactId>google-auth-library-oauth2-http</artifactId>
112-
</dependency>
113109
<dependency>
114110
<groupId>io.opencensus</groupId>
115111
<artifactId>opencensus-api</artifactId>

google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.google.cloud.datastore;
1818

1919
import static com.google.cloud.datastore.Validator.validateNamespace;
20+
import static com.google.cloud.datastore.spi.v1.DatastoreRpc.Transport.GRPC;
2021

2122
import com.google.api.core.BetaApi;
2223
import com.google.cloud.ServiceDefaults;
@@ -25,9 +26,12 @@
2526
import com.google.cloud.TransportOptions;
2627
import com.google.cloud.datastore.spi.DatastoreRpcFactory;
2728
import com.google.cloud.datastore.spi.v1.DatastoreRpc;
29+
import com.google.cloud.datastore.spi.v1.DatastoreRpc.Transport;
2830
import com.google.cloud.datastore.spi.v1.GrpcDatastoreRpc;
31+
import com.google.cloud.datastore.spi.v1.HttpDatastoreRpc;
2932
import com.google.cloud.datastore.v1.DatastoreSettings;
3033
import com.google.cloud.http.HttpTransportOptions;
34+
import com.google.common.annotations.VisibleForTesting;
3135
import com.google.common.base.MoreObjects;
3236
import com.google.common.collect.ImmutableSet;
3337
import java.io.IOException;
@@ -45,6 +49,7 @@ public class DatastoreOptions extends ServiceOptions<Datastore, DatastoreOptions
4549

4650
private final String namespace;
4751
private final String databaseId;
52+
private final Transport transport;
4853

4954
public static class DefaultDatastoreFactory implements DatastoreFactory {
5055

@@ -63,7 +68,9 @@ public static class DefaultDatastoreRpcFactory implements DatastoreRpcFactory {
6368
@Override
6469
public ServiceRpc create(DatastoreOptions options) {
6570
try {
66-
return new GrpcDatastoreRpc(options);
71+
return options.transport == GRPC
72+
? new GrpcDatastoreRpc(options)
73+
: new HttpDatastoreRpc(options);
6774
} catch (IOException e) {
6875
throw new RuntimeException(e);
6976
}
@@ -74,13 +81,15 @@ public static class Builder extends ServiceOptions.Builder<Datastore, DatastoreO
7481

7582
private String namespace;
7683
private String databaseId;
84+
private Transport transport = GRPC;
7785

7886
private Builder() {}
7987

8088
private Builder(DatastoreOptions options) {
8189
super(options);
8290
namespace = options.namespace;
8391
databaseId = options.databaseId;
92+
transport = options.transport;
8493
}
8594

8695
@Override
@@ -108,12 +117,18 @@ public Builder setDatabaseId(String databaseId) {
108117
this.databaseId = databaseId;
109118
return this;
110119
}
120+
121+
public Builder setTransport(Transport transport) {
122+
this.transport = transport;
123+
return this;
124+
}
111125
}
112126

113127
private DatastoreOptions(Builder builder) {
114128
super(DatastoreFactory.class, DatastoreRpcFactory.class, builder, new DatastoreDefaults());
115129
namespace = MoreObjects.firstNonNull(builder.namespace, defaultNamespace());
116130
databaseId = MoreObjects.firstNonNull(builder.databaseId, DEFAULT_DATABASE_ID);
131+
transport = builder.transport;
117132
}
118133

119134
@Override
@@ -166,6 +181,12 @@ public String getDatabaseId() {
166181
return this.databaseId;
167182
}
168183

184+
/** Returns the current transport */
185+
@VisibleForTesting
186+
Transport getTransport() {
187+
return this.transport;
188+
}
189+
169190
/** Returns a default {@code DatastoreOptions} instance. */
170191
public static DatastoreOptions getDefaultInstance() {
171192
return newBuilder().build();

google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/DatastoreRpc.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616

1717
package com.google.cloud.datastore.spi.v1;
1818

19+
import com.google.api.core.InternalApi;
20+
import com.google.api.gax.rpc.HeaderProvider;
1921
import com.google.cloud.ServiceRpc;
2022
import com.google.cloud.datastore.DatastoreException;
23+
import com.google.cloud.datastore.v1.DatastoreSettings;
2124
import com.google.datastore.v1.AllocateIdsRequest;
2225
import com.google.datastore.v1.AllocateIdsResponse;
2326
import com.google.datastore.v1.BeginTransactionRequest;
@@ -99,7 +102,26 @@ default RunAggregationQueryResponse runAggregationQuery(RunAggregationQueryReque
99102

100103
@Override
101104
void close() throws Exception;
102-
103105
/** Returns true if this background resource has been shut down. */
104106
boolean isClosed();
107+
108+
// This class is needed solely to get access to protected method setInternalHeaderProvider()
109+
class DatastoreSettingsBuilder extends DatastoreSettings.Builder {
110+
DatastoreSettingsBuilder(DatastoreSettings settings) {
111+
super(settings);
112+
}
113+
114+
@Override
115+
protected DatastoreSettings.Builder setInternalHeaderProvider(
116+
HeaderProvider internalHeaderProvider) {
117+
return super.setInternalHeaderProvider(internalHeaderProvider);
118+
}
119+
}
120+
121+
/** Transport used to sending requests. */
122+
@InternalApi
123+
enum Transport {
124+
GRPC,
125+
HTTP
126+
}
105127
}

google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818

1919
import static com.google.cloud.datastore.DatastoreUtils.isLocalHost;
2020
import static com.google.cloud.datastore.DatastoreUtils.removeScheme;
21+
import static com.google.cloud.datastore.spi.v1.RpcUtils.retrySettingSetter;
2122
import static java.util.concurrent.TimeUnit.SECONDS;
2223

23-
import com.google.api.core.ApiFunction;
2424
import com.google.api.core.InternalApi;
2525
import com.google.api.gax.core.BackgroundResource;
2626
import com.google.api.gax.core.GaxProperties;
@@ -30,7 +30,6 @@
3030
import com.google.api.gax.rpc.HeaderProvider;
3131
import com.google.api.gax.rpc.NoHeaderProvider;
3232
import com.google.api.gax.rpc.TransportChannel;
33-
import com.google.api.gax.rpc.UnaryCallSettings;
3433
import com.google.cloud.NoCredentials;
3534
import com.google.cloud.ServiceOptions;
3635
import com.google.cloud.datastore.DatastoreException;
@@ -76,14 +75,10 @@ public GrpcDatastoreRpc(DatastoreOptions datastoreOptions) throws IOException {
7675
isEmulator(datastoreOptions)
7776
? getClientContextForEmulator(datastoreOptions)
7877
: getClientContext(datastoreOptions);
79-
ApiFunction<UnaryCallSettings.Builder<?, ?>, Void> retrySettingsSetter =
80-
builder -> {
81-
builder.setRetrySettings(datastoreOptions.getRetrySettings());
82-
return null;
83-
};
78+
8479
DatastoreStubSettings datastoreStubSettings =
8580
DatastoreStubSettings.newBuilder(clientContext)
86-
.applyToAllUnaryMethods(retrySettingsSetter)
81+
.applyToAllUnaryMethods(retrySettingSetter(datastoreOptions))
8782
.build();
8883
datastoreStub = GrpcDatastoreStub.create(datastoreStubSettings);
8984
} catch (IOException e) {
@@ -202,18 +197,4 @@ private String getResourceToken(DatastoreOptions datastoreOptions) {
202197
}
203198
return builder.toString();
204199
}
205-
206-
// This class is needed solely to get access to protected method setInternalHeaderProvider()
207-
private static class DatastoreSettingsBuilder extends DatastoreSettings.Builder {
208-
209-
private DatastoreSettingsBuilder(DatastoreSettings settings) {
210-
super(settings);
211-
}
212-
213-
@Override
214-
protected DatastoreSettings.Builder setInternalHeaderProvider(
215-
HeaderProvider internalHeaderProvider) {
216-
return super.setInternalHeaderProvider(internalHeaderProvider);
217-
}
218-
}
219200
}

0 commit comments

Comments
 (0)