Skip to content

Commit e5396c0

Browse files
Fixed review comments
1 parent 5f377f8 commit e5396c0

8 files changed

Lines changed: 189 additions & 58 deletions

File tree

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

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -637,15 +637,6 @@ AggregationResults runAggregation(
637637
/** Returns true if this background resource has been shut down. */
638638
boolean isClosed();
639639

640-
/**
641-
* Returns a new Datastore client with the specified request tags added.
642-
*
643-
* @param requestTags the request tags to append to existing ones
644-
*/
645-
default Datastore withRequestTags(String... requestTags) {
646-
return withRequestTags(java.util.Arrays.asList(requestTags));
647-
}
648-
649640
/**
650641
* Returns a new Datastore client with the specified request tags added.
651642
*
@@ -655,6 +646,6 @@ default Datastore withRequestTags(List<String> requestTags) {
655646
ImmutableList.Builder<String> builder = ImmutableList.builder();
656647
builder.addAll(getOptions().getRequestTags());
657648
builder.addAll(requestTags);
658-
return getOptions().toBuilder().setTags(builder.build()).build().getService();
649+
return getOptions().toBuilder().setRequestTags(builder.build()).build().getService();
659650
}
660651
}

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -381,13 +381,14 @@ <T> QueryResults<T> run(
381381
Query<T> query,
382382
ExplainOptions explainOptions,
383383
RequestOptions requestOptions) {
384-
return new QueryResultsImpl<T>(
385-
this,
386-
readOptionsPb,
387-
(RecordQuery<T>) query,
388-
query.getNamespace(),
389-
explainOptions,
390-
requestOptions);
384+
return new QueryResultsImpl.Builder<T>()
385+
.setDatastore(this)
386+
.setReadOptionsPb(readOptionsPb)
387+
.setQuery((RecordQuery<T>) query)
388+
.setNamespace(query.getNamespace())
389+
.setExplainOptions(explainOptions)
390+
.setRequestOptions(requestOptions)
391+
.build();
391392
}
392393

393394
@Override

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

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,12 +256,26 @@ public Builder setDatabaseId(String databaseId) {
256256
return this;
257257
}
258258

259-
public Builder setTags(ImmutableList<String> requestTags) {
259+
/**
260+
* Sets the request tags to be associated with all requests sent by this client.
261+
*
262+
* @param requestTags the list of request tags to set
263+
* @return the builder object
264+
*/
265+
public Builder setRequestTags(ImmutableList<String> requestTags) {
266+
Preconditions.checkNotNull(requestTags, "Request tags cannot be null");
260267
this.requestTags = requestTags;
261268
return this;
262269
}
263270

264-
public Builder setTags(String... requestTags) {
271+
/**
272+
* Sets the request tags to be associated with all requests sent by this client.
273+
*
274+
* @param requestTags the request tags to set
275+
* @return the builder object
276+
*/
277+
public Builder setRequestTags(String... requestTags) {
278+
Preconditions.checkNotNull(requestTags, "Request tags cannot be null");
265279
this.requestTags = ImmutableList.copyOf(requestTags);
266280
return this;
267281
}
@@ -386,6 +400,11 @@ public String getDatabaseId() {
386400
return this.databaseId;
387401
}
388402

403+
/**
404+
* Returns the request tags to be associated with all requests sent by this client.
405+
*
406+
* @return the request tags
407+
*/
389408
public ImmutableList<String> getRequestTags() {
390409
return requestTags;
391410
}

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

Lines changed: 54 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -52,35 +52,18 @@ class QueryResultsImpl<T> extends AbstractIterator<T> implements QueryResults<T>
5252
private ExplainMetrics explainMetrics;
5353
private final RequestOptions requestOptions;
5454

55-
/** Creates a QueryResultsImpl. */
56-
QueryResultsImpl(
57-
DatastoreImpl datastore,
58-
Optional<ReadOptions> readOptionsPb,
59-
RecordQuery<T> query,
60-
String namespace,
61-
ExplainOptions explainOptions) {
62-
this(datastore, readOptionsPb, query, namespace, explainOptions, null);
63-
}
64-
65-
/** Creates a QueryResultsImpl with RequestOptions. */
66-
QueryResultsImpl(
67-
DatastoreImpl datastore,
68-
Optional<ReadOptions> readOptionsPb,
69-
RecordQuery<T> query,
70-
String namespace,
71-
ExplainOptions explainOptions,
72-
RequestOptions requestOptions) {
73-
this.datastore = datastore;
74-
this.readOptionsPb = readOptionsPb;
75-
this.query = query;
76-
queryResultType = query.getType();
77-
this.explainOptions = explainOptions;
78-
this.requestOptions = requestOptions;
55+
private QueryResultsImpl(Builder<T> builder) {
56+
this.datastore = builder.datastore;
57+
this.readOptionsPb = builder.readOptionsPb;
58+
this.query = builder.query;
59+
queryResultType = builder.query.getType();
60+
this.explainOptions = builder.explainOptions;
61+
this.requestOptions = builder.requestOptions;
7962
PartitionId.Builder pbBuilder = PartitionId.newBuilder();
8063
pbBuilder.setProjectId(datastore.getOptions().getProjectId());
8164
pbBuilder.setDatabaseId(datastore.getOptions().getDatabaseId());
82-
if (namespace != null) {
83-
pbBuilder.setNamespaceId(namespace);
65+
if (builder.namespace != null) {
66+
pbBuilder.setNamespaceId(builder.namespace);
8467
} else if (datastore.getOptions().getNamespace() != null) {
8568
pbBuilder.setNamespaceId(datastore.getOptions().getNamespace());
8669
}
@@ -93,6 +76,51 @@ class QueryResultsImpl<T> extends AbstractIterator<T> implements QueryResults<T>
9376
}
9477
}
9578

79+
static class Builder<T> {
80+
private DatastoreImpl datastore;
81+
private Optional<ReadOptions> readOptionsPb = Optional.empty();
82+
private RecordQuery<T> query;
83+
private String namespace;
84+
private ExplainOptions explainOptions;
85+
private RequestOptions requestOptions;
86+
87+
Builder<T> setDatastore(DatastoreImpl datastore) {
88+
this.datastore = datastore;
89+
return this;
90+
}
91+
92+
Builder<T> setReadOptionsPb(Optional<ReadOptions> readOptionsPb) {
93+
this.readOptionsPb = readOptionsPb;
94+
return this;
95+
}
96+
97+
Builder<T> setQuery(RecordQuery<T> query) {
98+
this.query = query;
99+
return this;
100+
}
101+
102+
Builder<T> setNamespace(String namespace) {
103+
this.namespace = namespace;
104+
return this;
105+
}
106+
107+
Builder<T> setExplainOptions(ExplainOptions explainOptions) {
108+
this.explainOptions = explainOptions;
109+
return this;
110+
}
111+
112+
Builder<T> setRequestOptions(RequestOptions requestOptions) {
113+
this.requestOptions = requestOptions;
114+
return this;
115+
}
116+
117+
QueryResultsImpl<T> build() {
118+
Preconditions.checkNotNull(datastore, "datastore cannot be null");
119+
Preconditions.checkNotNull(query, "query cannot be null");
120+
return new QueryResultsImpl<>(this);
121+
}
122+
}
123+
96124
private void sendRequest() {
97125
RunQueryRequest.Builder requestPb = RunQueryRequest.newBuilder();
98126
readOptionsPb.ifPresent(requestPb::setReadOptions);

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

Lines changed: 53 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.google.api.core.BetaApi;
2020
import com.google.api.core.InternalApi;
2121
import com.google.cloud.Timestamp;
22+
import com.google.common.base.Preconditions;
2223
import com.google.common.collect.ImmutableMap;
2324
import com.google.datastore.v1.ExplainOptions;
2425
import com.google.datastore.v1.RequestOptions;
@@ -152,14 +153,6 @@ public static class QueryConfig<Q extends Query<?>> {
152153
ExplainOptions explainOptions;
153154
RequestOptions requestOptions;
154155

155-
private QueryConfig(Q query, ExplainOptions explainOptions, List<ReadOption> readOptions) {
156-
this(query, explainOptions, readOptions, null);
157-
}
158-
159-
private QueryConfig(Q query, ExplainOptions explainOptions) {
160-
this(query, explainOptions, Collections.emptyList(), null);
161-
}
162-
163156
private QueryConfig(
164157
Q query,
165158
ExplainOptions explainOptions,
@@ -189,20 +182,69 @@ public RequestOptions getRequestOptions() {
189182

190183
public static <Q extends Query<?>> QueryConfig<Q> create(
191184
Q query, ExplainOptions explainOptions) {
192-
return new QueryConfig<>(query, explainOptions);
185+
return QueryConfig.<Q>newBuilder().setQuery(query).setExplainOptions(explainOptions).build();
193186
}
194187

195188
public static <Q extends Query<?>> QueryConfig<Q> create(
196189
Q query, ExplainOptions explainOptions, List<ReadOption> readOptions) {
197-
return new QueryConfig<>(query, explainOptions, readOptions);
190+
return QueryConfig.<Q>newBuilder()
191+
.setQuery(query)
192+
.setExplainOptions(explainOptions)
193+
.setReadOptions(readOptions)
194+
.build();
198195
}
199196

200197
public static <Q extends Query<?>> QueryConfig<Q> create(
201198
Q query,
202199
ExplainOptions explainOptions,
203200
List<ReadOption> readOptions,
204201
RequestOptions requestOptions) {
205-
return new QueryConfig<>(query, explainOptions, readOptions, requestOptions);
202+
return QueryConfig.<Q>newBuilder()
203+
.setQuery(query)
204+
.setExplainOptions(explainOptions)
205+
.setReadOptions(readOptions)
206+
.setRequestOptions(requestOptions)
207+
.build();
208+
}
209+
210+
/** Creates a new builder for {@link QueryConfig}. */
211+
public static <Q extends Query<?>> Builder<Q> newBuilder() {
212+
return new Builder<>();
213+
}
214+
215+
/** Builder for {@link QueryConfig}. */
216+
public static class Builder<Q extends Query<?>> {
217+
private Q query;
218+
private List<ReadOption> readOptions = Collections.emptyList();
219+
private ExplainOptions explainOptions;
220+
private RequestOptions requestOptions;
221+
222+
private Builder() {}
223+
224+
public Builder<Q> setQuery(Q query) {
225+
this.query = query;
226+
return this;
227+
}
228+
229+
public Builder<Q> setReadOptions(List<ReadOption> readOptions) {
230+
this.readOptions = readOptions;
231+
return this;
232+
}
233+
234+
public Builder<Q> setExplainOptions(ExplainOptions explainOptions) {
235+
this.explainOptions = explainOptions;
236+
return this;
237+
}
238+
239+
public Builder<Q> setRequestOptions(RequestOptions requestOptions) {
240+
this.requestOptions = requestOptions;
241+
return this;
242+
}
243+
244+
public QueryConfig<Q> build() {
245+
Preconditions.checkNotNull(query, "query cannot be null");
246+
return new QueryConfig<>(query, explainOptions, readOptions, requestOptions);
247+
}
206248
}
207249
}
208250
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616

1717
package com.google.cloud.datastore;
1818

19+
import com.google.api.core.InternalApi;
1920
import com.google.datastore.v1.RequestOptions;
2021

2122
/** Helper class for building and merging Datastore request options. */
23+
@InternalApi
2224
public final class RequestOptionsHelper {
2325

2426
private RequestOptionsHelper() {}

java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/AbstractDatastoreTest.java

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1402,7 +1402,7 @@ private Predicate<RunAggregationQueryRequest> aggregationQueryWithAlias(String a
14021402

14031403
@Test
14041404
public void testRunQueryWithInstanceLevelRequestTags() {
1405-
DatastoreOptions optionsWithTags = options.toBuilder().setTags("instance-tag").build();
1405+
DatastoreOptions optionsWithTags = options.toBuilder().setRequestTags("instance-tag").build();
14061406
Datastore datastoreWithTags = optionsWithTags.getService();
14071407

14081408
PartitionId partitionId =
@@ -1423,7 +1423,9 @@ public void testRunQueryWithInstanceLevelRequestTags() {
14231423
.setPartitionId(partitionId)
14241424
.setQuery(queryPb)
14251425
.setRequestOptions(
1426-
com.google.datastore.v1.RequestOptions.newBuilder().addRequestTags("instance-tag").build())
1426+
com.google.datastore.v1.RequestOptions.newBuilder()
1427+
.addRequestTags("instance-tag")
1428+
.build())
14271429
.build();
14281430

14291431
RunQueryResponse response =
@@ -1535,6 +1537,38 @@ public void testRunQueryWithRequestOptions() {
15351537
EasyMock.verify(rpcFactoryMock, rpcMock);
15361538
}
15371539

1540+
@Test
1541+
public void testRunAggregationQueryWithInstanceLevelRequestTags() {
1542+
DatastoreOptions optionsWithTags = options.toBuilder().setRequestTags("instance-tag").build();
1543+
Datastore datastoreWithTags = optionsWithTags.getService();
1544+
1545+
com.google.datastore.v1.RequestOptions requestOptions =
1546+
com.google.datastore.v1.RequestOptions.newBuilder().addRequestTags("test-tag").build();
1547+
1548+
RunAggregationQueryResponse aggregationQueryResponse = placeholderAggregationQueryResponse();
1549+
1550+
EasyMock.expect(
1551+
rpcMock.runAggregationQuery(
1552+
matches(
1553+
aggregationQueryWithAliasAndRequestOptions(
1554+
"total_count", requestOptions, false, false))))
1555+
.andReturn(aggregationQueryResponse);
1556+
1557+
EasyMock.replay(rpcFactoryMock, rpcMock);
1558+
1559+
EntityQuery selectAllQuery = Query.newEntityQueryBuilder().build();
1560+
AggregationQuery getCountQuery =
1561+
Query.newAggregationQueryBuilder()
1562+
.addAggregation(count().as("total_count"))
1563+
.over(selectAllQuery)
1564+
.build();
1565+
1566+
AggregationResult result = getOnlyElement(datastoreWithTags.runAggregation(getCountQuery));
1567+
assertThat(result.getLong("total_count")).isEqualTo(209L);
1568+
1569+
EasyMock.verify(rpcFactoryMock, rpcMock);
1570+
}
1571+
15381572
@Test
15391573
public void testRunAggregationQueryWithRequestOptions() {
15401574
com.google.datastore.v1.RequestOptions requestOptions =

java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,20 @@ public void testNamespace() {
204204
assertEquals("ns1", options.setNamespace("ns1").build().getNamespace());
205205
}
206206

207+
@Test
208+
public void testRequestTags() {
209+
assertTrue(options.build().getRequestTags().isEmpty());
210+
assertThat(options.setRequestTags("tag1", "tag2").build().getRequestTags())
211+
.containsExactly("tag1", "tag2")
212+
.inOrder();
213+
assertThat(
214+
options
215+
.setRequestTags(com.google.common.collect.ImmutableList.of("tag3"))
216+
.build()
217+
.getRequestTags())
218+
.containsExactly("tag3");
219+
}
220+
207221
@Test
208222
public void testDatastore() {
209223
assertSame(datastoreRpc, options.build().getRpc());

0 commit comments

Comments
 (0)