5757import com .google .common .util .concurrent .Uninterruptibles ;
5858import com .google .protobuf .Any ;
5959import com .google .protobuf .ByteString ;
60- import com .google .protobuf .Empty ;
6160import com .google .protobuf .FieldMask ;
6261import com .google .protobuf .InvalidProtocolBufferException ;
6362import com .google .protobuf .ListValue ;
6463import com .google .protobuf .Message ;
6564import com .google .protobuf .Value .KindCase ;
66- import com .google .spanner .admin .database .v1 .CreateDatabaseMetadata ;
67- import com .google .spanner .admin .database .v1 .UpdateDatabaseDdlMetadata ;
6865import com .google .spanner .admin .instance .v1 .CreateInstanceMetadata ;
6966import com .google .spanner .admin .instance .v1 .UpdateInstanceMetadata ;
7067import com .google .spanner .v1 .BeginTransactionRequest ;
10198import java .util .List ;
10299import java .util .Map ;
103100import java .util .Random ;
104- import java .util .UUID ;
105101import java .util .concurrent .BlockingQueue ;
106102import java .util .concurrent .Callable ;
107103import java .util .concurrent .CountDownLatch ;
@@ -411,7 +407,7 @@ private static <T extends Message> T unpack(Any response, Class<T> clazz)
411407 }
412408 }
413409
414- private abstract static class PageFetcher <S , T > implements NextPageFetcher <S > {
410+ abstract static class PageFetcher <S , T > implements NextPageFetcher <S > {
415411 private String nextPageToken ;
416412
417413 @ Override
@@ -432,159 +428,13 @@ public Paginated<T> call() {
432428 return new PageImpl <S >(this , nextPageToken , results );
433429 }
434430
435- abstract Paginated <T > getNextPage (@ Nullable String nextPageToken );
436-
437- abstract S fromProto (T proto );
438- }
439-
440- private static String randomOperationId () {
441- UUID uuid = UUID .randomUUID ();
442- return ("r" + uuid .toString ()).replace ("-" , "_" );
443- }
444-
445- static class DatabaseAdminClientImpl implements DatabaseAdminClient {
446-
447- private final String projectId ;
448- private final SpannerRpc rpc ;
449-
450- DatabaseAdminClientImpl (String projectId , SpannerRpc rpc ) {
451- this .projectId = projectId ;
452- this .rpc = rpc ;
431+ void setNextPageToken (String nextPageToken ) {
432+ this .nextPageToken = nextPageToken ;
453433 }
454434
455- @ Override
456- public OperationFuture <Database , CreateDatabaseMetadata > createDatabase (
457- String instanceId , String databaseId , Iterable <String > statements ) throws SpannerException {
458- // CreateDatabase() is not idempotent, so we're not retrying this request.
459- String instanceName = getInstanceName (instanceId );
460- String createStatement = "CREATE DATABASE `" + databaseId + "`" ;
461- OperationFuture <com .google .spanner .admin .database .v1 .Database , CreateDatabaseMetadata >
462- rawOperationFuture = rpc .createDatabase (instanceName , createStatement , statements );
463- return new OperationFutureImpl <Database , CreateDatabaseMetadata >(
464- rawOperationFuture .getPollingFuture (),
465- rawOperationFuture .getInitialFuture (),
466- new ApiFunction <OperationSnapshot , Database >() {
467- @ Override
468- public Database apply (OperationSnapshot snapshot ) {
469- return Database .fromProto (
470- ProtoOperationTransformers .ResponseTransformer .create (
471- com .google .spanner .admin .database .v1 .Database .class )
472- .apply (snapshot ),
473- DatabaseAdminClientImpl .this );
474- }
475- },
476- ProtoOperationTransformers .MetadataTransformer .create (CreateDatabaseMetadata .class ),
477- new ApiFunction <Exception , Database >() {
478- @ Override
479- public Database apply (Exception e ) {
480- throw SpannerExceptionFactory .newSpannerException (e );
481- }
482- });
483- }
484-
485- @ Override
486- public Database getDatabase (String instanceId , String databaseId ) throws SpannerException {
487- final String dbName = getDatabaseName (instanceId , databaseId );
488- Callable <Database > callable =
489- new Callable <Database >() {
490- @ Override
491- public Database call () throws Exception {
492- return Database .fromProto (rpc .getDatabase (dbName ), DatabaseAdminClientImpl .this );
493- }
494- };
495- return runWithRetries (callable );
496- }
497-
498- @ Override
499- public OperationFuture <Void , UpdateDatabaseDdlMetadata > updateDatabaseDdl (
500- final String instanceId ,
501- final String databaseId ,
502- final Iterable <String > statements ,
503- @ Nullable String operationId )
504- throws SpannerException {
505- final String dbName = getDatabaseName (instanceId , databaseId );
506- final String opId = operationId != null ? operationId : randomOperationId ();
507- OperationFuture <Empty , UpdateDatabaseDdlMetadata > rawOperationFuture =
508- rpc .updateDatabaseDdl (dbName , statements , opId );
509- return new OperationFutureImpl <Void , UpdateDatabaseDdlMetadata >(
510- rawOperationFuture .getPollingFuture (),
511- rawOperationFuture .getInitialFuture (),
512- new ApiFunction <OperationSnapshot , Void >() {
513- @ Override
514- public Void apply (OperationSnapshot snapshot ) {
515- ProtoOperationTransformers .ResponseTransformer .create (Empty .class ).apply (snapshot );
516- return null ;
517- }
518- },
519- ProtoOperationTransformers .MetadataTransformer .create (UpdateDatabaseDdlMetadata .class ),
520- new ApiFunction <Exception , Void >() {
521- @ Override
522- public Void apply (Exception e ) {
523- throw SpannerExceptionFactory .newSpannerException (e );
524- }
525- });
526- }
527-
528- @ Override
529- public void dropDatabase (String instanceId , String databaseId ) throws SpannerException {
530- final String dbName = getDatabaseName (instanceId , databaseId );
531- Callable <Void > callable =
532- new Callable <Void >() {
533- @ Override
534- public Void call () throws Exception {
535- rpc .dropDatabase (dbName );
536- return null ;
537- }
538- };
539- runWithRetries (callable );
540- }
541-
542- @ Override
543- public List <String > getDatabaseDdl (String instanceId , String databaseId ) {
544- final String dbName = getDatabaseName (instanceId , databaseId );
545- Callable <List <String >> callable =
546- new Callable <List <String >>() {
547- @ Override
548- public List <String > call () throws Exception {
549- return rpc .getDatabaseDdl (dbName );
550- }
551- };
552- return runWithRetries (callable );
553- }
554-
555- @ Override
556- public Page <Database > listDatabases (String instanceId , ListOption ... options ) {
557- final String instanceName = getInstanceName (instanceId );
558- final Options listOptions = Options .fromListOptions (options );
559- Preconditions .checkArgument (
560- !listOptions .hasFilter (), "Filter option is not support by" + "listDatabases" );
561- final int pageSize = listOptions .hasPageSize () ? listOptions .pageSize () : 0 ;
562- PageFetcher <Database , com .google .spanner .admin .database .v1 .Database > pageFetcher =
563- new PageFetcher <Database , com .google .spanner .admin .database .v1 .Database >() {
564- @ Override
565- public Paginated <com .google .spanner .admin .database .v1 .Database > getNextPage (
566- String nextPageToken ) {
567- return rpc .listDatabases (instanceName , pageSize , nextPageToken );
568- }
569-
570- @ Override
571- public Database fromProto (com .google .spanner .admin .database .v1 .Database proto ) {
572- return Database .fromProto (proto , DatabaseAdminClientImpl .this );
573- }
574- };
575- if (listOptions .hasPageToken ()) {
576- pageFetcher .nextPageToken = listOptions .pageToken ();
577- }
578- return pageFetcher .getNextPage ();
579- }
580-
581- private String getInstanceName (String instanceId ) {
582- return new InstanceId (projectId , instanceId ).getName ();
583- }
435+ abstract Paginated <T > getNextPage (@ Nullable String nextPageToken );
584436
585- private String getDatabaseName (String instanceId , String databaseId ) {
586- return new DatabaseId (new InstanceId (projectId , instanceId ), databaseId ).getName ();
587- }
437+ abstract S fromProto (T proto );
588438 }
589439
590440 static class InstanceAdminClientImpl implements InstanceAdminClient {
0 commit comments