Skip to content

Commit dc4864d

Browse files
olavloitekolea2
authored andcommitted
---
yaml --- r: 31465 b: refs/heads/autosynth-containeranalysis c: 5c16ac2 h: refs/heads/master i: 31463: d709400
1 parent 5255f94 commit dc4864d

4 files changed

Lines changed: 195 additions & 158 deletions

File tree

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ refs/heads/autosynth-bigquerydatatransfer: 71b6b6d2a992d05999b53e6e130c4fc1c8c8b
126126
refs/heads/autosynth-bigquerystorage: a345f72d7a6358e9fea9dcdae94ec85a27da3088
127127
refs/heads/autosynth-bigtable: 2a6af7e2959fd79c99b8ca5d773f29a6434b546d
128128
refs/heads/autosynth-bigtable-admin: 6379a2bc712f2736c83de0e009b4d26da4fa82ca
129-
refs/heads/autosynth-containeranalysis: abbf45dac41842adc813d5e2ae81ebb3118ae4bb
129+
refs/heads/autosynth-containeranalysis: 5c16ac2686ea2c4f2a79f103ac21eca47731d4a4
130130
refs/heads/autosynth-datastore: d0fc1187000c7a50d8bddd89c3b7cdf1187ecb96
131131
refs/heads/autosynth-dialogflow: 841930a680ebe370c9fc6ae824465f6bc51a5a46
132132
refs/heads/autosynth-errorreporting: 3f176c20b55dfaaa8fc32f28d82b31784b93e636
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
/*
2+
* Copyright 2019 Google LLC
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.spanner;
18+
19+
import com.google.api.core.ApiFunction;
20+
import com.google.api.gax.grpc.ProtoOperationTransformers;
21+
import com.google.api.gax.longrunning.OperationFuture;
22+
import com.google.api.gax.longrunning.OperationFutureImpl;
23+
import com.google.api.gax.longrunning.OperationSnapshot;
24+
import com.google.api.gax.paging.Page;
25+
import com.google.cloud.spanner.Options.ListOption;
26+
import com.google.cloud.spanner.SpannerImpl.PageFetcher;
27+
import com.google.cloud.spanner.spi.v1.SpannerRpc;
28+
import com.google.cloud.spanner.spi.v1.SpannerRpc.Paginated;
29+
import com.google.common.base.Preconditions;
30+
import com.google.protobuf.Empty;
31+
import com.google.spanner.admin.database.v1.CreateDatabaseMetadata;
32+
import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata;
33+
import java.util.List;
34+
import java.util.UUID;
35+
import java.util.concurrent.Callable;
36+
import javax.annotation.Nullable;
37+
38+
/** Default implementation of {@link DatabaseAdminClient}. */
39+
class DatabaseAdminClientImpl implements DatabaseAdminClient {
40+
private final String projectId;
41+
private final SpannerRpc rpc;
42+
43+
DatabaseAdminClientImpl(String projectId, SpannerRpc rpc) {
44+
this.projectId = projectId;
45+
this.rpc = rpc;
46+
}
47+
48+
/** Generates a random operation id for long-running database operations. */
49+
private static String randomOperationId() {
50+
UUID uuid = UUID.randomUUID();
51+
return ("r" + uuid.toString()).replace("-", "_");
52+
}
53+
54+
@Override
55+
public OperationFuture<Database, CreateDatabaseMetadata> createDatabase(
56+
String instanceId, String databaseId, Iterable<String> statements) throws SpannerException {
57+
// CreateDatabase() is not idempotent, so we're not retrying this request.
58+
String instanceName = getInstanceName(instanceId);
59+
String createStatement = "CREATE DATABASE `" + databaseId + "`";
60+
OperationFuture<com.google.spanner.admin.database.v1.Database, CreateDatabaseMetadata>
61+
rawOperationFuture = rpc.createDatabase(instanceName, createStatement, statements);
62+
return new OperationFutureImpl<Database, CreateDatabaseMetadata>(
63+
rawOperationFuture.getPollingFuture(),
64+
rawOperationFuture.getInitialFuture(),
65+
new ApiFunction<OperationSnapshot, Database>() {
66+
@Override
67+
public Database apply(OperationSnapshot snapshot) {
68+
return Database.fromProto(
69+
ProtoOperationTransformers.ResponseTransformer.create(
70+
com.google.spanner.admin.database.v1.Database.class)
71+
.apply(snapshot),
72+
DatabaseAdminClientImpl.this);
73+
}
74+
},
75+
ProtoOperationTransformers.MetadataTransformer.create(CreateDatabaseMetadata.class),
76+
new ApiFunction<Exception, Database>() {
77+
@Override
78+
public Database apply(Exception e) {
79+
throw SpannerExceptionFactory.newSpannerException(e);
80+
}
81+
});
82+
}
83+
84+
@Override
85+
public Database getDatabase(String instanceId, String databaseId) throws SpannerException {
86+
final String dbName = getDatabaseName(instanceId, databaseId);
87+
Callable<Database> callable =
88+
new Callable<Database>() {
89+
@Override
90+
public Database call() throws Exception {
91+
return Database.fromProto(rpc.getDatabase(dbName), DatabaseAdminClientImpl.this);
92+
}
93+
};
94+
return SpannerImpl.runWithRetries(callable);
95+
}
96+
97+
@Override
98+
public OperationFuture<Void, UpdateDatabaseDdlMetadata> updateDatabaseDdl(
99+
final String instanceId,
100+
final String databaseId,
101+
final Iterable<String> statements,
102+
@Nullable String operationId)
103+
throws SpannerException {
104+
final String dbName = getDatabaseName(instanceId, databaseId);
105+
final String opId = operationId != null ? operationId : randomOperationId();
106+
OperationFuture<Empty, UpdateDatabaseDdlMetadata> rawOperationFuture =
107+
rpc.updateDatabaseDdl(dbName, statements, opId);
108+
return new OperationFutureImpl<Void, UpdateDatabaseDdlMetadata>(
109+
rawOperationFuture.getPollingFuture(),
110+
rawOperationFuture.getInitialFuture(),
111+
new ApiFunction<OperationSnapshot, Void>() {
112+
@Override
113+
public Void apply(OperationSnapshot snapshot) {
114+
ProtoOperationTransformers.ResponseTransformer.create(Empty.class).apply(snapshot);
115+
return null;
116+
}
117+
},
118+
ProtoOperationTransformers.MetadataTransformer.create(UpdateDatabaseDdlMetadata.class),
119+
new ApiFunction<Exception, Void>() {
120+
@Override
121+
public Void apply(Exception e) {
122+
throw SpannerExceptionFactory.newSpannerException(e);
123+
}
124+
});
125+
}
126+
127+
@Override
128+
public void dropDatabase(String instanceId, String databaseId) throws SpannerException {
129+
final String dbName = getDatabaseName(instanceId, databaseId);
130+
Callable<Void> callable =
131+
new Callable<Void>() {
132+
@Override
133+
public Void call() throws Exception {
134+
rpc.dropDatabase(dbName);
135+
return null;
136+
}
137+
};
138+
SpannerImpl.runWithRetries(callable);
139+
}
140+
141+
@Override
142+
public List<String> getDatabaseDdl(String instanceId, String databaseId) {
143+
final String dbName = getDatabaseName(instanceId, databaseId);
144+
Callable<List<String>> callable =
145+
new Callable<List<String>>() {
146+
@Override
147+
public List<String> call() throws Exception {
148+
return rpc.getDatabaseDdl(dbName);
149+
}
150+
};
151+
return SpannerImpl.runWithRetries(callable);
152+
}
153+
154+
@Override
155+
public Page<Database> listDatabases(String instanceId, ListOption... options) {
156+
final String instanceName = getInstanceName(instanceId);
157+
final Options listOptions = Options.fromListOptions(options);
158+
Preconditions.checkArgument(
159+
!listOptions.hasFilter(), "Filter option is not support by" + "listDatabases");
160+
final int pageSize = listOptions.hasPageSize() ? listOptions.pageSize() : 0;
161+
PageFetcher<Database, com.google.spanner.admin.database.v1.Database> pageFetcher =
162+
new PageFetcher<Database, com.google.spanner.admin.database.v1.Database>() {
163+
@Override
164+
public Paginated<com.google.spanner.admin.database.v1.Database> getNextPage(
165+
String nextPageToken) {
166+
return rpc.listDatabases(instanceName, pageSize, nextPageToken);
167+
}
168+
169+
@Override
170+
public Database fromProto(com.google.spanner.admin.database.v1.Database proto) {
171+
return Database.fromProto(proto, DatabaseAdminClientImpl.this);
172+
}
173+
};
174+
if (listOptions.hasPageToken()) {
175+
pageFetcher.setNextPageToken(listOptions.pageToken());
176+
}
177+
return pageFetcher.getNextPage();
178+
}
179+
180+
private String getInstanceName(String instanceId) {
181+
return new InstanceId(projectId, instanceId).getName();
182+
}
183+
184+
private String getDatabaseName(String instanceId, String databaseId) {
185+
return new DatabaseId(new InstanceId(projectId, instanceId), databaseId).getName();
186+
}
187+
}

branches/autosynth-containeranalysis/google-cloud-clients/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java

Lines changed: 5 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,9 @@
5252
import com.google.common.util.concurrent.ListenableFuture;
5353
import com.google.protobuf.Any;
5454
import com.google.protobuf.ByteString;
55-
import com.google.protobuf.Empty;
5655
import com.google.protobuf.FieldMask;
5756
import com.google.protobuf.InvalidProtocolBufferException;
5857
import com.google.protobuf.Message;
59-
import com.google.spanner.admin.database.v1.CreateDatabaseMetadata;
60-
import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata;
6158
import com.google.spanner.admin.instance.v1.CreateInstanceMetadata;
6259
import com.google.spanner.admin.instance.v1.UpdateInstanceMetadata;
6360
import com.google.spanner.v1.BeginTransactionRequest;
@@ -84,7 +81,6 @@
8481
import java.util.List;
8582
import java.util.Map;
8683
import java.util.Random;
87-
import java.util.UUID;
8884
import java.util.concurrent.Callable;
8985
import java.util.concurrent.CountDownLatch;
9086
import java.util.concurrent.ExecutionException;
@@ -391,7 +387,7 @@ private static <T extends Message> T unpack(Any response, Class<T> clazz)
391387
}
392388
}
393389

394-
private abstract static class PageFetcher<S, T> implements NextPageFetcher<S> {
390+
abstract static class PageFetcher<S, T> implements NextPageFetcher<S> {
395391
private String nextPageToken;
396392

397393
@Override
@@ -412,159 +408,13 @@ public Paginated<T> call() {
412408
return new PageImpl<S>(this, nextPageToken, results);
413409
}
414410

415-
abstract Paginated<T> getNextPage(@Nullable String nextPageToken);
416-
417-
abstract S fromProto(T proto);
418-
}
419-
420-
private static String randomOperationId() {
421-
UUID uuid = UUID.randomUUID();
422-
return ("r" + uuid.toString()).replace("-", "_");
423-
}
424-
425-
static class DatabaseAdminClientImpl implements DatabaseAdminClient {
426-
427-
private final String projectId;
428-
private final SpannerRpc rpc;
429-
430-
DatabaseAdminClientImpl(String projectId, SpannerRpc rpc) {
431-
this.projectId = projectId;
432-
this.rpc = rpc;
411+
void setNextPageToken(String nextPageToken) {
412+
this.nextPageToken = nextPageToken;
433413
}
434414

435-
@Override
436-
public OperationFuture<Database, CreateDatabaseMetadata> createDatabase(
437-
String instanceId, String databaseId, Iterable<String> statements) throws SpannerException {
438-
// CreateDatabase() is not idempotent, so we're not retrying this request.
439-
String instanceName = getInstanceName(instanceId);
440-
String createStatement = "CREATE DATABASE `" + databaseId + "`";
441-
OperationFuture<com.google.spanner.admin.database.v1.Database, CreateDatabaseMetadata>
442-
rawOperationFuture = rpc.createDatabase(instanceName, createStatement, statements);
443-
return new OperationFutureImpl<Database, CreateDatabaseMetadata>(
444-
rawOperationFuture.getPollingFuture(),
445-
rawOperationFuture.getInitialFuture(),
446-
new ApiFunction<OperationSnapshot, Database>() {
447-
@Override
448-
public Database apply(OperationSnapshot snapshot) {
449-
return Database.fromProto(
450-
ProtoOperationTransformers.ResponseTransformer.create(
451-
com.google.spanner.admin.database.v1.Database.class)
452-
.apply(snapshot),
453-
DatabaseAdminClientImpl.this);
454-
}
455-
},
456-
ProtoOperationTransformers.MetadataTransformer.create(CreateDatabaseMetadata.class),
457-
new ApiFunction<Exception, Database>() {
458-
@Override
459-
public Database apply(Exception e) {
460-
throw SpannerExceptionFactory.newSpannerException(e);
461-
}
462-
});
463-
}
464-
465-
@Override
466-
public Database getDatabase(String instanceId, String databaseId) throws SpannerException {
467-
final String dbName = getDatabaseName(instanceId, databaseId);
468-
Callable<Database> callable =
469-
new Callable<Database>() {
470-
@Override
471-
public Database call() throws Exception {
472-
return Database.fromProto(rpc.getDatabase(dbName), DatabaseAdminClientImpl.this);
473-
}
474-
};
475-
return runWithRetries(callable);
476-
}
477-
478-
@Override
479-
public OperationFuture<Void, UpdateDatabaseDdlMetadata> updateDatabaseDdl(
480-
final String instanceId,
481-
final String databaseId,
482-
final Iterable<String> statements,
483-
@Nullable String operationId)
484-
throws SpannerException {
485-
final String dbName = getDatabaseName(instanceId, databaseId);
486-
final String opId = operationId != null ? operationId : randomOperationId();
487-
OperationFuture<Empty, UpdateDatabaseDdlMetadata> rawOperationFuture =
488-
rpc.updateDatabaseDdl(dbName, statements, opId);
489-
return new OperationFutureImpl<Void, UpdateDatabaseDdlMetadata>(
490-
rawOperationFuture.getPollingFuture(),
491-
rawOperationFuture.getInitialFuture(),
492-
new ApiFunction<OperationSnapshot, Void>() {
493-
@Override
494-
public Void apply(OperationSnapshot snapshot) {
495-
ProtoOperationTransformers.ResponseTransformer.create(Empty.class).apply(snapshot);
496-
return null;
497-
}
498-
},
499-
ProtoOperationTransformers.MetadataTransformer.create(UpdateDatabaseDdlMetadata.class),
500-
new ApiFunction<Exception, Void>() {
501-
@Override
502-
public Void apply(Exception e) {
503-
throw SpannerExceptionFactory.newSpannerException(e);
504-
}
505-
});
506-
}
507-
508-
@Override
509-
public void dropDatabase(String instanceId, String databaseId) throws SpannerException {
510-
final String dbName = getDatabaseName(instanceId, databaseId);
511-
Callable<Void> callable =
512-
new Callable<Void>() {
513-
@Override
514-
public Void call() throws Exception {
515-
rpc.dropDatabase(dbName);
516-
return null;
517-
}
518-
};
519-
runWithRetries(callable);
520-
}
521-
522-
@Override
523-
public List<String> getDatabaseDdl(String instanceId, String databaseId) {
524-
final String dbName = getDatabaseName(instanceId, databaseId);
525-
Callable<List<String>> callable =
526-
new Callable<List<String>>() {
527-
@Override
528-
public List<String> call() throws Exception {
529-
return rpc.getDatabaseDdl(dbName);
530-
}
531-
};
532-
return runWithRetries(callable);
533-
}
534-
535-
@Override
536-
public Page<Database> listDatabases(String instanceId, ListOption... options) {
537-
final String instanceName = getInstanceName(instanceId);
538-
final Options listOptions = Options.fromListOptions(options);
539-
Preconditions.checkArgument(
540-
!listOptions.hasFilter(), "Filter option is not support by" + "listDatabases");
541-
final int pageSize = listOptions.hasPageSize() ? listOptions.pageSize() : 0;
542-
PageFetcher<Database, com.google.spanner.admin.database.v1.Database> pageFetcher =
543-
new PageFetcher<Database, com.google.spanner.admin.database.v1.Database>() {
544-
@Override
545-
public Paginated<com.google.spanner.admin.database.v1.Database> getNextPage(
546-
String nextPageToken) {
547-
return rpc.listDatabases(instanceName, pageSize, nextPageToken);
548-
}
549-
550-
@Override
551-
public Database fromProto(com.google.spanner.admin.database.v1.Database proto) {
552-
return Database.fromProto(proto, DatabaseAdminClientImpl.this);
553-
}
554-
};
555-
if (listOptions.hasPageToken()) {
556-
pageFetcher.nextPageToken = listOptions.pageToken();
557-
}
558-
return pageFetcher.getNextPage();
559-
}
560-
561-
private String getInstanceName(String instanceId) {
562-
return new InstanceId(projectId, instanceId).getName();
563-
}
415+
abstract Paginated<T> getNextPage(@Nullable String nextPageToken);
564416

565-
private String getDatabaseName(String instanceId, String databaseId) {
566-
return new DatabaseId(new InstanceId(projectId, instanceId), databaseId).getName();
567-
}
417+
abstract S fromProto(T proto);
568418
}
569419

570420
static class InstanceAdminClientImpl implements InstanceAdminClient {

0 commit comments

Comments
 (0)