From 21cfc83aefeb1784a84fc20a797b73f466c209fc Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Fri, 13 Oct 2023 13:13:35 +0000 Subject: [PATCH 01/15] feat(spanner): add executor code --- .../executor/cloud_client_executor.go | 14 ++ .../executor/cloud_executor_impl.go | 29 ++++ spanner/cloudexecutor/worker_proxy.go | 137 ++++++++++++++++++ 3 files changed, 180 insertions(+) create mode 100644 spanner/cloudexecutor/executor/cloud_client_executor.go create mode 100644 spanner/cloudexecutor/executor/cloud_executor_impl.go create mode 100644 spanner/cloudexecutor/worker_proxy.go diff --git a/spanner/cloudexecutor/executor/cloud_client_executor.go b/spanner/cloudexecutor/executor/cloud_client_executor.go new file mode 100644 index 000000000000..849af368ec8f --- /dev/null +++ b/spanner/cloudexecutor/executor/cloud_client_executor.go @@ -0,0 +1,14 @@ +package executor + +import ( + executorpb "cloud.google.com/go/spanner/cloudexecutor/proto" +) + +type cloudStreamHandler struct { + cloudProxyServer *CloudProxyServer + stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer +} + +func (h *cloudStreamHandler) execute() error { + return nil +} diff --git a/spanner/cloudexecutor/executor/cloud_executor_impl.go b/spanner/cloudexecutor/executor/cloud_executor_impl.go new file mode 100644 index 000000000000..8070c38f7ef9 --- /dev/null +++ b/spanner/cloudexecutor/executor/cloud_executor_impl.go @@ -0,0 +1,29 @@ +package executor + +import ( + "context" + + executorpb "cloud.google.com/go/spanner/cloudexecutor/proto" + "google.golang.org/api/option" +) + +// CloudProxyServer holds the cloud executor server. +type CloudProxyServer struct { + serverContext context.Context + options []option.ClientOption +} + +// NewCloudProxyServer initializes and returns a new CloudProxyServer instance. +func NewCloudProxyServer(ctx context.Context, opts []option.ClientOption) (*CloudProxyServer, error) { + return &CloudProxyServer{serverContext: ctx, options: opts}, nil +} + +// ExecuteActionAsync is implementation of ExecuteActionAsync in SpannerExecutorProxyServer. It's a +// streaming method in which client and server exchange SpannerActions and SpannerActionOutcomes. +func (s *CloudProxyServer) ExecuteActionAsync(stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer) error { + handler := &cloudStreamHandler{ + cloudProxyServer: s, + stream: stream, + } + return handler.execute() +} diff --git a/spanner/cloudexecutor/worker_proxy.go b/spanner/cloudexecutor/worker_proxy.go new file mode 100644 index 000000000000..0849c9c63531 --- /dev/null +++ b/spanner/cloudexecutor/worker_proxy.go @@ -0,0 +1,137 @@ +package main + +import ( + "context" + "flag" + "fmt" + "log" + "net" + "os" + + "cloud.google.com/go/spanner/cloudexecutor/executor" + executorpb "cloud.google.com/go/spanner/cloudexecutor/proto" + "golang.org/x/oauth2" + "golang.org/x/oauth2/google" + "google.golang.org/api/option" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/health" + "google.golang.org/grpc/health/grpc_health_v1" +) + +var ( + proxyPort = flag.String("proxy_port", "", "Proxy port to start worker proxy on.") + spannerPort = flag.String("spanner_port", "", "Port of Spanner Frontend to which to send requests.") + cert = flag.String("cert", "", "Certificate used to connect to Spanner GFE.") + serviceKeyFile = flag.String("service_key_file", "", "Service key file used to set authentication.") +) + +func main() { + if d := os.Getenv("TEST_UNDECLARED_OUTPUTS_DIR"); d != "" { + os.Args = append(os.Args, "--log_dir="+d) + } + + flag.Parse() + if *proxyPort == "" { + log.Fatal("Proxy port need to be assigned in order to start worker proxy.") + } + if *spannerPort == "" { + log.Fatal("Spanner proxyPort need to be assigned in order to start worker proxy.") + } + if *cert == "" { + log.Fatalf("Certificate need to be assigned in order to start worker proxy.") + } + + lis, err := net.Listen("tcp", fmt.Sprintf(":%s", *proxyPort)) + if err != nil { + log.Fatal(err) + } + + // Create a new gRPC server + grpcServer := grpc.NewServer() + + clientOptions := getClientOptionsForSysTests() + // Create a new cloud proxy server + cloudProxyServer, err := executor.NewCloudProxyServer(context.Background(), clientOptions) + if err != nil { + log.Fatalf("Creating Cloud Proxy Server failed: %v", err) + } + // Register cloudProxyServer service on the grpcServer + executorpb.RegisterSpannerExecutorProxyServer(grpcServer, cloudProxyServer) + + // Create a new service health server + healthServer := health.NewServer() + // Register healthServer service on the grpcServer + grpc_health_v1.RegisterHealthServer(grpcServer, healthServer) + + log.Printf("Server started on proxyPort:%s\n", *proxyPort) + err = grpcServer.Serve(lis) + if err != nil { + log.Printf("Failed to start server on proxyPort: %s\n", *proxyPort) + } +} + +// Constructs client options needed to run executor for systests +func getClientOptionsForSysTests() []option.ClientOption { + var options []option.ClientOption + + endpoint := "127.0.0.1:" + *spannerPort + log.Printf("endpoint for grpc dial: %s", endpoint) + options = append(options, option.WithEndpoint(endpoint)) + + creds, err := credentials.NewClientTLSFromFile(*cert, "test-cert-2") + if err != nil { + log.Println(err) + } + options = append(options, option.WithGRPCDialOption(grpc.WithTransportCredentials(creds))) + + const ( + spannerAdminScope = "https://www.googleapis.com/auth/spanner.admin" + spannerDataScope = "https://www.googleapis.com/auth/spanner.data" + ) + + log.Println("Reading service key file in executor code") + cloudSystestCredentialsJson, err := os.ReadFile(*serviceKeyFile) + if err != nil { + log.Fatal(err) + } + config, err := google.JWTConfigFromJSON([]byte(cloudSystestCredentialsJson), spannerAdminScope, spannerDataScope) + if err != nil { + log.Println(err) + } + options = append(options, option.WithTokenSource(config.TokenSource(context.Background()))) + options = append(options, option.WithCredentialsFile(*serviceKeyFile)) + + return options +} + +type fakeTokenSource struct{} + +func (f *fakeTokenSource) Token() (*oauth2.Token, error) { + return &oauth2.Token{AccessToken: "fake token for test"}, nil +} + +// Constructs client options needed to run executor for unit tests +func getClientOptionsForUnitTests() []option.ClientOption { + var options []option.ClientOption + + endpoint := "127.0.0.1:" + *spannerPort + log.Printf("endpoint for grpc dial: %s", endpoint) + + options = append(options, option.WithEndpoint(endpoint)) + creds, err := credentials.NewClientTLSFromFile(*cert, "test-cert-2") + if err != nil { + log.Println(err) + } + + options = append(options, option.WithGRPCDialOption(grpc.WithTransportCredentials(creds))) + options = append(options, option.WithTokenSource(&fakeTokenSource{})) + + return options +} + +// Constructs client options needed to run executor on local machine +func getClientOptionsForLocalTest() []option.ClientOption { + var options []option.ClientOption + return options +} From 036ee33822d81b5db08232a0730c75800edd9552 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Fri, 13 Oct 2023 13:21:14 +0000 Subject: [PATCH 02/15] feat(spanner): add license headers --- .../executor/cloud_client_executor.go | 14 ++++++++++++++ .../cloudexecutor/executor/cloud_executor_impl.go | 14 ++++++++++++++ spanner/cloudexecutor/worker_proxy.go | 14 ++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/spanner/cloudexecutor/executor/cloud_client_executor.go b/spanner/cloudexecutor/executor/cloud_client_executor.go index 849af368ec8f..31f2b79acf2e 100644 --- a/spanner/cloudexecutor/executor/cloud_client_executor.go +++ b/spanner/cloudexecutor/executor/cloud_client_executor.go @@ -1,3 +1,17 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package executor import ( diff --git a/spanner/cloudexecutor/executor/cloud_executor_impl.go b/spanner/cloudexecutor/executor/cloud_executor_impl.go index 8070c38f7ef9..1ae28e3e9ee5 100644 --- a/spanner/cloudexecutor/executor/cloud_executor_impl.go +++ b/spanner/cloudexecutor/executor/cloud_executor_impl.go @@ -1,3 +1,17 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package executor import ( diff --git a/spanner/cloudexecutor/worker_proxy.go b/spanner/cloudexecutor/worker_proxy.go index 0849c9c63531..b94dea196e96 100644 --- a/spanner/cloudexecutor/worker_proxy.go +++ b/spanner/cloudexecutor/worker_proxy.go @@ -1,3 +1,17 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package main import ( From 1750cdc04754fef58e2cd0514eae3fbe2e9df6c4 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Fri, 13 Oct 2023 13:25:08 +0000 Subject: [PATCH 03/15] feat(spanner): add proto and autogenerated code --- spanner/cloudexecutor/proto/README.md | 7 + .../cloudexecutor/proto/cloud_executor.pb.go | 9431 +++++++++++++++++ .../cloudexecutor/proto/cloud_executor.proto | 1455 +++ 3 files changed, 10893 insertions(+) create mode 100644 spanner/cloudexecutor/proto/README.md create mode 100644 spanner/cloudexecutor/proto/cloud_executor.pb.go create mode 100644 spanner/cloudexecutor/proto/cloud_executor.proto diff --git a/spanner/cloudexecutor/proto/README.md b/spanner/cloudexecutor/proto/README.md new file mode 100644 index 000000000000..da91020296f5 --- /dev/null +++ b/spanner/cloudexecutor/proto/README.md @@ -0,0 +1,7 @@ +# Regenerating protos + +Cloud Spanner Executor Framework - To generate code manually for cloud_executor.proto file using protoc, run the command below. +``` +cd spanner/cloudexecutor/proto +protoc --go_out=plugins=grpc:. -I= -I=./ cloud_executor.proto +``` \ No newline at end of file diff --git a/spanner/cloudexecutor/proto/cloud_executor.pb.go b/spanner/cloudexecutor/proto/cloud_executor.pb.go new file mode 100644 index 000000000000..944ca58b30a4 --- /dev/null +++ b/spanner/cloudexecutor/proto/cloud_executor.pb.go @@ -0,0 +1,9431 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.21.12 +// source: cloud_executor.proto + +package executorpb + +import ( + longrunningpb "cloud.google.com/go/longrunning/autogen/longrunningpb" + databasepb "cloud.google.com/go/spanner/admin/database/apiv1/databasepb" + instancepb "cloud.google.com/go/spanner/admin/instance/apiv1/instancepb" + spannerpb "cloud.google.com/go/spanner/apiv1/spannerpb" + context "context" + _ "google.golang.org/genproto/googleapis/api/annotations" + status "google.golang.org/genproto/googleapis/rpc/status" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status1 "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Type controls whether "start" and "limit" are open or closed. By default, +// "start" is closed, and "limit" is open. +type KeyRange_Type int32 + +const ( + // "TYPE_UNSPECIFIED" is equivalent to "CLOSED_OPEN". + KeyRange_TYPE_UNSPECIFIED KeyRange_Type = 0 + // [start,limit] + KeyRange_CLOSED_CLOSED KeyRange_Type = 1 + // [start,limit) + KeyRange_CLOSED_OPEN KeyRange_Type = 2 + // (start,limit] + KeyRange_OPEN_CLOSED KeyRange_Type = 3 + // (start,limit) + KeyRange_OPEN_OPEN KeyRange_Type = 4 +) + +// Enum value maps for KeyRange_Type. +var ( + KeyRange_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "CLOSED_CLOSED", + 2: "CLOSED_OPEN", + 3: "OPEN_CLOSED", + 4: "OPEN_OPEN", + } + KeyRange_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "CLOSED_CLOSED": 1, + "CLOSED_OPEN": 2, + "OPEN_CLOSED": 3, + "OPEN_OPEN": 4, + } +) + +func (x KeyRange_Type) Enum() *KeyRange_Type { + p := new(KeyRange_Type) + *p = x + return p +} + +func (x KeyRange_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (KeyRange_Type) Descriptor() protoreflect.EnumDescriptor { + return file_cloud_executor_proto_enumTypes[0].Descriptor() +} + +func (KeyRange_Type) Type() protoreflect.EnumType { + return &file_cloud_executor_proto_enumTypes[0] +} + +func (x KeyRange_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use KeyRange_Type.Descriptor instead. +func (KeyRange_Type) EnumDescriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{8, 0} +} + +// Mode indicates how the transaction should be finished. +type FinishTransactionAction_Mode int32 + +const ( + // "MODE_UNSPECIFIED" is equivalent to "COMMIT". + FinishTransactionAction_MODE_UNSPECIFIED FinishTransactionAction_Mode = 0 + // Commit the transaction. + FinishTransactionAction_COMMIT FinishTransactionAction_Mode = 1 + // Drop the transaction without committing it. + FinishTransactionAction_ABANDON FinishTransactionAction_Mode = 2 +) + +// Enum value maps for FinishTransactionAction_Mode. +var ( + FinishTransactionAction_Mode_name = map[int32]string{ + 0: "MODE_UNSPECIFIED", + 1: "COMMIT", + 2: "ABANDON", + } + FinishTransactionAction_Mode_value = map[string]int32{ + "MODE_UNSPECIFIED": 0, + "COMMIT": 1, + "ABANDON": 2, + } +) + +func (x FinishTransactionAction_Mode) Enum() *FinishTransactionAction_Mode { + p := new(FinishTransactionAction_Mode) + *p = x + return p +} + +func (x FinishTransactionAction_Mode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FinishTransactionAction_Mode) Descriptor() protoreflect.EnumDescriptor { + return file_cloud_executor_proto_enumTypes[1].Descriptor() +} + +func (FinishTransactionAction_Mode) Type() protoreflect.EnumType { + return &file_cloud_executor_proto_enumTypes[1] +} + +func (x FinishTransactionAction_Mode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use FinishTransactionAction_Mode.Descriptor instead. +func (FinishTransactionAction_Mode) EnumDescriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{19, 0} +} + +// Request to executor service that start a new Spanner action. +type SpannerAsyncActionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Action id to uniquely identify this action request. + ActionId int32 `protobuf:"varint,1,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"` + // The actual SpannerAction to perform. + Action *SpannerAction `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` +} + +func (x *SpannerAsyncActionRequest) Reset() { + *x = SpannerAsyncActionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SpannerAsyncActionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SpannerAsyncActionRequest) ProtoMessage() {} + +func (x *SpannerAsyncActionRequest) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SpannerAsyncActionRequest.ProtoReflect.Descriptor instead. +func (*SpannerAsyncActionRequest) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{0} +} + +func (x *SpannerAsyncActionRequest) GetActionId() int32 { + if x != nil { + return x.ActionId + } + return 0 +} + +func (x *SpannerAsyncActionRequest) GetAction() *SpannerAction { + if x != nil { + return x.Action + } + return nil +} + +// Response from executor service. +type SpannerAsyncActionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Action id corresponds to the request. + ActionId int32 `protobuf:"varint,1,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"` + // If action results are split into multiple responses, only the last response + // can and should contain status. + Outcome *SpannerActionOutcome `protobuf:"bytes,2,opt,name=outcome,proto3" json:"outcome,omitempty"` +} + +func (x *SpannerAsyncActionResponse) Reset() { + *x = SpannerAsyncActionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SpannerAsyncActionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SpannerAsyncActionResponse) ProtoMessage() {} + +func (x *SpannerAsyncActionResponse) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SpannerAsyncActionResponse.ProtoReflect.Descriptor instead. +func (*SpannerAsyncActionResponse) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{1} +} + +func (x *SpannerAsyncActionResponse) GetActionId() int32 { + if x != nil { + return x.ActionId + } + return 0 +} + +func (x *SpannerAsyncActionResponse) GetOutcome() *SpannerActionOutcome { + if x != nil { + return x.Outcome + } + return nil +} + +// SpannerAction defines a primitive action that can be performed against +// Spanner, such as begin or commit a transaction, or perform a read or +// mutation. +type SpannerAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Database against which to perform action. + // In a context where a series of actions take place, an action may omit + // database path if it applies to the same database as the previous action. + DatabasePath string `protobuf:"bytes,1,opt,name=database_path,json=databasePath,proto3" json:"database_path,omitempty"` + // Action represents a spanner action kind, there will only be one action kind + // per SpannerAction. + // + // Types that are assignable to Action: + // + // *SpannerAction_Start + // *SpannerAction_Finish + // *SpannerAction_Read + // *SpannerAction_Query + // *SpannerAction_Mutation + // *SpannerAction_Dml + // *SpannerAction_BatchDml + // *SpannerAction_Write + // *SpannerAction_PartitionedUpdate + // *SpannerAction_Admin + // *SpannerAction_StartBatchTxn + // *SpannerAction_CloseBatchTxn + // *SpannerAction_GenerateDbPartitionsRead + // *SpannerAction_GenerateDbPartitionsQuery + // *SpannerAction_ExecutePartition + // *SpannerAction_ExecuteChangeStreamQuery + Action isSpannerAction_Action `protobuf_oneof:"action"` +} + +func (x *SpannerAction) Reset() { + *x = SpannerAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SpannerAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SpannerAction) ProtoMessage() {} + +func (x *SpannerAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SpannerAction.ProtoReflect.Descriptor instead. +func (*SpannerAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{2} +} + +func (x *SpannerAction) GetDatabasePath() string { + if x != nil { + return x.DatabasePath + } + return "" +} + +func (m *SpannerAction) GetAction() isSpannerAction_Action { + if m != nil { + return m.Action + } + return nil +} + +func (x *SpannerAction) GetStart() *StartTransactionAction { + if x, ok := x.GetAction().(*SpannerAction_Start); ok { + return x.Start + } + return nil +} + +func (x *SpannerAction) GetFinish() *FinishTransactionAction { + if x, ok := x.GetAction().(*SpannerAction_Finish); ok { + return x.Finish + } + return nil +} + +func (x *SpannerAction) GetRead() *ReadAction { + if x, ok := x.GetAction().(*SpannerAction_Read); ok { + return x.Read + } + return nil +} + +func (x *SpannerAction) GetQuery() *QueryAction { + if x, ok := x.GetAction().(*SpannerAction_Query); ok { + return x.Query + } + return nil +} + +func (x *SpannerAction) GetMutation() *MutationAction { + if x, ok := x.GetAction().(*SpannerAction_Mutation); ok { + return x.Mutation + } + return nil +} + +func (x *SpannerAction) GetDml() *DmlAction { + if x, ok := x.GetAction().(*SpannerAction_Dml); ok { + return x.Dml + } + return nil +} + +func (x *SpannerAction) GetBatchDml() *BatchDmlAction { + if x, ok := x.GetAction().(*SpannerAction_BatchDml); ok { + return x.BatchDml + } + return nil +} + +func (x *SpannerAction) GetWrite() *WriteMutationsAction { + if x, ok := x.GetAction().(*SpannerAction_Write); ok { + return x.Write + } + return nil +} + +func (x *SpannerAction) GetPartitionedUpdate() *PartitionedUpdateAction { + if x, ok := x.GetAction().(*SpannerAction_PartitionedUpdate); ok { + return x.PartitionedUpdate + } + return nil +} + +func (x *SpannerAction) GetAdmin() *AdminAction { + if x, ok := x.GetAction().(*SpannerAction_Admin); ok { + return x.Admin + } + return nil +} + +func (x *SpannerAction) GetStartBatchTxn() *StartBatchTransactionAction { + if x, ok := x.GetAction().(*SpannerAction_StartBatchTxn); ok { + return x.StartBatchTxn + } + return nil +} + +func (x *SpannerAction) GetCloseBatchTxn() *CloseBatchTransactionAction { + if x, ok := x.GetAction().(*SpannerAction_CloseBatchTxn); ok { + return x.CloseBatchTxn + } + return nil +} + +func (x *SpannerAction) GetGenerateDbPartitionsRead() *GenerateDbPartitionsForReadAction { + if x, ok := x.GetAction().(*SpannerAction_GenerateDbPartitionsRead); ok { + return x.GenerateDbPartitionsRead + } + return nil +} + +func (x *SpannerAction) GetGenerateDbPartitionsQuery() *GenerateDbPartitionsForQueryAction { + if x, ok := x.GetAction().(*SpannerAction_GenerateDbPartitionsQuery); ok { + return x.GenerateDbPartitionsQuery + } + return nil +} + +func (x *SpannerAction) GetExecutePartition() *ExecutePartitionAction { + if x, ok := x.GetAction().(*SpannerAction_ExecutePartition); ok { + return x.ExecutePartition + } + return nil +} + +func (x *SpannerAction) GetExecuteChangeStreamQuery() *ExecuteChangeStreamQuery { + if x, ok := x.GetAction().(*SpannerAction_ExecuteChangeStreamQuery); ok { + return x.ExecuteChangeStreamQuery + } + return nil +} + +type isSpannerAction_Action interface { + isSpannerAction_Action() +} + +type SpannerAction_Start struct { + // Action to start a transaction. + Start *StartTransactionAction `protobuf:"bytes,10,opt,name=start,proto3,oneof"` +} + +type SpannerAction_Finish struct { + // Action to finish a transaction. + Finish *FinishTransactionAction `protobuf:"bytes,11,opt,name=finish,proto3,oneof"` +} + +type SpannerAction_Read struct { + // Action to do a normal read. + Read *ReadAction `protobuf:"bytes,20,opt,name=read,proto3,oneof"` +} + +type SpannerAction_Query struct { + // Action to do a query. + Query *QueryAction `protobuf:"bytes,21,opt,name=query,proto3,oneof"` +} + +type SpannerAction_Mutation struct { + // Action to buffer a mutation. + Mutation *MutationAction `protobuf:"bytes,22,opt,name=mutation,proto3,oneof"` +} + +type SpannerAction_Dml struct { + // Action to a DML. + Dml *DmlAction `protobuf:"bytes,23,opt,name=dml,proto3,oneof"` +} + +type SpannerAction_BatchDml struct { + // Action to a batch DML. + BatchDml *BatchDmlAction `protobuf:"bytes,24,opt,name=batch_dml,json=batchDml,proto3,oneof"` +} + +type SpannerAction_Write struct { + // Action to write a mutation. + Write *WriteMutationsAction `protobuf:"bytes,25,opt,name=write,proto3,oneof"` +} + +type SpannerAction_PartitionedUpdate struct { + // Action to a partitioned update. + PartitionedUpdate *PartitionedUpdateAction `protobuf:"bytes,27,opt,name=partitioned_update,json=partitionedUpdate,proto3,oneof"` +} + +type SpannerAction_Admin struct { + // Action that contains any administrative operation, like database, + // instance manipulation. + Admin *AdminAction `protobuf:"bytes,30,opt,name=admin,proto3,oneof"` +} + +type SpannerAction_StartBatchTxn struct { + // Action to start a batch transaction. + StartBatchTxn *StartBatchTransactionAction `protobuf:"bytes,40,opt,name=start_batch_txn,json=startBatchTxn,proto3,oneof"` +} + +type SpannerAction_CloseBatchTxn struct { + // Action to close a batch transaction. + CloseBatchTxn *CloseBatchTransactionAction `protobuf:"bytes,41,opt,name=close_batch_txn,json=closeBatchTxn,proto3,oneof"` +} + +type SpannerAction_GenerateDbPartitionsRead struct { + // Action to generate database partitions for batch read. + GenerateDbPartitionsRead *GenerateDbPartitionsForReadAction `protobuf:"bytes,42,opt,name=generate_db_partitions_read,json=generateDbPartitionsRead,proto3,oneof"` +} + +type SpannerAction_GenerateDbPartitionsQuery struct { + // Action to generate database partitions for batch query. + GenerateDbPartitionsQuery *GenerateDbPartitionsForQueryAction `protobuf:"bytes,43,opt,name=generate_db_partitions_query,json=generateDbPartitionsQuery,proto3,oneof"` +} + +type SpannerAction_ExecutePartition struct { + // Action to execute batch actions on generated partitions. + ExecutePartition *ExecutePartitionAction `protobuf:"bytes,44,opt,name=execute_partition,json=executePartition,proto3,oneof"` +} + +type SpannerAction_ExecuteChangeStreamQuery struct { + // Action to execute change stream query. + ExecuteChangeStreamQuery *ExecuteChangeStreamQuery `protobuf:"bytes,50,opt,name=execute_change_stream_query,json=executeChangeStreamQuery,proto3,oneof"` +} + +func (*SpannerAction_Start) isSpannerAction_Action() {} + +func (*SpannerAction_Finish) isSpannerAction_Action() {} + +func (*SpannerAction_Read) isSpannerAction_Action() {} + +func (*SpannerAction_Query) isSpannerAction_Action() {} + +func (*SpannerAction_Mutation) isSpannerAction_Action() {} + +func (*SpannerAction_Dml) isSpannerAction_Action() {} + +func (*SpannerAction_BatchDml) isSpannerAction_Action() {} + +func (*SpannerAction_Write) isSpannerAction_Action() {} + +func (*SpannerAction_PartitionedUpdate) isSpannerAction_Action() {} + +func (*SpannerAction_Admin) isSpannerAction_Action() {} + +func (*SpannerAction_StartBatchTxn) isSpannerAction_Action() {} + +func (*SpannerAction_CloseBatchTxn) isSpannerAction_Action() {} + +func (*SpannerAction_GenerateDbPartitionsRead) isSpannerAction_Action() {} + +func (*SpannerAction_GenerateDbPartitionsQuery) isSpannerAction_Action() {} + +func (*SpannerAction_ExecutePartition) isSpannerAction_Action() {} + +func (*SpannerAction_ExecuteChangeStreamQuery) isSpannerAction_Action() {} + +// A single read request. +type ReadAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The table to read at. + Table string `protobuf:"bytes,1,opt,name=table,proto3" json:"table,omitempty"` + // The index to read at if it's an index read. + Index *string `protobuf:"bytes,2,opt,name=index,proto3,oneof" json:"index,omitempty"` + // List of columns must begin with the key columns used for the read. + Column []string `protobuf:"bytes,3,rep,name=column,proto3" json:"column,omitempty"` + // Keys for performing this read. + Keys *KeySet `protobuf:"bytes,4,opt,name=keys,proto3" json:"keys,omitempty"` + // Limit on number of rows to read. If set, must be positive. + Limit int32 `protobuf:"varint,5,opt,name=limit,proto3" json:"limit,omitempty"` +} + +func (x *ReadAction) Reset() { + *x = ReadAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReadAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReadAction) ProtoMessage() {} + +func (x *ReadAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReadAction.ProtoReflect.Descriptor instead. +func (*ReadAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{3} +} + +func (x *ReadAction) GetTable() string { + if x != nil { + return x.Table + } + return "" +} + +func (x *ReadAction) GetIndex() string { + if x != nil && x.Index != nil { + return *x.Index + } + return "" +} + +func (x *ReadAction) GetColumn() []string { + if x != nil { + return x.Column + } + return nil +} + +func (x *ReadAction) GetKeys() *KeySet { + if x != nil { + return x.Keys + } + return nil +} + +func (x *ReadAction) GetLimit() int32 { + if x != nil { + return x.Limit + } + return 0 +} + +// A SQL query request. +type QueryAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The SQL string. + Sql string `protobuf:"bytes,1,opt,name=sql,proto3" json:"sql,omitempty"` + // Parameters for the SQL string. + Params []*QueryAction_Parameter `protobuf:"bytes,2,rep,name=params,proto3" json:"params,omitempty"` +} + +func (x *QueryAction) Reset() { + *x = QueryAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAction) ProtoMessage() {} + +func (x *QueryAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryAction.ProtoReflect.Descriptor instead. +func (*QueryAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{4} +} + +func (x *QueryAction) GetSql() string { + if x != nil { + return x.Sql + } + return "" +} + +func (x *QueryAction) GetParams() []*QueryAction_Parameter { + if x != nil { + return x.Params + } + return nil +} + +// A single DML statement. +type DmlAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // DML statement. + Update *QueryAction `protobuf:"bytes,1,opt,name=update,proto3" json:"update,omitempty"` + // Whether to autocommit the transaction after executing the DML statement, + // if the Executor supports autocommit. + AutocommitIfSupported *bool `protobuf:"varint,2,opt,name=autocommit_if_supported,json=autocommitIfSupported,proto3,oneof" json:"autocommit_if_supported,omitempty"` +} + +func (x *DmlAction) Reset() { + *x = DmlAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DmlAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DmlAction) ProtoMessage() {} + +func (x *DmlAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DmlAction.ProtoReflect.Descriptor instead. +func (*DmlAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{5} +} + +func (x *DmlAction) GetUpdate() *QueryAction { + if x != nil { + return x.Update + } + return nil +} + +func (x *DmlAction) GetAutocommitIfSupported() bool { + if x != nil && x.AutocommitIfSupported != nil { + return *x.AutocommitIfSupported + } + return false +} + +// Batch of DML statements invoked using batched execution. +type BatchDmlAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // DML statements. + Updates []*QueryAction `protobuf:"bytes,1,rep,name=updates,proto3" json:"updates,omitempty"` +} + +func (x *BatchDmlAction) Reset() { + *x = BatchDmlAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchDmlAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchDmlAction) ProtoMessage() {} + +func (x *BatchDmlAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatchDmlAction.ProtoReflect.Descriptor instead. +func (*BatchDmlAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{6} +} + +func (x *BatchDmlAction) GetUpdates() []*QueryAction { + if x != nil { + return x.Updates + } + return nil +} + +// Value represents a single value that can be read or written to/from +// Spanner. +type Value struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Exactly one of the following fields will be present. + // + // Types that are assignable to ValueType: + // + // *Value_IsNull + // *Value_IntValue + // *Value_BoolValue + // *Value_DoubleValue + // *Value_BytesValue + // *Value_StringValue + // *Value_StructValue + // *Value_TimestampValue + // *Value_DateDaysValue + // *Value_IsCommitTimestamp + // *Value_ArrayValue + ValueType isValue_ValueType `protobuf_oneof:"value_type"` + // Type of array element. Only set if value is an array. + ArrayType *spannerpb.Type `protobuf:"bytes,12,opt,name=array_type,json=arrayType,proto3,oneof" json:"array_type,omitempty"` +} + +func (x *Value) Reset() { + *x = Value{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Value) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Value) ProtoMessage() {} + +func (x *Value) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Value.ProtoReflect.Descriptor instead. +func (*Value) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{7} +} + +func (m *Value) GetValueType() isValue_ValueType { + if m != nil { + return m.ValueType + } + return nil +} + +func (x *Value) GetIsNull() bool { + if x, ok := x.GetValueType().(*Value_IsNull); ok { + return x.IsNull + } + return false +} + +func (x *Value) GetIntValue() int64 { + if x, ok := x.GetValueType().(*Value_IntValue); ok { + return x.IntValue + } + return 0 +} + +func (x *Value) GetBoolValue() bool { + if x, ok := x.GetValueType().(*Value_BoolValue); ok { + return x.BoolValue + } + return false +} + +func (x *Value) GetDoubleValue() float64 { + if x, ok := x.GetValueType().(*Value_DoubleValue); ok { + return x.DoubleValue + } + return 0 +} + +func (x *Value) GetBytesValue() []byte { + if x, ok := x.GetValueType().(*Value_BytesValue); ok { + return x.BytesValue + } + return nil +} + +func (x *Value) GetStringValue() string { + if x, ok := x.GetValueType().(*Value_StringValue); ok { + return x.StringValue + } + return "" +} + +func (x *Value) GetStructValue() *ValueList { + if x, ok := x.GetValueType().(*Value_StructValue); ok { + return x.StructValue + } + return nil +} + +func (x *Value) GetTimestampValue() *timestamppb.Timestamp { + if x, ok := x.GetValueType().(*Value_TimestampValue); ok { + return x.TimestampValue + } + return nil +} + +func (x *Value) GetDateDaysValue() int32 { + if x, ok := x.GetValueType().(*Value_DateDaysValue); ok { + return x.DateDaysValue + } + return 0 +} + +func (x *Value) GetIsCommitTimestamp() bool { + if x, ok := x.GetValueType().(*Value_IsCommitTimestamp); ok { + return x.IsCommitTimestamp + } + return false +} + +func (x *Value) GetArrayValue() *ValueList { + if x, ok := x.GetValueType().(*Value_ArrayValue); ok { + return x.ArrayValue + } + return nil +} + +func (x *Value) GetArrayType() *spannerpb.Type { + if x != nil { + return x.ArrayType + } + return nil +} + +type isValue_ValueType interface { + isValue_ValueType() +} + +type Value_IsNull struct { + // If is_null is set, then this value is null. + IsNull bool `protobuf:"varint,1,opt,name=is_null,json=isNull,proto3,oneof"` +} + +type Value_IntValue struct { + // Int type value. It's used for all integer number types, like int32 and + // int64. + IntValue int64 `protobuf:"varint,2,opt,name=int_value,json=intValue,proto3,oneof"` +} + +type Value_BoolValue struct { + // Bool type value. + BoolValue bool `protobuf:"varint,3,opt,name=bool_value,json=boolValue,proto3,oneof"` +} + +type Value_DoubleValue struct { + // Double type value. It's used for all float point types, like float and + // double. + DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue,proto3,oneof"` +} + +type Value_BytesValue struct { + // Bytes type value, stored in CORD. It's also used for PROTO type value. + BytesValue []byte `protobuf:"bytes,5,opt,name=bytes_value,json=bytesValue,proto3,oneof"` +} + +type Value_StringValue struct { + // String type value, stored in CORD. + StringValue string `protobuf:"bytes,6,opt,name=string_value,json=stringValue,proto3,oneof"` +} + +type Value_StructValue struct { + // Struct type value. It contains a ValueList representing the values in + // this struct. + StructValue *ValueList `protobuf:"bytes,7,opt,name=struct_value,json=structValue,proto3,oneof"` +} + +type Value_TimestampValue struct { + // Timestamp type value. + TimestampValue *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=timestamp_value,json=timestampValue,proto3,oneof"` +} + +type Value_DateDaysValue struct { + // Date type value. Date is specified as a number of days since Unix epoch. + DateDaysValue int32 `protobuf:"varint,9,opt,name=date_days_value,json=dateDaysValue,proto3,oneof"` +} + +type Value_IsCommitTimestamp struct { + // If set, holds the sentinel value for the transaction CommitTimestamp. + IsCommitTimestamp bool `protobuf:"varint,10,opt,name=is_commit_timestamp,json=isCommitTimestamp,proto3,oneof"` +} + +type Value_ArrayValue struct { + // Array type value. The underlying Valuelist should have values that have + // the same type. + ArrayValue *ValueList `protobuf:"bytes,11,opt,name=array_value,json=arrayValue,proto3,oneof"` +} + +func (*Value_IsNull) isValue_ValueType() {} + +func (*Value_IntValue) isValue_ValueType() {} + +func (*Value_BoolValue) isValue_ValueType() {} + +func (*Value_DoubleValue) isValue_ValueType() {} + +func (*Value_BytesValue) isValue_ValueType() {} + +func (*Value_StringValue) isValue_ValueType() {} + +func (*Value_StructValue) isValue_ValueType() {} + +func (*Value_TimestampValue) isValue_ValueType() {} + +func (*Value_DateDaysValue) isValue_ValueType() {} + +func (*Value_IsCommitTimestamp) isValue_ValueType() {} + +func (*Value_ArrayValue) isValue_ValueType() {} + +// KeyRange represents a range of rows in a table or index. +// +// A range has a start key and an end key. These keys can be open or +// closed, indicating if the range includes rows with that key. +// +// Keys are represented by "ValueList", where the ith value in the list +// corresponds to the ith component of the table or index primary key. +type KeyRange struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // "start" and "limit" must have the same number of key parts, + // though they may name only a prefix of the table or index key. + // The start key of this KeyRange. + Start *ValueList `protobuf:"bytes,1,opt,name=start,proto3" json:"start,omitempty"` + // The end key of this KeyRange. + Limit *ValueList `protobuf:"bytes,2,opt,name=limit,proto3" json:"limit,omitempty"` + // "start" and "limit" type for this KeyRange. + Type *KeyRange_Type `protobuf:"varint,3,opt,name=type,proto3,enum=google.spanner.executor.v1.KeyRange_Type,oneof" json:"type,omitempty"` +} + +func (x *KeyRange) Reset() { + *x = KeyRange{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KeyRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeyRange) ProtoMessage() {} + +func (x *KeyRange) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KeyRange.ProtoReflect.Descriptor instead. +func (*KeyRange) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{8} +} + +func (x *KeyRange) GetStart() *ValueList { + if x != nil { + return x.Start + } + return nil +} + +func (x *KeyRange) GetLimit() *ValueList { + if x != nil { + return x.Limit + } + return nil +} + +func (x *KeyRange) GetType() KeyRange_Type { + if x != nil && x.Type != nil { + return *x.Type + } + return KeyRange_TYPE_UNSPECIFIED +} + +// KeySet defines a collection of Spanner keys and/or key ranges. All +// the keys are expected to be in the same table. The keys need not be +// sorted in any particular way. +type KeySet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A list of specific keys. Entries in "keys" should have exactly as + // many elements as there are columns in the primary or index key + // with which this "KeySet" is used. + Point []*ValueList `protobuf:"bytes,1,rep,name=point,proto3" json:"point,omitempty"` + // A list of key ranges. + Range []*KeyRange `protobuf:"bytes,2,rep,name=range,proto3" json:"range,omitempty"` + // For convenience "all" can be set to "true" to indicate that this + // "KeySet" matches all keys in the table or index. Note that any keys + // specified in "keys" or "ranges" are only yielded once. + All bool `protobuf:"varint,3,opt,name=all,proto3" json:"all,omitempty"` +} + +func (x *KeySet) Reset() { + *x = KeySet{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KeySet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeySet) ProtoMessage() {} + +func (x *KeySet) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KeySet.ProtoReflect.Descriptor instead. +func (*KeySet) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{9} +} + +func (x *KeySet) GetPoint() []*ValueList { + if x != nil { + return x.Point + } + return nil +} + +func (x *KeySet) GetRange() []*KeyRange { + if x != nil { + return x.Range + } + return nil +} + +func (x *KeySet) GetAll() bool { + if x != nil { + return x.All + } + return false +} + +// List of values. +type ValueList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Values contained in this ValueList. + Value []*Value `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"` +} + +func (x *ValueList) Reset() { + *x = ValueList{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValueList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueList) ProtoMessage() {} + +func (x *ValueList) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueList.ProtoReflect.Descriptor instead. +func (*ValueList) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{10} +} + +func (x *ValueList) GetValue() []*Value { + if x != nil { + return x.Value + } + return nil +} + +// A single mutation request. +type MutationAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Mods that contained in this mutation. + Mod []*MutationAction_Mod `protobuf:"bytes,1,rep,name=mod,proto3" json:"mod,omitempty"` +} + +func (x *MutationAction) Reset() { + *x = MutationAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MutationAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MutationAction) ProtoMessage() {} + +func (x *MutationAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MutationAction.ProtoReflect.Descriptor instead. +func (*MutationAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{11} +} + +func (x *MutationAction) GetMod() []*MutationAction_Mod { + if x != nil { + return x.Mod + } + return nil +} + +// WriteMutationAction defines an action of flushing the mutation so they +// are visible to subsequent operations in the transaction. +type WriteMutationsAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The mutation to write. + Mutation *MutationAction `protobuf:"bytes,1,opt,name=mutation,proto3" json:"mutation,omitempty"` +} + +func (x *WriteMutationsAction) Reset() { + *x = WriteMutationsAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WriteMutationsAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteMutationsAction) ProtoMessage() {} + +func (x *WriteMutationsAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WriteMutationsAction.ProtoReflect.Descriptor instead. +func (*WriteMutationsAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{12} +} + +func (x *WriteMutationsAction) GetMutation() *MutationAction { + if x != nil { + return x.Mutation + } + return nil +} + +// PartitionedUpdateAction defines an action to execute a partitioned DML +// which runs different partitions in parallel. +type PartitionedUpdateAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Options for partitioned update. + Options *PartitionedUpdateAction_ExecutePartitionedUpdateOptions `protobuf:"bytes,1,opt,name=options,proto3,oneof" json:"options,omitempty"` + // Partitioned dml query. + Update *QueryAction `protobuf:"bytes,2,opt,name=update,proto3" json:"update,omitempty"` +} + +func (x *PartitionedUpdateAction) Reset() { + *x = PartitionedUpdateAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartitionedUpdateAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartitionedUpdateAction) ProtoMessage() {} + +func (x *PartitionedUpdateAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartitionedUpdateAction.ProtoReflect.Descriptor instead. +func (*PartitionedUpdateAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{13} +} + +func (x *PartitionedUpdateAction) GetOptions() *PartitionedUpdateAction_ExecutePartitionedUpdateOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *PartitionedUpdateAction) GetUpdate() *QueryAction { + if x != nil { + return x.Update + } + return nil +} + +// StartTransactionAction defines an action of initializing a transaction. +type StartTransactionAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Concurrency is for read-only transactions and must be omitted for + // read-write transactions. + Concurrency *Concurrency `protobuf:"bytes,1,opt,name=concurrency,proto3,oneof" json:"concurrency,omitempty"` + // Metadata about tables and columns that will be involved in this + // transaction. It is to convert values of key parts correctly. + Table []*TableMetadata `protobuf:"bytes,2,rep,name=table,proto3" json:"table,omitempty"` + // Transaction_seed contains workid and op pair for this transaction, used for + // testing. + TransactionSeed string `protobuf:"bytes,3,opt,name=transaction_seed,json=transactionSeed,proto3" json:"transaction_seed,omitempty"` + // Execution options (e.g., whether transaction is opaque, optimistic). + ExecutionOptions *TransactionExecutionOptions `protobuf:"bytes,4,opt,name=execution_options,json=executionOptions,proto3,oneof" json:"execution_options,omitempty"` +} + +func (x *StartTransactionAction) Reset() { + *x = StartTransactionAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartTransactionAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartTransactionAction) ProtoMessage() {} + +func (x *StartTransactionAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartTransactionAction.ProtoReflect.Descriptor instead. +func (*StartTransactionAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{14} +} + +func (x *StartTransactionAction) GetConcurrency() *Concurrency { + if x != nil { + return x.Concurrency + } + return nil +} + +func (x *StartTransactionAction) GetTable() []*TableMetadata { + if x != nil { + return x.Table + } + return nil +} + +func (x *StartTransactionAction) GetTransactionSeed() string { + if x != nil { + return x.TransactionSeed + } + return "" +} + +func (x *StartTransactionAction) GetExecutionOptions() *TransactionExecutionOptions { + if x != nil { + return x.ExecutionOptions + } + return nil +} + +// Concurrency for read-only transactions. +type Concurrency struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Concurrency mode set for read-only transactions, exactly one mode below + // should be set. + // + // Types that are assignable to ConcurrencyMode: + // + // *Concurrency_StalenessSeconds + // *Concurrency_MinReadTimestampMicros + // *Concurrency_MaxStalenessSeconds + // *Concurrency_ExactTimestampMicros + // *Concurrency_Strong + // *Concurrency_Batch + ConcurrencyMode isConcurrency_ConcurrencyMode `protobuf_oneof:"concurrency_mode"` + // True if exact_timestamp_micros is set, and the chosen timestamp is that of + // a snapshot epoch. + SnapshotEpochRead bool `protobuf:"varint,7,opt,name=snapshot_epoch_read,json=snapshotEpochRead,proto3" json:"snapshot_epoch_read,omitempty"` + // If set, this is a snapshot epoch read constrained to read only the + // specified log scope root table, and its children. Will not be set for full + // database epochs. + SnapshotEpochRootTable string `protobuf:"bytes,8,opt,name=snapshot_epoch_root_table,json=snapshotEpochRootTable,proto3" json:"snapshot_epoch_root_table,omitempty"` + // Set only when batch is true. + BatchReadTimestampMicros int64 `protobuf:"varint,9,opt,name=batch_read_timestamp_micros,json=batchReadTimestampMicros,proto3" json:"batch_read_timestamp_micros,omitempty"` +} + +func (x *Concurrency) Reset() { + *x = Concurrency{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Concurrency) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Concurrency) ProtoMessage() {} + +func (x *Concurrency) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Concurrency.ProtoReflect.Descriptor instead. +func (*Concurrency) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{15} +} + +func (m *Concurrency) GetConcurrencyMode() isConcurrency_ConcurrencyMode { + if m != nil { + return m.ConcurrencyMode + } + return nil +} + +func (x *Concurrency) GetStalenessSeconds() float64 { + if x, ok := x.GetConcurrencyMode().(*Concurrency_StalenessSeconds); ok { + return x.StalenessSeconds + } + return 0 +} + +func (x *Concurrency) GetMinReadTimestampMicros() int64 { + if x, ok := x.GetConcurrencyMode().(*Concurrency_MinReadTimestampMicros); ok { + return x.MinReadTimestampMicros + } + return 0 +} + +func (x *Concurrency) GetMaxStalenessSeconds() float64 { + if x, ok := x.GetConcurrencyMode().(*Concurrency_MaxStalenessSeconds); ok { + return x.MaxStalenessSeconds + } + return 0 +} + +func (x *Concurrency) GetExactTimestampMicros() int64 { + if x, ok := x.GetConcurrencyMode().(*Concurrency_ExactTimestampMicros); ok { + return x.ExactTimestampMicros + } + return 0 +} + +func (x *Concurrency) GetStrong() bool { + if x, ok := x.GetConcurrencyMode().(*Concurrency_Strong); ok { + return x.Strong + } + return false +} + +func (x *Concurrency) GetBatch() bool { + if x, ok := x.GetConcurrencyMode().(*Concurrency_Batch); ok { + return x.Batch + } + return false +} + +func (x *Concurrency) GetSnapshotEpochRead() bool { + if x != nil { + return x.SnapshotEpochRead + } + return false +} + +func (x *Concurrency) GetSnapshotEpochRootTable() string { + if x != nil { + return x.SnapshotEpochRootTable + } + return "" +} + +func (x *Concurrency) GetBatchReadTimestampMicros() int64 { + if x != nil { + return x.BatchReadTimestampMicros + } + return 0 +} + +type isConcurrency_ConcurrencyMode interface { + isConcurrency_ConcurrencyMode() +} + +type Concurrency_StalenessSeconds struct { + // Indicates a read at a consistent timestamp that is specified relative to + // now. That is, if the caller has specified an exact staleness of s + // seconds, we will read at now - s. + StalenessSeconds float64 `protobuf:"fixed64,1,opt,name=staleness_seconds,json=stalenessSeconds,proto3,oneof"` +} + +type Concurrency_MinReadTimestampMicros struct { + // Indicates a boundedly stale read that reads at a timestamp >= T. + MinReadTimestampMicros int64 `protobuf:"varint,2,opt,name=min_read_timestamp_micros,json=minReadTimestampMicros,proto3,oneof"` +} + +type Concurrency_MaxStalenessSeconds struct { + // Indicates a boundedly stale read that is at most N seconds stale. + MaxStalenessSeconds float64 `protobuf:"fixed64,3,opt,name=max_staleness_seconds,json=maxStalenessSeconds,proto3,oneof"` +} + +type Concurrency_ExactTimestampMicros struct { + // Indicates a read at a consistent timestamp. + ExactTimestampMicros int64 `protobuf:"varint,4,opt,name=exact_timestamp_micros,json=exactTimestampMicros,proto3,oneof"` +} + +type Concurrency_Strong struct { + // Indicates a strong read, must only be set to true, or unset. + Strong bool `protobuf:"varint,5,opt,name=strong,proto3,oneof"` +} + +type Concurrency_Batch struct { + // Indicates a batch read, must only be set to true, or unset. + Batch bool `protobuf:"varint,6,opt,name=batch,proto3,oneof"` +} + +func (*Concurrency_StalenessSeconds) isConcurrency_ConcurrencyMode() {} + +func (*Concurrency_MinReadTimestampMicros) isConcurrency_ConcurrencyMode() {} + +func (*Concurrency_MaxStalenessSeconds) isConcurrency_ConcurrencyMode() {} + +func (*Concurrency_ExactTimestampMicros) isConcurrency_ConcurrencyMode() {} + +func (*Concurrency_Strong) isConcurrency_ConcurrencyMode() {} + +func (*Concurrency_Batch) isConcurrency_ConcurrencyMode() {} + +// TableMetadata contains metadata of a single table. +type TableMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Table name. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Columns, in the same order as in the schema. + Column []*ColumnMetadata `protobuf:"bytes,2,rep,name=column,proto3" json:"column,omitempty"` + // Keys, in order. Column name is currently not populated. + KeyColumn []*ColumnMetadata `protobuf:"bytes,3,rep,name=key_column,json=keyColumn,proto3" json:"key_column,omitempty"` +} + +func (x *TableMetadata) Reset() { + *x = TableMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TableMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TableMetadata) ProtoMessage() {} + +func (x *TableMetadata) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TableMetadata.ProtoReflect.Descriptor instead. +func (*TableMetadata) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{16} +} + +func (x *TableMetadata) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TableMetadata) GetColumn() []*ColumnMetadata { + if x != nil { + return x.Column + } + return nil +} + +func (x *TableMetadata) GetKeyColumn() []*ColumnMetadata { + if x != nil { + return x.KeyColumn + } + return nil +} + +// ColumnMetadata represents metadata of a single column. +type ColumnMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Column name. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Column type. + Type *spannerpb.Type `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` +} + +func (x *ColumnMetadata) Reset() { + *x = ColumnMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ColumnMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ColumnMetadata) ProtoMessage() {} + +func (x *ColumnMetadata) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ColumnMetadata.ProtoReflect.Descriptor instead. +func (*ColumnMetadata) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{17} +} + +func (x *ColumnMetadata) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ColumnMetadata) GetType() *spannerpb.Type { + if x != nil { + return x.Type + } + return nil +} + +// Options for executing the transaction. +type TransactionExecutionOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Whether optimistic concurrency should be used to execute this transaction. + Optimistic bool `protobuf:"varint,1,opt,name=optimistic,proto3" json:"optimistic,omitempty"` +} + +func (x *TransactionExecutionOptions) Reset() { + *x = TransactionExecutionOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TransactionExecutionOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TransactionExecutionOptions) ProtoMessage() {} + +func (x *TransactionExecutionOptions) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TransactionExecutionOptions.ProtoReflect.Descriptor instead. +func (*TransactionExecutionOptions) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{18} +} + +func (x *TransactionExecutionOptions) GetOptimistic() bool { + if x != nil { + return x.Optimistic + } + return false +} + +// FinishTransactionAction defines an action of finishing a transaction. +type FinishTransactionAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Defines how exactly the transaction should be completed, e.g. with + // commit or abortion. + Mode FinishTransactionAction_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=google.spanner.executor.v1.FinishTransactionAction_Mode" json:"mode,omitempty"` +} + +func (x *FinishTransactionAction) Reset() { + *x = FinishTransactionAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FinishTransactionAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FinishTransactionAction) ProtoMessage() {} + +func (x *FinishTransactionAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FinishTransactionAction.ProtoReflect.Descriptor instead. +func (*FinishTransactionAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{19} +} + +func (x *FinishTransactionAction) GetMode() FinishTransactionAction_Mode { + if x != nil { + return x.Mode + } + return FinishTransactionAction_MODE_UNSPECIFIED +} + +// AdminAction defines all the cloud spanner admin actions, including +// instance/database admin ops, backup ops and operation actions. +type AdminAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Exactly one of the actions below will be performed in AdminAction. + // + // Types that are assignable to Action: + // + // *AdminAction_CreateUserInstanceConfig + // *AdminAction_UpdateUserInstanceConfig + // *AdminAction_DeleteUserInstanceConfig + // *AdminAction_GetCloudInstanceConfig + // *AdminAction_ListInstanceConfigs + // *AdminAction_CreateCloudInstance + // *AdminAction_UpdateCloudInstance + // *AdminAction_DeleteCloudInstance + // *AdminAction_ListCloudInstances + // *AdminAction_GetCloudInstance + // *AdminAction_CreateCloudDatabase + // *AdminAction_UpdateCloudDatabaseDdl + // *AdminAction_UpdateCloudDatabase + // *AdminAction_DropCloudDatabase + // *AdminAction_ListCloudDatabases + // *AdminAction_ListCloudDatabaseOperations + // *AdminAction_RestoreCloudDatabase + // *AdminAction_GetCloudDatabase + // *AdminAction_CreateCloudBackup + // *AdminAction_CopyCloudBackup + // *AdminAction_GetCloudBackup + // *AdminAction_UpdateCloudBackup + // *AdminAction_DeleteCloudBackup + // *AdminAction_ListCloudBackups + // *AdminAction_ListCloudBackupOperations + // *AdminAction_GetOperation + // *AdminAction_CancelOperation + Action isAdminAction_Action `protobuf_oneof:"action"` +} + +func (x *AdminAction) Reset() { + *x = AdminAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AdminAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdminAction) ProtoMessage() {} + +func (x *AdminAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AdminAction.ProtoReflect.Descriptor instead. +func (*AdminAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{20} +} + +func (m *AdminAction) GetAction() isAdminAction_Action { + if m != nil { + return m.Action + } + return nil +} + +func (x *AdminAction) GetCreateUserInstanceConfig() *CreateUserInstanceConfigAction { + if x, ok := x.GetAction().(*AdminAction_CreateUserInstanceConfig); ok { + return x.CreateUserInstanceConfig + } + return nil +} + +func (x *AdminAction) GetUpdateUserInstanceConfig() *UpdateUserInstanceConfigAction { + if x, ok := x.GetAction().(*AdminAction_UpdateUserInstanceConfig); ok { + return x.UpdateUserInstanceConfig + } + return nil +} + +func (x *AdminAction) GetDeleteUserInstanceConfig() *DeleteUserInstanceConfigAction { + if x, ok := x.GetAction().(*AdminAction_DeleteUserInstanceConfig); ok { + return x.DeleteUserInstanceConfig + } + return nil +} + +func (x *AdminAction) GetGetCloudInstanceConfig() *GetCloudInstanceConfigAction { + if x, ok := x.GetAction().(*AdminAction_GetCloudInstanceConfig); ok { + return x.GetCloudInstanceConfig + } + return nil +} + +func (x *AdminAction) GetListInstanceConfigs() *ListCloudInstanceConfigsAction { + if x, ok := x.GetAction().(*AdminAction_ListInstanceConfigs); ok { + return x.ListInstanceConfigs + } + return nil +} + +func (x *AdminAction) GetCreateCloudInstance() *CreateCloudInstanceAction { + if x, ok := x.GetAction().(*AdminAction_CreateCloudInstance); ok { + return x.CreateCloudInstance + } + return nil +} + +func (x *AdminAction) GetUpdateCloudInstance() *UpdateCloudInstanceAction { + if x, ok := x.GetAction().(*AdminAction_UpdateCloudInstance); ok { + return x.UpdateCloudInstance + } + return nil +} + +func (x *AdminAction) GetDeleteCloudInstance() *DeleteCloudInstanceAction { + if x, ok := x.GetAction().(*AdminAction_DeleteCloudInstance); ok { + return x.DeleteCloudInstance + } + return nil +} + +func (x *AdminAction) GetListCloudInstances() *ListCloudInstancesAction { + if x, ok := x.GetAction().(*AdminAction_ListCloudInstances); ok { + return x.ListCloudInstances + } + return nil +} + +func (x *AdminAction) GetGetCloudInstance() *GetCloudInstanceAction { + if x, ok := x.GetAction().(*AdminAction_GetCloudInstance); ok { + return x.GetCloudInstance + } + return nil +} + +func (x *AdminAction) GetCreateCloudDatabase() *CreateCloudDatabaseAction { + if x, ok := x.GetAction().(*AdminAction_CreateCloudDatabase); ok { + return x.CreateCloudDatabase + } + return nil +} + +func (x *AdminAction) GetUpdateCloudDatabaseDdl() *UpdateCloudDatabaseDdlAction { + if x, ok := x.GetAction().(*AdminAction_UpdateCloudDatabaseDdl); ok { + return x.UpdateCloudDatabaseDdl + } + return nil +} + +func (x *AdminAction) GetUpdateCloudDatabase() *UpdateCloudDatabaseAction { + if x, ok := x.GetAction().(*AdminAction_UpdateCloudDatabase); ok { + return x.UpdateCloudDatabase + } + return nil +} + +func (x *AdminAction) GetDropCloudDatabase() *DropCloudDatabaseAction { + if x, ok := x.GetAction().(*AdminAction_DropCloudDatabase); ok { + return x.DropCloudDatabase + } + return nil +} + +func (x *AdminAction) GetListCloudDatabases() *ListCloudDatabasesAction { + if x, ok := x.GetAction().(*AdminAction_ListCloudDatabases); ok { + return x.ListCloudDatabases + } + return nil +} + +func (x *AdminAction) GetListCloudDatabaseOperations() *ListCloudDatabaseOperationsAction { + if x, ok := x.GetAction().(*AdminAction_ListCloudDatabaseOperations); ok { + return x.ListCloudDatabaseOperations + } + return nil +} + +func (x *AdminAction) GetRestoreCloudDatabase() *RestoreCloudDatabaseAction { + if x, ok := x.GetAction().(*AdminAction_RestoreCloudDatabase); ok { + return x.RestoreCloudDatabase + } + return nil +} + +func (x *AdminAction) GetGetCloudDatabase() *GetCloudDatabaseAction { + if x, ok := x.GetAction().(*AdminAction_GetCloudDatabase); ok { + return x.GetCloudDatabase + } + return nil +} + +func (x *AdminAction) GetCreateCloudBackup() *CreateCloudBackupAction { + if x, ok := x.GetAction().(*AdminAction_CreateCloudBackup); ok { + return x.CreateCloudBackup + } + return nil +} + +func (x *AdminAction) GetCopyCloudBackup() *CopyCloudBackupAction { + if x, ok := x.GetAction().(*AdminAction_CopyCloudBackup); ok { + return x.CopyCloudBackup + } + return nil +} + +func (x *AdminAction) GetGetCloudBackup() *GetCloudBackupAction { + if x, ok := x.GetAction().(*AdminAction_GetCloudBackup); ok { + return x.GetCloudBackup + } + return nil +} + +func (x *AdminAction) GetUpdateCloudBackup() *UpdateCloudBackupAction { + if x, ok := x.GetAction().(*AdminAction_UpdateCloudBackup); ok { + return x.UpdateCloudBackup + } + return nil +} + +func (x *AdminAction) GetDeleteCloudBackup() *DeleteCloudBackupAction { + if x, ok := x.GetAction().(*AdminAction_DeleteCloudBackup); ok { + return x.DeleteCloudBackup + } + return nil +} + +func (x *AdminAction) GetListCloudBackups() *ListCloudBackupsAction { + if x, ok := x.GetAction().(*AdminAction_ListCloudBackups); ok { + return x.ListCloudBackups + } + return nil +} + +func (x *AdminAction) GetListCloudBackupOperations() *ListCloudBackupOperationsAction { + if x, ok := x.GetAction().(*AdminAction_ListCloudBackupOperations); ok { + return x.ListCloudBackupOperations + } + return nil +} + +func (x *AdminAction) GetGetOperation() *GetOperationAction { + if x, ok := x.GetAction().(*AdminAction_GetOperation); ok { + return x.GetOperation + } + return nil +} + +func (x *AdminAction) GetCancelOperation() *CancelOperationAction { + if x, ok := x.GetAction().(*AdminAction_CancelOperation); ok { + return x.CancelOperation + } + return nil +} + +type isAdminAction_Action interface { + isAdminAction_Action() +} + +type AdminAction_CreateUserInstanceConfig struct { + // Action that creates a user instance config. + CreateUserInstanceConfig *CreateUserInstanceConfigAction `protobuf:"bytes,1,opt,name=create_user_instance_config,json=createUserInstanceConfig,proto3,oneof"` +} + +type AdminAction_UpdateUserInstanceConfig struct { + // Action that updates a user instance config. + UpdateUserInstanceConfig *UpdateUserInstanceConfigAction `protobuf:"bytes,2,opt,name=update_user_instance_config,json=updateUserInstanceConfig,proto3,oneof"` +} + +type AdminAction_DeleteUserInstanceConfig struct { + // Action that deletes a user instance config. + DeleteUserInstanceConfig *DeleteUserInstanceConfigAction `protobuf:"bytes,3,opt,name=delete_user_instance_config,json=deleteUserInstanceConfig,proto3,oneof"` +} + +type AdminAction_GetCloudInstanceConfig struct { + // Action that gets a user instance config. + GetCloudInstanceConfig *GetCloudInstanceConfigAction `protobuf:"bytes,4,opt,name=get_cloud_instance_config,json=getCloudInstanceConfig,proto3,oneof"` +} + +type AdminAction_ListInstanceConfigs struct { + // Action that lists user instance configs. + ListInstanceConfigs *ListCloudInstanceConfigsAction `protobuf:"bytes,5,opt,name=list_instance_configs,json=listInstanceConfigs,proto3,oneof"` +} + +type AdminAction_CreateCloudInstance struct { + // Action that creates a Cloud Spanner instance. + CreateCloudInstance *CreateCloudInstanceAction `protobuf:"bytes,6,opt,name=create_cloud_instance,json=createCloudInstance,proto3,oneof"` +} + +type AdminAction_UpdateCloudInstance struct { + // Action that updates a Cloud Spanner instance. + UpdateCloudInstance *UpdateCloudInstanceAction `protobuf:"bytes,7,opt,name=update_cloud_instance,json=updateCloudInstance,proto3,oneof"` +} + +type AdminAction_DeleteCloudInstance struct { + // Action that deletes a Cloud Spanner instance. + DeleteCloudInstance *DeleteCloudInstanceAction `protobuf:"bytes,8,opt,name=delete_cloud_instance,json=deleteCloudInstance,proto3,oneof"` +} + +type AdminAction_ListCloudInstances struct { + // Action that lists Cloud Spanner instances. + ListCloudInstances *ListCloudInstancesAction `protobuf:"bytes,9,opt,name=list_cloud_instances,json=listCloudInstances,proto3,oneof"` +} + +type AdminAction_GetCloudInstance struct { + // Action that retrieves a Cloud Spanner instance. + GetCloudInstance *GetCloudInstanceAction `protobuf:"bytes,10,opt,name=get_cloud_instance,json=getCloudInstance,proto3,oneof"` +} + +type AdminAction_CreateCloudDatabase struct { + // Action that creates a Cloud Spanner database. + CreateCloudDatabase *CreateCloudDatabaseAction `protobuf:"bytes,11,opt,name=create_cloud_database,json=createCloudDatabase,proto3,oneof"` +} + +type AdminAction_UpdateCloudDatabaseDdl struct { + // Action that updates the schema of a Cloud Spanner database. + UpdateCloudDatabaseDdl *UpdateCloudDatabaseDdlAction `protobuf:"bytes,12,opt,name=update_cloud_database_ddl,json=updateCloudDatabaseDdl,proto3,oneof"` +} + +type AdminAction_UpdateCloudDatabase struct { + // Action that updates the schema of a Cloud Spanner database. + UpdateCloudDatabase *UpdateCloudDatabaseAction `protobuf:"bytes,27,opt,name=update_cloud_database,json=updateCloudDatabase,proto3,oneof"` +} + +type AdminAction_DropCloudDatabase struct { + // Action that drops a Cloud Spanner database. + DropCloudDatabase *DropCloudDatabaseAction `protobuf:"bytes,13,opt,name=drop_cloud_database,json=dropCloudDatabase,proto3,oneof"` +} + +type AdminAction_ListCloudDatabases struct { + // Action that lists Cloud Spanner databases. + ListCloudDatabases *ListCloudDatabasesAction `protobuf:"bytes,14,opt,name=list_cloud_databases,json=listCloudDatabases,proto3,oneof"` +} + +type AdminAction_ListCloudDatabaseOperations struct { + // Action that lists Cloud Spanner database operations. + ListCloudDatabaseOperations *ListCloudDatabaseOperationsAction `protobuf:"bytes,15,opt,name=list_cloud_database_operations,json=listCloudDatabaseOperations,proto3,oneof"` +} + +type AdminAction_RestoreCloudDatabase struct { + // Action that restores a Cloud Spanner database from a backup. + RestoreCloudDatabase *RestoreCloudDatabaseAction `protobuf:"bytes,16,opt,name=restore_cloud_database,json=restoreCloudDatabase,proto3,oneof"` +} + +type AdminAction_GetCloudDatabase struct { + // Action that gets a Cloud Spanner database. + GetCloudDatabase *GetCloudDatabaseAction `protobuf:"bytes,17,opt,name=get_cloud_database,json=getCloudDatabase,proto3,oneof"` +} + +type AdminAction_CreateCloudBackup struct { + // Action that creates a Cloud Spanner database backup. + CreateCloudBackup *CreateCloudBackupAction `protobuf:"bytes,18,opt,name=create_cloud_backup,json=createCloudBackup,proto3,oneof"` +} + +type AdminAction_CopyCloudBackup struct { + // Action that copies a Cloud Spanner database backup. + CopyCloudBackup *CopyCloudBackupAction `protobuf:"bytes,19,opt,name=copy_cloud_backup,json=copyCloudBackup,proto3,oneof"` +} + +type AdminAction_GetCloudBackup struct { + // Action that gets a Cloud Spanner database backup. + GetCloudBackup *GetCloudBackupAction `protobuf:"bytes,20,opt,name=get_cloud_backup,json=getCloudBackup,proto3,oneof"` +} + +type AdminAction_UpdateCloudBackup struct { + // Action that updates a Cloud Spanner database backup. + UpdateCloudBackup *UpdateCloudBackupAction `protobuf:"bytes,21,opt,name=update_cloud_backup,json=updateCloudBackup,proto3,oneof"` +} + +type AdminAction_DeleteCloudBackup struct { + // Action that deletes a Cloud Spanner database backup. + DeleteCloudBackup *DeleteCloudBackupAction `protobuf:"bytes,22,opt,name=delete_cloud_backup,json=deleteCloudBackup,proto3,oneof"` +} + +type AdminAction_ListCloudBackups struct { + // Action that lists Cloud Spanner database backups. + ListCloudBackups *ListCloudBackupsAction `protobuf:"bytes,23,opt,name=list_cloud_backups,json=listCloudBackups,proto3,oneof"` +} + +type AdminAction_ListCloudBackupOperations struct { + // Action that lists Cloud Spanner database backup operations. + ListCloudBackupOperations *ListCloudBackupOperationsAction `protobuf:"bytes,24,opt,name=list_cloud_backup_operations,json=listCloudBackupOperations,proto3,oneof"` +} + +type AdminAction_GetOperation struct { + // Action that gets an operation. + GetOperation *GetOperationAction `protobuf:"bytes,25,opt,name=get_operation,json=getOperation,proto3,oneof"` +} + +type AdminAction_CancelOperation struct { + // Action that cancels an operation. + CancelOperation *CancelOperationAction `protobuf:"bytes,26,opt,name=cancel_operation,json=cancelOperation,proto3,oneof"` +} + +func (*AdminAction_CreateUserInstanceConfig) isAdminAction_Action() {} + +func (*AdminAction_UpdateUserInstanceConfig) isAdminAction_Action() {} + +func (*AdminAction_DeleteUserInstanceConfig) isAdminAction_Action() {} + +func (*AdminAction_GetCloudInstanceConfig) isAdminAction_Action() {} + +func (*AdminAction_ListInstanceConfigs) isAdminAction_Action() {} + +func (*AdminAction_CreateCloudInstance) isAdminAction_Action() {} + +func (*AdminAction_UpdateCloudInstance) isAdminAction_Action() {} + +func (*AdminAction_DeleteCloudInstance) isAdminAction_Action() {} + +func (*AdminAction_ListCloudInstances) isAdminAction_Action() {} + +func (*AdminAction_GetCloudInstance) isAdminAction_Action() {} + +func (*AdminAction_CreateCloudDatabase) isAdminAction_Action() {} + +func (*AdminAction_UpdateCloudDatabaseDdl) isAdminAction_Action() {} + +func (*AdminAction_UpdateCloudDatabase) isAdminAction_Action() {} + +func (*AdminAction_DropCloudDatabase) isAdminAction_Action() {} + +func (*AdminAction_ListCloudDatabases) isAdminAction_Action() {} + +func (*AdminAction_ListCloudDatabaseOperations) isAdminAction_Action() {} + +func (*AdminAction_RestoreCloudDatabase) isAdminAction_Action() {} + +func (*AdminAction_GetCloudDatabase) isAdminAction_Action() {} + +func (*AdminAction_CreateCloudBackup) isAdminAction_Action() {} + +func (*AdminAction_CopyCloudBackup) isAdminAction_Action() {} + +func (*AdminAction_GetCloudBackup) isAdminAction_Action() {} + +func (*AdminAction_UpdateCloudBackup) isAdminAction_Action() {} + +func (*AdminAction_DeleteCloudBackup) isAdminAction_Action() {} + +func (*AdminAction_ListCloudBackups) isAdminAction_Action() {} + +func (*AdminAction_ListCloudBackupOperations) isAdminAction_Action() {} + +func (*AdminAction_GetOperation) isAdminAction_Action() {} + +func (*AdminAction_CancelOperation) isAdminAction_Action() {} + +// Action that creates a user instance config. +type CreateUserInstanceConfigAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User instance config ID (not path), e.g. "custom-config". + UserConfigId string `protobuf:"bytes,1,opt,name=user_config_id,json=userConfigId,proto3" json:"user_config_id,omitempty"` + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Base config ID, e.g. "test-config". + BaseConfigId string `protobuf:"bytes,3,opt,name=base_config_id,json=baseConfigId,proto3" json:"base_config_id,omitempty"` + // Replicas that should be included in the user config. + Replicas []*instancepb.ReplicaInfo `protobuf:"bytes,4,rep,name=replicas,proto3" json:"replicas,omitempty"` +} + +func (x *CreateUserInstanceConfigAction) Reset() { + *x = CreateUserInstanceConfigAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateUserInstanceConfigAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateUserInstanceConfigAction) ProtoMessage() {} + +func (x *CreateUserInstanceConfigAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateUserInstanceConfigAction.ProtoReflect.Descriptor instead. +func (*CreateUserInstanceConfigAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{21} +} + +func (x *CreateUserInstanceConfigAction) GetUserConfigId() string { + if x != nil { + return x.UserConfigId + } + return "" +} + +func (x *CreateUserInstanceConfigAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *CreateUserInstanceConfigAction) GetBaseConfigId() string { + if x != nil { + return x.BaseConfigId + } + return "" +} + +func (x *CreateUserInstanceConfigAction) GetReplicas() []*instancepb.ReplicaInfo { + if x != nil { + return x.Replicas + } + return nil +} + +// Action that updates a user instance config. +type UpdateUserInstanceConfigAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User instance config ID (not path), e.g. "custom-config". + UserConfigId string `protobuf:"bytes,1,opt,name=user_config_id,json=userConfigId,proto3" json:"user_config_id,omitempty"` + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // The descriptive name for this instance config as it appears in UIs. + DisplayName *string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3,oneof" json:"display_name,omitempty"` + // labels. + Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *UpdateUserInstanceConfigAction) Reset() { + *x = UpdateUserInstanceConfigAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateUserInstanceConfigAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateUserInstanceConfigAction) ProtoMessage() {} + +func (x *UpdateUserInstanceConfigAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateUserInstanceConfigAction.ProtoReflect.Descriptor instead. +func (*UpdateUserInstanceConfigAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{22} +} + +func (x *UpdateUserInstanceConfigAction) GetUserConfigId() string { + if x != nil { + return x.UserConfigId + } + return "" +} + +func (x *UpdateUserInstanceConfigAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *UpdateUserInstanceConfigAction) GetDisplayName() string { + if x != nil && x.DisplayName != nil { + return *x.DisplayName + } + return "" +} + +func (x *UpdateUserInstanceConfigAction) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +// Action that gets a user instance config. +type GetCloudInstanceConfigAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Instance config ID (not path), e.g. "custom-config". + InstanceConfigId string `protobuf:"bytes,1,opt,name=instance_config_id,json=instanceConfigId,proto3" json:"instance_config_id,omitempty"` + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` +} + +func (x *GetCloudInstanceConfigAction) Reset() { + *x = GetCloudInstanceConfigAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetCloudInstanceConfigAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetCloudInstanceConfigAction) ProtoMessage() {} + +func (x *GetCloudInstanceConfigAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetCloudInstanceConfigAction.ProtoReflect.Descriptor instead. +func (*GetCloudInstanceConfigAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{23} +} + +func (x *GetCloudInstanceConfigAction) GetInstanceConfigId() string { + if x != nil { + return x.InstanceConfigId + } + return "" +} + +func (x *GetCloudInstanceConfigAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +// Action that deletes a user instance configs. +type DeleteUserInstanceConfigAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User instance config ID (not path), e.g. "custom-config". + UserConfigId string `protobuf:"bytes,1,opt,name=user_config_id,json=userConfigId,proto3" json:"user_config_id,omitempty"` + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` +} + +func (x *DeleteUserInstanceConfigAction) Reset() { + *x = DeleteUserInstanceConfigAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteUserInstanceConfigAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteUserInstanceConfigAction) ProtoMessage() {} + +func (x *DeleteUserInstanceConfigAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteUserInstanceConfigAction.ProtoReflect.Descriptor instead. +func (*DeleteUserInstanceConfigAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{24} +} + +func (x *DeleteUserInstanceConfigAction) GetUserConfigId() string { + if x != nil { + return x.UserConfigId + } + return "" +} + +func (x *DeleteUserInstanceConfigAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +// Action that lists user instance configs. +type ListCloudInstanceConfigsAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Number of instance configs to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + PageSize *int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3,oneof" json:"page_size,omitempty"` + // If non-empty, "page_token" should contain a next_page_token + // from a previous ListInstanceConfigsResponse to the same "parent". + PageToken *string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3,oneof" json:"page_token,omitempty"` +} + +func (x *ListCloudInstanceConfigsAction) Reset() { + *x = ListCloudInstanceConfigsAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListCloudInstanceConfigsAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListCloudInstanceConfigsAction) ProtoMessage() {} + +func (x *ListCloudInstanceConfigsAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListCloudInstanceConfigsAction.ProtoReflect.Descriptor instead. +func (*ListCloudInstanceConfigsAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{25} +} + +func (x *ListCloudInstanceConfigsAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *ListCloudInstanceConfigsAction) GetPageSize() int32 { + if x != nil && x.PageSize != nil { + return *x.PageSize + } + return 0 +} + +func (x *ListCloudInstanceConfigsAction) GetPageToken() string { + if x != nil && x.PageToken != nil { + return *x.PageToken + } + return "" +} + +// Action that creates a Cloud Spanner instance. +type CreateCloudInstanceAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Instance config ID, e.g. "test-config". + InstanceConfigId string `protobuf:"bytes,3,opt,name=instance_config_id,json=instanceConfigId,proto3" json:"instance_config_id,omitempty"` + // Number of nodes (processing_units should not be set or set to 0 if used). + NodeCount *int32 `protobuf:"varint,4,opt,name=node_count,json=nodeCount,proto3,oneof" json:"node_count,omitempty"` + // Number of processing units (node_count should be set to 0 if used). + ProcessingUnits *int32 `protobuf:"varint,6,opt,name=processing_units,json=processingUnits,proto3,oneof" json:"processing_units,omitempty"` + // labels. + Labels map[string]string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *CreateCloudInstanceAction) Reset() { + *x = CreateCloudInstanceAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateCloudInstanceAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateCloudInstanceAction) ProtoMessage() {} + +func (x *CreateCloudInstanceAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateCloudInstanceAction.ProtoReflect.Descriptor instead. +func (*CreateCloudInstanceAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{26} +} + +func (x *CreateCloudInstanceAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *CreateCloudInstanceAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *CreateCloudInstanceAction) GetInstanceConfigId() string { + if x != nil { + return x.InstanceConfigId + } + return "" +} + +func (x *CreateCloudInstanceAction) GetNodeCount() int32 { + if x != nil && x.NodeCount != nil { + return *x.NodeCount + } + return 0 +} + +func (x *CreateCloudInstanceAction) GetProcessingUnits() int32 { + if x != nil && x.ProcessingUnits != nil { + return *x.ProcessingUnits + } + return 0 +} + +func (x *CreateCloudInstanceAction) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +// Action that updates a Cloud Spanner instance. +type UpdateCloudInstanceAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // The descriptive name for this instance as it appears in UIs. + // Must be unique per project and between 4 and 30 characters in length. + DisplayName *string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3,oneof" json:"display_name,omitempty"` + // The number of nodes allocated to this instance. At most one of either + // node_count or processing_units should be present in the message. + NodeCount *int32 `protobuf:"varint,4,opt,name=node_count,json=nodeCount,proto3,oneof" json:"node_count,omitempty"` + // The number of processing units allocated to this instance. At most one of + // processing_units or node_count should be present in the message. + ProcessingUnits *int32 `protobuf:"varint,5,opt,name=processing_units,json=processingUnits,proto3,oneof" json:"processing_units,omitempty"` + // labels. + Labels map[string]string `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *UpdateCloudInstanceAction) Reset() { + *x = UpdateCloudInstanceAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateCloudInstanceAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateCloudInstanceAction) ProtoMessage() {} + +func (x *UpdateCloudInstanceAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateCloudInstanceAction.ProtoReflect.Descriptor instead. +func (*UpdateCloudInstanceAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{27} +} + +func (x *UpdateCloudInstanceAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *UpdateCloudInstanceAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *UpdateCloudInstanceAction) GetDisplayName() string { + if x != nil && x.DisplayName != nil { + return *x.DisplayName + } + return "" +} + +func (x *UpdateCloudInstanceAction) GetNodeCount() int32 { + if x != nil && x.NodeCount != nil { + return *x.NodeCount + } + return 0 +} + +func (x *UpdateCloudInstanceAction) GetProcessingUnits() int32 { + if x != nil && x.ProcessingUnits != nil { + return *x.ProcessingUnits + } + return 0 +} + +func (x *UpdateCloudInstanceAction) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +// Action that deletes a Cloud Spanner instance. +type DeleteCloudInstanceAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` +} + +func (x *DeleteCloudInstanceAction) Reset() { + *x = DeleteCloudInstanceAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteCloudInstanceAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteCloudInstanceAction) ProtoMessage() {} + +func (x *DeleteCloudInstanceAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteCloudInstanceAction.ProtoReflect.Descriptor instead. +func (*DeleteCloudInstanceAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{28} +} + +func (x *DeleteCloudInstanceAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *DeleteCloudInstanceAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +// Action that creates a Cloud Spanner database. +type CreateCloudDatabaseAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud database ID (not full path), e.g. "db0". + DatabaseId string `protobuf:"bytes,3,opt,name=database_id,json=databaseId,proto3" json:"database_id,omitempty"` + // SDL statements to apply to the new database. + SdlStatement []string `protobuf:"bytes,4,rep,name=sdl_statement,json=sdlStatement,proto3" json:"sdl_statement,omitempty"` + // The KMS key used to encrypt the database to be created if the database + // should be CMEK protected. + EncryptionConfig *databasepb.EncryptionConfig `protobuf:"bytes,5,opt,name=encryption_config,json=encryptionConfig,proto3" json:"encryption_config,omitempty"` + // Optional SQL dialect (GOOGLESQL or POSTGRESQL). Default: GOOGLESQL. + Dialect *string `protobuf:"bytes,6,opt,name=dialect,proto3,oneof" json:"dialect,omitempty"` +} + +func (x *CreateCloudDatabaseAction) Reset() { + *x = CreateCloudDatabaseAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateCloudDatabaseAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateCloudDatabaseAction) ProtoMessage() {} + +func (x *CreateCloudDatabaseAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateCloudDatabaseAction.ProtoReflect.Descriptor instead. +func (*CreateCloudDatabaseAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{29} +} + +func (x *CreateCloudDatabaseAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *CreateCloudDatabaseAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *CreateCloudDatabaseAction) GetDatabaseId() string { + if x != nil { + return x.DatabaseId + } + return "" +} + +func (x *CreateCloudDatabaseAction) GetSdlStatement() []string { + if x != nil { + return x.SdlStatement + } + return nil +} + +func (x *CreateCloudDatabaseAction) GetEncryptionConfig() *databasepb.EncryptionConfig { + if x != nil { + return x.EncryptionConfig + } + return nil +} + +func (x *CreateCloudDatabaseAction) GetDialect() string { + if x != nil && x.Dialect != nil { + return *x.Dialect + } + return "" +} + +// Action that updates the schema of a Cloud Spanner database. +type UpdateCloudDatabaseDdlAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud database ID (not full path), e.g. "db0". + DatabaseId string `protobuf:"bytes,3,opt,name=database_id,json=databaseId,proto3" json:"database_id,omitempty"` + // SDL statements to apply to the database. + SdlStatement []string `protobuf:"bytes,4,rep,name=sdl_statement,json=sdlStatement,proto3" json:"sdl_statement,omitempty"` + // Op ID can be used to track progress of the update. If set, it must be + // unique per database. If not set, Cloud Spanner will generate operation ID + // automatically. + OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` +} + +func (x *UpdateCloudDatabaseDdlAction) Reset() { + *x = UpdateCloudDatabaseDdlAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateCloudDatabaseDdlAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateCloudDatabaseDdlAction) ProtoMessage() {} + +func (x *UpdateCloudDatabaseDdlAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateCloudDatabaseDdlAction.ProtoReflect.Descriptor instead. +func (*UpdateCloudDatabaseDdlAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{30} +} + +func (x *UpdateCloudDatabaseDdlAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *UpdateCloudDatabaseDdlAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *UpdateCloudDatabaseDdlAction) GetDatabaseId() string { + if x != nil { + return x.DatabaseId + } + return "" +} + +func (x *UpdateCloudDatabaseDdlAction) GetSdlStatement() []string { + if x != nil { + return x.SdlStatement + } + return nil +} + +func (x *UpdateCloudDatabaseDdlAction) GetOperationId() string { + if x != nil { + return x.OperationId + } + return "" +} + +// Action that updates a Cloud Spanner database. +type UpdateCloudDatabaseAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud database name (not full path), e.g. "db0". + DatabaseName string `protobuf:"bytes,3,opt,name=database_name,json=databaseName,proto3" json:"database_name,omitempty"` + // Updated value of enable_drop_protection, this is the only field that has + // supported to be updated. + EnableDropProtection bool `protobuf:"varint,4,opt,name=enable_drop_protection,json=enableDropProtection,proto3" json:"enable_drop_protection,omitempty"` +} + +func (x *UpdateCloudDatabaseAction) Reset() { + *x = UpdateCloudDatabaseAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateCloudDatabaseAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateCloudDatabaseAction) ProtoMessage() {} + +func (x *UpdateCloudDatabaseAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateCloudDatabaseAction.ProtoReflect.Descriptor instead. +func (*UpdateCloudDatabaseAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{31} +} + +func (x *UpdateCloudDatabaseAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *UpdateCloudDatabaseAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *UpdateCloudDatabaseAction) GetDatabaseName() string { + if x != nil { + return x.DatabaseName + } + return "" +} + +func (x *UpdateCloudDatabaseAction) GetEnableDropProtection() bool { + if x != nil { + return x.EnableDropProtection + } + return false +} + +// Action that drops a Cloud Spanner database. +type DropCloudDatabaseAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud database ID (not full path), e.g. "db0". + DatabaseId string `protobuf:"bytes,3,opt,name=database_id,json=databaseId,proto3" json:"database_id,omitempty"` +} + +func (x *DropCloudDatabaseAction) Reset() { + *x = DropCloudDatabaseAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DropCloudDatabaseAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DropCloudDatabaseAction) ProtoMessage() {} + +func (x *DropCloudDatabaseAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DropCloudDatabaseAction.ProtoReflect.Descriptor instead. +func (*DropCloudDatabaseAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{32} +} + +func (x *DropCloudDatabaseAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *DropCloudDatabaseAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *DropCloudDatabaseAction) GetDatabaseId() string { + if x != nil { + return x.DatabaseId + } + return "" +} + +// Action that lists Cloud Spanner databases. +type ListCloudDatabasesAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud instance ID (not path) to list databases from, e.g. "test-instance". + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Number of databases to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // If non-empty, "page_token" should contain a next_page_token + // from a previous ListDatabasesResponse to the same "parent" + // and with the same "filter". + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` +} + +func (x *ListCloudDatabasesAction) Reset() { + *x = ListCloudDatabasesAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListCloudDatabasesAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListCloudDatabasesAction) ProtoMessage() {} + +func (x *ListCloudDatabasesAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListCloudDatabasesAction.ProtoReflect.Descriptor instead. +func (*ListCloudDatabasesAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{33} +} + +func (x *ListCloudDatabasesAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *ListCloudDatabasesAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *ListCloudDatabasesAction) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListCloudDatabasesAction) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +// Action that lists Cloud Spanner databases. +type ListCloudInstancesAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // A filter expression that filters what operations are returned in the + // response. + // The expression must specify the field name, a comparison operator, + // and the value that you want to use for filtering. + // Refer spanner_instance_admin.proto.ListInstancesRequest for + // detail. + Filter *string `protobuf:"bytes,2,opt,name=filter,proto3,oneof" json:"filter,omitempty"` + // Number of instances to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + PageSize *int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3,oneof" json:"page_size,omitempty"` + // If non-empty, "page_token" should contain a next_page_token + // from a previous ListInstancesResponse to the same "parent" + // and with the same "filter". + PageToken *string `protobuf:"bytes,4,opt,name=page_token,json=pageToken,proto3,oneof" json:"page_token,omitempty"` +} + +func (x *ListCloudInstancesAction) Reset() { + *x = ListCloudInstancesAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListCloudInstancesAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListCloudInstancesAction) ProtoMessage() {} + +func (x *ListCloudInstancesAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListCloudInstancesAction.ProtoReflect.Descriptor instead. +func (*ListCloudInstancesAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{34} +} + +func (x *ListCloudInstancesAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *ListCloudInstancesAction) GetFilter() string { + if x != nil && x.Filter != nil { + return *x.Filter + } + return "" +} + +func (x *ListCloudInstancesAction) GetPageSize() int32 { + if x != nil && x.PageSize != nil { + return *x.PageSize + } + return 0 +} + +func (x *ListCloudInstancesAction) GetPageToken() string { + if x != nil && x.PageToken != nil { + return *x.PageToken + } + return "" +} + +// Action that retrieves a Cloud Spanner instance. +type GetCloudInstanceAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud instance ID (not path) to retrieve the instance from, + // e.g. "test-instance". + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` +} + +func (x *GetCloudInstanceAction) Reset() { + *x = GetCloudInstanceAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetCloudInstanceAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetCloudInstanceAction) ProtoMessage() {} + +func (x *GetCloudInstanceAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetCloudInstanceAction.ProtoReflect.Descriptor instead. +func (*GetCloudInstanceAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{35} +} + +func (x *GetCloudInstanceAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *GetCloudInstanceAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +// Action that lists Cloud Spanner database operations. +type ListCloudDatabaseOperationsAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud instance ID (not path) to list database operations from, + // e.g. "test-instance". + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // A filter expression that filters what operations are returned in the + // response. + // The expression must specify the field name, a comparison operator, + // and the value that you want to use for filtering. + // Refer spanner_database_admin.proto.ListDatabaseOperationsRequest for + // detail. + Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` + // Number of databases to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // If non-empty, "page_token" should contain a next_page_token + // from a previous ListDatabaseOperationsResponse to the same "parent" + // and with the same "filter". + PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` +} + +func (x *ListCloudDatabaseOperationsAction) Reset() { + *x = ListCloudDatabaseOperationsAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListCloudDatabaseOperationsAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListCloudDatabaseOperationsAction) ProtoMessage() {} + +func (x *ListCloudDatabaseOperationsAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListCloudDatabaseOperationsAction.ProtoReflect.Descriptor instead. +func (*ListCloudDatabaseOperationsAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{36} +} + +func (x *ListCloudDatabaseOperationsAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *ListCloudDatabaseOperationsAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *ListCloudDatabaseOperationsAction) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +func (x *ListCloudDatabaseOperationsAction) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListCloudDatabaseOperationsAction) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +// Action that restores a Cloud Spanner database from a backup. +type RestoreCloudDatabaseAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud instance ID (not path) containing the backup, e.g. "backup-instance". + BackupInstanceId string `protobuf:"bytes,2,opt,name=backup_instance_id,json=backupInstanceId,proto3" json:"backup_instance_id,omitempty"` + // The id of the backup from which to restore, e.g. "test-backup". + BackupId string `protobuf:"bytes,3,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` + // Cloud instance ID (not path) containing the database, e.g. + // "database-instance". + DatabaseInstanceId string `protobuf:"bytes,4,opt,name=database_instance_id,json=databaseInstanceId,proto3" json:"database_instance_id,omitempty"` + // The id of the database to create and restore to, e.g. "db0". Note that this + // database must not already exist. + DatabaseId string `protobuf:"bytes,5,opt,name=database_id,json=databaseId,proto3" json:"database_id,omitempty"` +} + +func (x *RestoreCloudDatabaseAction) Reset() { + *x = RestoreCloudDatabaseAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RestoreCloudDatabaseAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RestoreCloudDatabaseAction) ProtoMessage() {} + +func (x *RestoreCloudDatabaseAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RestoreCloudDatabaseAction.ProtoReflect.Descriptor instead. +func (*RestoreCloudDatabaseAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{37} +} + +func (x *RestoreCloudDatabaseAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *RestoreCloudDatabaseAction) GetBackupInstanceId() string { + if x != nil { + return x.BackupInstanceId + } + return "" +} + +func (x *RestoreCloudDatabaseAction) GetBackupId() string { + if x != nil { + return x.BackupId + } + return "" +} + +func (x *RestoreCloudDatabaseAction) GetDatabaseInstanceId() string { + if x != nil { + return x.DatabaseInstanceId + } + return "" +} + +func (x *RestoreCloudDatabaseAction) GetDatabaseId() string { + if x != nil { + return x.DatabaseId + } + return "" +} + +// Action that gets a Cloud Spanner database. +type GetCloudDatabaseAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // The id of the database to get, e.g. "db0". + DatabaseId string `protobuf:"bytes,3,opt,name=database_id,json=databaseId,proto3" json:"database_id,omitempty"` +} + +func (x *GetCloudDatabaseAction) Reset() { + *x = GetCloudDatabaseAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetCloudDatabaseAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetCloudDatabaseAction) ProtoMessage() {} + +func (x *GetCloudDatabaseAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetCloudDatabaseAction.ProtoReflect.Descriptor instead. +func (*GetCloudDatabaseAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{38} +} + +func (x *GetCloudDatabaseAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *GetCloudDatabaseAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *GetCloudDatabaseAction) GetDatabaseId() string { + if x != nil { + return x.DatabaseId + } + return "" +} + +// Action that creates a Cloud Spanner database backup. +type CreateCloudBackupAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // The id of the backup to be created, e.g. "test-backup". + BackupId string `protobuf:"bytes,3,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` + // The id of the database from which this backup was + // created, e.g. "db0". Note that this needs to be in the + // same instance as the backup. + DatabaseId string `protobuf:"bytes,4,opt,name=database_id,json=databaseId,proto3" json:"database_id,omitempty"` + // Output only. The expiration time of the backup, which must be at least 6 + // hours and at most 366 days from the time the request is received. + ExpireTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=expire_time,json=expireTime,proto3" json:"expire_time,omitempty"` + // The version time of the backup, which must be within the time range of + // [earliest_version_time, NOW], where earliest_version_time is retrieved by + // cloud spanner frontend API (See details: go/cs-pitr-lite-design). + VersionTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=version_time,json=versionTime,proto3,oneof" json:"version_time,omitempty"` +} + +func (x *CreateCloudBackupAction) Reset() { + *x = CreateCloudBackupAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateCloudBackupAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateCloudBackupAction) ProtoMessage() {} + +func (x *CreateCloudBackupAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateCloudBackupAction.ProtoReflect.Descriptor instead. +func (*CreateCloudBackupAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{39} +} + +func (x *CreateCloudBackupAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *CreateCloudBackupAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *CreateCloudBackupAction) GetBackupId() string { + if x != nil { + return x.BackupId + } + return "" +} + +func (x *CreateCloudBackupAction) GetDatabaseId() string { + if x != nil { + return x.DatabaseId + } + return "" +} + +func (x *CreateCloudBackupAction) GetExpireTime() *timestamppb.Timestamp { + if x != nil { + return x.ExpireTime + } + return nil +} + +func (x *CreateCloudBackupAction) GetVersionTime() *timestamppb.Timestamp { + if x != nil { + return x.VersionTime + } + return nil +} + +// Action that copies a Cloud Spanner database backup. +type CopyCloudBackupAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // The id of the backup to be created, e.g. "test-backup". + BackupId string `protobuf:"bytes,3,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` + // The fully qualified uri of the source backup from which this + // backup was copied. eg. + // "projects//instances//backups/". + SourceBackup string `protobuf:"bytes,4,opt,name=source_backup,json=sourceBackup,proto3" json:"source_backup,omitempty"` + // Output only. The expiration time of the backup, which must be at least 6 + // hours and at most 366 days from the time the request is received. + ExpireTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=expire_time,json=expireTime,proto3" json:"expire_time,omitempty"` +} + +func (x *CopyCloudBackupAction) Reset() { + *x = CopyCloudBackupAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CopyCloudBackupAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CopyCloudBackupAction) ProtoMessage() {} + +func (x *CopyCloudBackupAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CopyCloudBackupAction.ProtoReflect.Descriptor instead. +func (*CopyCloudBackupAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{40} +} + +func (x *CopyCloudBackupAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *CopyCloudBackupAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *CopyCloudBackupAction) GetBackupId() string { + if x != nil { + return x.BackupId + } + return "" +} + +func (x *CopyCloudBackupAction) GetSourceBackup() string { + if x != nil { + return x.SourceBackup + } + return "" +} + +func (x *CopyCloudBackupAction) GetExpireTime() *timestamppb.Timestamp { + if x != nil { + return x.ExpireTime + } + return nil +} + +// Action that gets a Cloud Spanner database backup. +type GetCloudBackupAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // The id of the backup to get, e.g. "test-backup". + BackupId string `protobuf:"bytes,3,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` +} + +func (x *GetCloudBackupAction) Reset() { + *x = GetCloudBackupAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetCloudBackupAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetCloudBackupAction) ProtoMessage() {} + +func (x *GetCloudBackupAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[41] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetCloudBackupAction.ProtoReflect.Descriptor instead. +func (*GetCloudBackupAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{41} +} + +func (x *GetCloudBackupAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *GetCloudBackupAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *GetCloudBackupAction) GetBackupId() string { + if x != nil { + return x.BackupId + } + return "" +} + +// Action that updates a Cloud Spanner database backup. +type UpdateCloudBackupAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // The id of the backup to update, e.g. "test-backup". + BackupId string `protobuf:"bytes,3,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` + // Output only. Updated value of expire_time, this is the only field + // that supported to be updated. + ExpireTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expire_time,json=expireTime,proto3" json:"expire_time,omitempty"` +} + +func (x *UpdateCloudBackupAction) Reset() { + *x = UpdateCloudBackupAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateCloudBackupAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateCloudBackupAction) ProtoMessage() {} + +func (x *UpdateCloudBackupAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateCloudBackupAction.ProtoReflect.Descriptor instead. +func (*UpdateCloudBackupAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{42} +} + +func (x *UpdateCloudBackupAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *UpdateCloudBackupAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *UpdateCloudBackupAction) GetBackupId() string { + if x != nil { + return x.BackupId + } + return "" +} + +func (x *UpdateCloudBackupAction) GetExpireTime() *timestamppb.Timestamp { + if x != nil { + return x.ExpireTime + } + return nil +} + +// Action that deletes a Cloud Spanner database backup. +type DeleteCloudBackupAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud instance ID (not path), e.g. "test-instance". + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // The id of the backup to delete, e.g. "test-backup". + BackupId string `protobuf:"bytes,3,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` +} + +func (x *DeleteCloudBackupAction) Reset() { + *x = DeleteCloudBackupAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteCloudBackupAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteCloudBackupAction) ProtoMessage() {} + +func (x *DeleteCloudBackupAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteCloudBackupAction.ProtoReflect.Descriptor instead. +func (*DeleteCloudBackupAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{43} +} + +func (x *DeleteCloudBackupAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *DeleteCloudBackupAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *DeleteCloudBackupAction) GetBackupId() string { + if x != nil { + return x.BackupId + } + return "" +} + +// Action that lists Cloud Spanner database backups. +type ListCloudBackupsAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud instance ID (not path) to list backups from, e.g. "test-instance". + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // A filter expression that filters backups listed in the response. + // The expression must specify the field name, a comparison operator, + // and the value that you want to use for filtering. + // Refer backup.proto.ListBackupsRequest for detail. + Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` + // Number of backups to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // If non-empty, "page_token" should contain a next_page_token + // from a previous ListBackupsResponse to the same "parent" + // and with the same "filter". + PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` +} + +func (x *ListCloudBackupsAction) Reset() { + *x = ListCloudBackupsAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListCloudBackupsAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListCloudBackupsAction) ProtoMessage() {} + +func (x *ListCloudBackupsAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListCloudBackupsAction.ProtoReflect.Descriptor instead. +func (*ListCloudBackupsAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{44} +} + +func (x *ListCloudBackupsAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *ListCloudBackupsAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *ListCloudBackupsAction) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +func (x *ListCloudBackupsAction) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListCloudBackupsAction) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +// Action that lists Cloud Spanner database backup operations. +type ListCloudBackupOperationsAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Cloud project ID, e.g. "spanner-cloud-systest". + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + // Cloud instance ID (not path) to list backup operations from, + // e.g. "test-instance". + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // A filter expression that filters what operations are returned in the + // response. + // The expression must specify the field name, a comparison operator, + // and the value that you want to use for filtering. + // Refer backup.proto.ListBackupOperationsRequest for detail. + Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` + // Number of backups to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // If non-empty, "page_token" should contain a next_page_token + // from a previous ListBackupOperationsResponse to the same "parent" + // and with the same "filter". + PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` +} + +func (x *ListCloudBackupOperationsAction) Reset() { + *x = ListCloudBackupOperationsAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListCloudBackupOperationsAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListCloudBackupOperationsAction) ProtoMessage() {} + +func (x *ListCloudBackupOperationsAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListCloudBackupOperationsAction.ProtoReflect.Descriptor instead. +func (*ListCloudBackupOperationsAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{45} +} + +func (x *ListCloudBackupOperationsAction) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *ListCloudBackupOperationsAction) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *ListCloudBackupOperationsAction) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +func (x *ListCloudBackupOperationsAction) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListCloudBackupOperationsAction) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +// Action that gets an operation. +type GetOperationAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The name of the operation resource. + Operation string `protobuf:"bytes,1,opt,name=operation,proto3" json:"operation,omitempty"` +} + +func (x *GetOperationAction) Reset() { + *x = GetOperationAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetOperationAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetOperationAction) ProtoMessage() {} + +func (x *GetOperationAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetOperationAction.ProtoReflect.Descriptor instead. +func (*GetOperationAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{46} +} + +func (x *GetOperationAction) GetOperation() string { + if x != nil { + return x.Operation + } + return "" +} + +// Action that cancels an operation. +type CancelOperationAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The name of the operation resource to be cancelled. + Operation string `protobuf:"bytes,1,opt,name=operation,proto3" json:"operation,omitempty"` +} + +func (x *CancelOperationAction) Reset() { + *x = CancelOperationAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CancelOperationAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CancelOperationAction) ProtoMessage() {} + +func (x *CancelOperationAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[47] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CancelOperationAction.ProtoReflect.Descriptor instead. +func (*CancelOperationAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{47} +} + +func (x *CancelOperationAction) GetOperation() string { + if x != nil { + return x.Operation + } + return "" +} + +// Starts a batch read-only transaction in executor. Successful outcomes of this +// action will contain batch_txn_id--the identificator that can be used to start +// the same transaction in other Executors to parallelize partition processing. +// +// Example of a batch read flow: +// 1. Start batch transaction with a timestamp (StartBatchTransactionAction) +// 2. Generate database partitions for a read or query +// (GenerateDbPartitionsForReadAction/GenerateDbPartitionsForQueryAction) +// 3. Call ExecutePartitionAction for some or all partitions, process rows +// 4. Clean up the transaction (CloseBatchTransactionAction). +// +// More sophisticated example, with parallel processing: +// 1. Start batch transaction with a timestamp (StartBatchTransactionAction), +// note the returned BatchTransactionId +// 2. Generate database partitions for a read or query +// (GenerateDbPartitionsForReadAction/GenerateDbPartitionsForQueryAction) +// 3. Distribute the partitions over a pool of workers, along with the +// transaction ID. +// +// In each worker: +// 4-1. StartBatchTransactionAction with the given transaction ID +// 4-2. ExecutePartitionAction for each partition it got, process read results +// 4-3. Close (not cleanup) the transaction (CloseBatchTransactionAction). +// +// When all workers are done: +// 5. Cleanup the transaction (CloseBatchTransactionAction). This can be done +// either by the last worker to finish the job, or by the main Executor that +// initialized this transaction in the first place. It is also possible to clean +// it up with a brand new Executor -- just execute StartBatchTransactionAction +// with the ID, then clean it up right away. +// +// Cleaning up is optional, but recommended. +type StartBatchTransactionAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // To start a new transaction, specify an exact timestamp. Alternatively, an + // existing batch transaction ID can be used. Either one of two must be + // set. + // + // Types that are assignable to Param: + // + // *StartBatchTransactionAction_BatchTxnTime + // *StartBatchTransactionAction_Tid + Param isStartBatchTransactionAction_Param `protobuf_oneof:"param"` + // Database role to assume while performing this action. Setting the + // database_role will enforce additional role-based access checks on this + // action. + CloudDatabaseRole string `protobuf:"bytes,3,opt,name=cloud_database_role,json=cloudDatabaseRole,proto3" json:"cloud_database_role,omitempty"` +} + +func (x *StartBatchTransactionAction) Reset() { + *x = StartBatchTransactionAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartBatchTransactionAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartBatchTransactionAction) ProtoMessage() {} + +func (x *StartBatchTransactionAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartBatchTransactionAction.ProtoReflect.Descriptor instead. +func (*StartBatchTransactionAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{48} +} + +func (m *StartBatchTransactionAction) GetParam() isStartBatchTransactionAction_Param { + if m != nil { + return m.Param + } + return nil +} + +func (x *StartBatchTransactionAction) GetBatchTxnTime() *timestamppb.Timestamp { + if x, ok := x.GetParam().(*StartBatchTransactionAction_BatchTxnTime); ok { + return x.BatchTxnTime + } + return nil +} + +func (x *StartBatchTransactionAction) GetTid() []byte { + if x, ok := x.GetParam().(*StartBatchTransactionAction_Tid); ok { + return x.Tid + } + return nil +} + +func (x *StartBatchTransactionAction) GetCloudDatabaseRole() string { + if x != nil { + return x.CloudDatabaseRole + } + return "" +} + +type isStartBatchTransactionAction_Param interface { + isStartBatchTransactionAction_Param() +} + +type StartBatchTransactionAction_BatchTxnTime struct { + // The exact timestamp to start the batch transaction. + BatchTxnTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=batch_txn_time,json=batchTxnTime,proto3,oneof"` +} + +type StartBatchTransactionAction_Tid struct { + // ID of a batch read-only transaction. It can be used to start the same + // batch transaction on multiple executors and parallelize partition + // processing. + Tid []byte `protobuf:"bytes,2,opt,name=tid,proto3,oneof"` +} + +func (*StartBatchTransactionAction_BatchTxnTime) isStartBatchTransactionAction_Param() {} + +func (*StartBatchTransactionAction_Tid) isStartBatchTransactionAction_Param() {} + +// Closes or cleans up the currently opened batch read-only transaction. +// +// Once a transaction is closed, the Executor can be disposed of or used to +// start start another transaction. Closing a batch transaction in one Executor +// doesn't affect the transaction's state in other Executors that also read from +// it. +// +// When a transaction is cleaned up, it becomes globally invalid. Cleaning up is +// optional, but recommended. +type CloseBatchTransactionAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Indicates whether the transaction needs to be cleaned up. + Cleanup bool `protobuf:"varint,1,opt,name=cleanup,proto3" json:"cleanup,omitempty"` +} + +func (x *CloseBatchTransactionAction) Reset() { + *x = CloseBatchTransactionAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CloseBatchTransactionAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CloseBatchTransactionAction) ProtoMessage() {} + +func (x *CloseBatchTransactionAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[49] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CloseBatchTransactionAction.ProtoReflect.Descriptor instead. +func (*CloseBatchTransactionAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{49} +} + +func (x *CloseBatchTransactionAction) GetCleanup() bool { + if x != nil { + return x.Cleanup + } + return false +} + +// Generate database partitions for the given read. Successful outcomes will +// contain database partitions in the db_partition field. +type GenerateDbPartitionsForReadAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Read to generate partitions for. + Read *ReadAction `protobuf:"bytes,1,opt,name=read,proto3" json:"read,omitempty"` + // Metadata related to the tables involved in the read. + Table []*TableMetadata `protobuf:"bytes,2,rep,name=table,proto3" json:"table,omitempty"` + // Desired size of data in each partition. Spanner doesn't guarantee to + // respect this value. + DesiredBytesPerPartition *int64 `protobuf:"varint,3,opt,name=desired_bytes_per_partition,json=desiredBytesPerPartition,proto3,oneof" json:"desired_bytes_per_partition,omitempty"` + // If set, the desired max number of partitions. Spanner doesn't guarantee to + // respect this value. + MaxPartitionCount *int64 `protobuf:"varint,4,opt,name=max_partition_count,json=maxPartitionCount,proto3,oneof" json:"max_partition_count,omitempty"` +} + +func (x *GenerateDbPartitionsForReadAction) Reset() { + *x = GenerateDbPartitionsForReadAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenerateDbPartitionsForReadAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateDbPartitionsForReadAction) ProtoMessage() {} + +func (x *GenerateDbPartitionsForReadAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[50] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateDbPartitionsForReadAction.ProtoReflect.Descriptor instead. +func (*GenerateDbPartitionsForReadAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{50} +} + +func (x *GenerateDbPartitionsForReadAction) GetRead() *ReadAction { + if x != nil { + return x.Read + } + return nil +} + +func (x *GenerateDbPartitionsForReadAction) GetTable() []*TableMetadata { + if x != nil { + return x.Table + } + return nil +} + +func (x *GenerateDbPartitionsForReadAction) GetDesiredBytesPerPartition() int64 { + if x != nil && x.DesiredBytesPerPartition != nil { + return *x.DesiredBytesPerPartition + } + return 0 +} + +func (x *GenerateDbPartitionsForReadAction) GetMaxPartitionCount() int64 { + if x != nil && x.MaxPartitionCount != nil { + return *x.MaxPartitionCount + } + return 0 +} + +// Generate database partitions for the given query. Successful outcomes will +// contain database partitions in the db_partition field. +type GenerateDbPartitionsForQueryAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Query to generate partitions for. + Query *QueryAction `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` + // Desired size of data in each partition. Spanner doesn't guarantee to + // respect this value. + DesiredBytesPerPartition *int64 `protobuf:"varint,2,opt,name=desired_bytes_per_partition,json=desiredBytesPerPartition,proto3,oneof" json:"desired_bytes_per_partition,omitempty"` +} + +func (x *GenerateDbPartitionsForQueryAction) Reset() { + *x = GenerateDbPartitionsForQueryAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenerateDbPartitionsForQueryAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateDbPartitionsForQueryAction) ProtoMessage() {} + +func (x *GenerateDbPartitionsForQueryAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[51] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateDbPartitionsForQueryAction.ProtoReflect.Descriptor instead. +func (*GenerateDbPartitionsForQueryAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{51} +} + +func (x *GenerateDbPartitionsForQueryAction) GetQuery() *QueryAction { + if x != nil { + return x.Query + } + return nil +} + +func (x *GenerateDbPartitionsForQueryAction) GetDesiredBytesPerPartition() int64 { + if x != nil && x.DesiredBytesPerPartition != nil { + return *x.DesiredBytesPerPartition + } + return 0 +} + +// Identifies a database partition generated for a particular read or query. To +// read rows from the partition, use ExecutePartitionAction. +type BatchPartition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Serialized Partition instance. + Partition []byte `protobuf:"bytes,1,opt,name=partition,proto3" json:"partition,omitempty"` + // The partition token decrypted from partition. + PartitionToken []byte `protobuf:"bytes,2,opt,name=partition_token,json=partitionToken,proto3" json:"partition_token,omitempty"` + // Table name is set iff the partition was generated for a read (as opposed to + // a query). + Table *string `protobuf:"bytes,3,opt,name=table,proto3,oneof" json:"table,omitempty"` + // Index name if the partition was generated for an index read. + Index *string `protobuf:"bytes,4,opt,name=index,proto3,oneof" json:"index,omitempty"` +} + +func (x *BatchPartition) Reset() { + *x = BatchPartition{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchPartition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchPartition) ProtoMessage() {} + +func (x *BatchPartition) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[52] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatchPartition.ProtoReflect.Descriptor instead. +func (*BatchPartition) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{52} +} + +func (x *BatchPartition) GetPartition() []byte { + if x != nil { + return x.Partition + } + return nil +} + +func (x *BatchPartition) GetPartitionToken() []byte { + if x != nil { + return x.PartitionToken + } + return nil +} + +func (x *BatchPartition) GetTable() string { + if x != nil && x.Table != nil { + return *x.Table + } + return "" +} + +func (x *BatchPartition) GetIndex() string { + if x != nil && x.Index != nil { + return *x.Index + } + return "" +} + +// Performs a read or query for the given partitions. This action must be +// executed in the context of the same transaction that was used to generate +// given partitions. +type ExecutePartitionAction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Batch partition to execute on. + Partition *BatchPartition `protobuf:"bytes,1,opt,name=partition,proto3" json:"partition,omitempty"` +} + +func (x *ExecutePartitionAction) Reset() { + *x = ExecutePartitionAction{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExecutePartitionAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExecutePartitionAction) ProtoMessage() {} + +func (x *ExecutePartitionAction) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[53] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExecutePartitionAction.ProtoReflect.Descriptor instead. +func (*ExecutePartitionAction) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{53} +} + +func (x *ExecutePartitionAction) GetPartition() *BatchPartition { + if x != nil { + return x.Partition + } + return nil +} + +// Execute a change stream TVF query. +type ExecuteChangeStreamQuery struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name for this change stream. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Specifies that records with commit_timestamp greater than or equal to + // start_time should be returned. + StartTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + // Specifies that records with commit_timestamp less than or equal to + // end_time should be returned. + EndTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime,proto3,oneof" json:"end_time,omitempty"` + // Specifies which change stream partition to query, based on the content of + // child partitions records. + PartitionToken *string `protobuf:"bytes,4,opt,name=partition_token,json=partitionToken,proto3,oneof" json:"partition_token,omitempty"` + // Read options for this change stream query. + ReadOptions []string `protobuf:"bytes,5,rep,name=read_options,json=readOptions,proto3" json:"read_options,omitempty"` + // Determines how frequently a heartbeat ChangeRecord will be returned in case + // there are no transactions committed in this partition, in milliseconds. + HeartbeatMilliseconds *int32 `protobuf:"varint,6,opt,name=heartbeat_milliseconds,json=heartbeatMilliseconds,proto3,oneof" json:"heartbeat_milliseconds,omitempty"` + // Deadline for this change stream query, in seconds. + DeadlineSeconds *int64 `protobuf:"varint,7,opt,name=deadline_seconds,json=deadlineSeconds,proto3,oneof" json:"deadline_seconds,omitempty"` + // Database role to assume while performing this action. This should only be + // set for cloud requests. Setting the database role will enforce additional + // role-based access checks on this action. + CloudDatabaseRole *string `protobuf:"bytes,8,opt,name=cloud_database_role,json=cloudDatabaseRole,proto3,oneof" json:"cloud_database_role,omitempty"` +} + +func (x *ExecuteChangeStreamQuery) Reset() { + *x = ExecuteChangeStreamQuery{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExecuteChangeStreamQuery) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExecuteChangeStreamQuery) ProtoMessage() {} + +func (x *ExecuteChangeStreamQuery) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExecuteChangeStreamQuery.ProtoReflect.Descriptor instead. +func (*ExecuteChangeStreamQuery) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{54} +} + +func (x *ExecuteChangeStreamQuery) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ExecuteChangeStreamQuery) GetStartTime() *timestamppb.Timestamp { + if x != nil { + return x.StartTime + } + return nil +} + +func (x *ExecuteChangeStreamQuery) GetEndTime() *timestamppb.Timestamp { + if x != nil { + return x.EndTime + } + return nil +} + +func (x *ExecuteChangeStreamQuery) GetPartitionToken() string { + if x != nil && x.PartitionToken != nil { + return *x.PartitionToken + } + return "" +} + +func (x *ExecuteChangeStreamQuery) GetReadOptions() []string { + if x != nil { + return x.ReadOptions + } + return nil +} + +func (x *ExecuteChangeStreamQuery) GetHeartbeatMilliseconds() int32 { + if x != nil && x.HeartbeatMilliseconds != nil { + return *x.HeartbeatMilliseconds + } + return 0 +} + +func (x *ExecuteChangeStreamQuery) GetDeadlineSeconds() int64 { + if x != nil && x.DeadlineSeconds != nil { + return *x.DeadlineSeconds + } + return 0 +} + +func (x *ExecuteChangeStreamQuery) GetCloudDatabaseRole() string { + if x != nil && x.CloudDatabaseRole != nil { + return *x.CloudDatabaseRole + } + return "" +} + +// SpannerActionOutcome defines a result of execution of a single SpannerAction. +type SpannerActionOutcome struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // If an outcome is split into multiple parts, status will be set only in the + // last part. + Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3,oneof" json:"status,omitempty"` + // Transaction timestamp. It must be set for successful committed actions. + CommitTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=commit_time,json=commitTime,proto3,oneof" json:"commit_time,omitempty"` + // Result of a ReadAction. This field must be set for ReadActions even if + // no rows were read. + ReadResult *ReadResult `protobuf:"bytes,3,opt,name=read_result,json=readResult,proto3,oneof" json:"read_result,omitempty"` + // Result of a Query. This field must be set for Queries even if no rows were + // read. + QueryResult *QueryResult `protobuf:"bytes,4,opt,name=query_result,json=queryResult,proto3,oneof" json:"query_result,omitempty"` + // This bit indicates that Spanner has restarted the current transaction. It + // means that the client should replay all the reads and writes. + // Setting it to true is only valid in the context of a read-write + // transaction, as an outcome of a committing FinishTransactionAction. + TransactionRestarted *bool `protobuf:"varint,5,opt,name=transaction_restarted,json=transactionRestarted,proto3,oneof" json:"transaction_restarted,omitempty"` + // In successful StartBatchTransactionAction outcomes, this contains the ID of + // the transaction. + BatchTxnId []byte `protobuf:"bytes,6,opt,name=batch_txn_id,json=batchTxnId,proto3,oneof" json:"batch_txn_id,omitempty"` + // Generated database partitions (result of a + // GenetageDbPartitionsForReadAction/GenerateDbPartitionsForQueryAction). + DbPartition []*BatchPartition `protobuf:"bytes,7,rep,name=db_partition,json=dbPartition,proto3" json:"db_partition,omitempty"` + // Result of admin related actions. + AdminResult *AdminResult `protobuf:"bytes,8,opt,name=admin_result,json=adminResult,proto3,oneof" json:"admin_result,omitempty"` + // Stores rows modified by query in single DML or batch DML action. + // In case of batch DML action, stores 0 as row count of errored DML query. + DmlRowsModified []int64 `protobuf:"varint,9,rep,packed,name=dml_rows_modified,json=dmlRowsModified,proto3" json:"dml_rows_modified,omitempty"` + // Change stream records returned by a change stream query. + ChangeStreamRecords []*ChangeStreamRecord `protobuf:"bytes,10,rep,name=change_stream_records,json=changeStreamRecords,proto3" json:"change_stream_records,omitempty"` +} + +func (x *SpannerActionOutcome) Reset() { + *x = SpannerActionOutcome{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SpannerActionOutcome) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SpannerActionOutcome) ProtoMessage() {} + +func (x *SpannerActionOutcome) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SpannerActionOutcome.ProtoReflect.Descriptor instead. +func (*SpannerActionOutcome) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{55} +} + +func (x *SpannerActionOutcome) GetStatus() *status.Status { + if x != nil { + return x.Status + } + return nil +} + +func (x *SpannerActionOutcome) GetCommitTime() *timestamppb.Timestamp { + if x != nil { + return x.CommitTime + } + return nil +} + +func (x *SpannerActionOutcome) GetReadResult() *ReadResult { + if x != nil { + return x.ReadResult + } + return nil +} + +func (x *SpannerActionOutcome) GetQueryResult() *QueryResult { + if x != nil { + return x.QueryResult + } + return nil +} + +func (x *SpannerActionOutcome) GetTransactionRestarted() bool { + if x != nil && x.TransactionRestarted != nil { + return *x.TransactionRestarted + } + return false +} + +func (x *SpannerActionOutcome) GetBatchTxnId() []byte { + if x != nil { + return x.BatchTxnId + } + return nil +} + +func (x *SpannerActionOutcome) GetDbPartition() []*BatchPartition { + if x != nil { + return x.DbPartition + } + return nil +} + +func (x *SpannerActionOutcome) GetAdminResult() *AdminResult { + if x != nil { + return x.AdminResult + } + return nil +} + +func (x *SpannerActionOutcome) GetDmlRowsModified() []int64 { + if x != nil { + return x.DmlRowsModified + } + return nil +} + +func (x *SpannerActionOutcome) GetChangeStreamRecords() []*ChangeStreamRecord { + if x != nil { + return x.ChangeStreamRecords + } + return nil +} + +// AdminResult contains admin action results, for database/backup/operation. +type AdminResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Results of cloud backup related actions. + BackupResponse *CloudBackupResponse `protobuf:"bytes,1,opt,name=backup_response,json=backupResponse,proto3" json:"backup_response,omitempty"` + // Results of operation related actions. + OperationResponse *OperationResponse `protobuf:"bytes,2,opt,name=operation_response,json=operationResponse,proto3" json:"operation_response,omitempty"` + // Results of database related actions. + DatabaseResponse *CloudDatabaseResponse `protobuf:"bytes,3,opt,name=database_response,json=databaseResponse,proto3" json:"database_response,omitempty"` + // Results of instance related actions. + InstanceResponse *CloudInstanceResponse `protobuf:"bytes,4,opt,name=instance_response,json=instanceResponse,proto3" json:"instance_response,omitempty"` + // Results of instance config related actions. + InstanceConfigResponse *CloudInstanceConfigResponse `protobuf:"bytes,5,opt,name=instance_config_response,json=instanceConfigResponse,proto3" json:"instance_config_response,omitempty"` +} + +func (x *AdminResult) Reset() { + *x = AdminResult{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AdminResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdminResult) ProtoMessage() {} + +func (x *AdminResult) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[56] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AdminResult.ProtoReflect.Descriptor instead. +func (*AdminResult) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{56} +} + +func (x *AdminResult) GetBackupResponse() *CloudBackupResponse { + if x != nil { + return x.BackupResponse + } + return nil +} + +func (x *AdminResult) GetOperationResponse() *OperationResponse { + if x != nil { + return x.OperationResponse + } + return nil +} + +func (x *AdminResult) GetDatabaseResponse() *CloudDatabaseResponse { + if x != nil { + return x.DatabaseResponse + } + return nil +} + +func (x *AdminResult) GetInstanceResponse() *CloudInstanceResponse { + if x != nil { + return x.InstanceResponse + } + return nil +} + +func (x *AdminResult) GetInstanceConfigResponse() *CloudInstanceConfigResponse { + if x != nil { + return x.InstanceConfigResponse + } + return nil +} + +// CloudBackupResponse contains results returned by cloud backup related +// actions. +type CloudBackupResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of backups returned by ListCloudBackupsAction. + ListedBackups []*databasepb.Backup `protobuf:"bytes,1,rep,name=listed_backups,json=listedBackups,proto3" json:"listed_backups,omitempty"` + // List of operations returned by ListCloudBackupOperationsAction. + ListedBackupOperations []*longrunningpb.Operation `protobuf:"bytes,2,rep,name=listed_backup_operations,json=listedBackupOperations,proto3" json:"listed_backup_operations,omitempty"` + // "next_page_token" can be sent in a subsequent list action + // to fetch more of the matching data. + NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` + // Backup returned by GetCloudBackupAction/UpdateCloudBackupAction. + Backup *databasepb.Backup `protobuf:"bytes,4,opt,name=backup,proto3" json:"backup,omitempty"` +} + +func (x *CloudBackupResponse) Reset() { + *x = CloudBackupResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CloudBackupResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CloudBackupResponse) ProtoMessage() {} + +func (x *CloudBackupResponse) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[57] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CloudBackupResponse.ProtoReflect.Descriptor instead. +func (*CloudBackupResponse) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{57} +} + +func (x *CloudBackupResponse) GetListedBackups() []*databasepb.Backup { + if x != nil { + return x.ListedBackups + } + return nil +} + +func (x *CloudBackupResponse) GetListedBackupOperations() []*longrunningpb.Operation { + if x != nil { + return x.ListedBackupOperations + } + return nil +} + +func (x *CloudBackupResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +func (x *CloudBackupResponse) GetBackup() *databasepb.Backup { + if x != nil { + return x.Backup + } + return nil +} + +// OperationResponse contains results returned by operation related actions. +type OperationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of operations returned by ListOperationsAction. + ListedOperations []*longrunningpb.Operation `protobuf:"bytes,1,rep,name=listed_operations,json=listedOperations,proto3" json:"listed_operations,omitempty"` + // "next_page_token" can be sent in a subsequent list action + // to fetch more of the matching data. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` + // Operation returned by GetOperationAction. + Operation *longrunningpb.Operation `protobuf:"bytes,3,opt,name=operation,proto3" json:"operation,omitempty"` +} + +func (x *OperationResponse) Reset() { + *x = OperationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OperationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OperationResponse) ProtoMessage() {} + +func (x *OperationResponse) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[58] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OperationResponse.ProtoReflect.Descriptor instead. +func (*OperationResponse) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{58} +} + +func (x *OperationResponse) GetListedOperations() []*longrunningpb.Operation { + if x != nil { + return x.ListedOperations + } + return nil +} + +func (x *OperationResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +func (x *OperationResponse) GetOperation() *longrunningpb.Operation { + if x != nil { + return x.Operation + } + return nil +} + +// CloudInstanceResponse contains results returned by cloud instance related +// actions. +type CloudInstanceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of instances returned by ListCloudInstancesAction. + ListedInstances []*instancepb.Instance `protobuf:"bytes,1,rep,name=listed_instances,json=listedInstances,proto3" json:"listed_instances,omitempty"` + // "next_page_token" can be sent in a subsequent list action + // to fetch more of the matching data. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` + // Instance returned by GetCloudInstanceAction + Instance *instancepb.Instance `protobuf:"bytes,3,opt,name=instance,proto3" json:"instance,omitempty"` +} + +func (x *CloudInstanceResponse) Reset() { + *x = CloudInstanceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CloudInstanceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CloudInstanceResponse) ProtoMessage() {} + +func (x *CloudInstanceResponse) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[59] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CloudInstanceResponse.ProtoReflect.Descriptor instead. +func (*CloudInstanceResponse) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{59} +} + +func (x *CloudInstanceResponse) GetListedInstances() []*instancepb.Instance { + if x != nil { + return x.ListedInstances + } + return nil +} + +func (x *CloudInstanceResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +func (x *CloudInstanceResponse) GetInstance() *instancepb.Instance { + if x != nil { + return x.Instance + } + return nil +} + +// CloudInstanceConfigResponse contains results returned by cloud instance +// config related actions. +type CloudInstanceConfigResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of instance configs returned by ListCloudInstanceConfigsAction. + ListedInstanceConfigs []*instancepb.InstanceConfig `protobuf:"bytes,1,rep,name=listed_instance_configs,json=listedInstanceConfigs,proto3" json:"listed_instance_configs,omitempty"` + // "next_page_token" can be sent in a subsequent list action + // to fetch more of the matching data. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` + // Instance config returned by GetCloudInstanceConfigAction. + InstanceConfig *instancepb.InstanceConfig `protobuf:"bytes,3,opt,name=instance_config,json=instanceConfig,proto3" json:"instance_config,omitempty"` +} + +func (x *CloudInstanceConfigResponse) Reset() { + *x = CloudInstanceConfigResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CloudInstanceConfigResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CloudInstanceConfigResponse) ProtoMessage() {} + +func (x *CloudInstanceConfigResponse) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[60] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CloudInstanceConfigResponse.ProtoReflect.Descriptor instead. +func (*CloudInstanceConfigResponse) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{60} +} + +func (x *CloudInstanceConfigResponse) GetListedInstanceConfigs() []*instancepb.InstanceConfig { + if x != nil { + return x.ListedInstanceConfigs + } + return nil +} + +func (x *CloudInstanceConfigResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +func (x *CloudInstanceConfigResponse) GetInstanceConfig() *instancepb.InstanceConfig { + if x != nil { + return x.InstanceConfig + } + return nil +} + +// CloudDatabaseResponse contains results returned by cloud database related +// actions. +type CloudDatabaseResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of databases returned by ListCloudDatabasesAction. + ListedDatabases []*databasepb.Database `protobuf:"bytes,1,rep,name=listed_databases,json=listedDatabases,proto3" json:"listed_databases,omitempty"` + // List of operations returned by ListCloudDatabaseOperationsAction. + ListedDatabaseOperations []*longrunningpb.Operation `protobuf:"bytes,2,rep,name=listed_database_operations,json=listedDatabaseOperations,proto3" json:"listed_database_operations,omitempty"` + // "next_page_token" can be sent in a subsequent list action + // to fetch more of the matching data. + NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` + // Database returned by GetCloudDatabaseAction + Database *databasepb.Database `protobuf:"bytes,4,opt,name=database,proto3" json:"database,omitempty"` +} + +func (x *CloudDatabaseResponse) Reset() { + *x = CloudDatabaseResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CloudDatabaseResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CloudDatabaseResponse) ProtoMessage() {} + +func (x *CloudDatabaseResponse) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[61] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CloudDatabaseResponse.ProtoReflect.Descriptor instead. +func (*CloudDatabaseResponse) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{61} +} + +func (x *CloudDatabaseResponse) GetListedDatabases() []*databasepb.Database { + if x != nil { + return x.ListedDatabases + } + return nil +} + +func (x *CloudDatabaseResponse) GetListedDatabaseOperations() []*longrunningpb.Operation { + if x != nil { + return x.ListedDatabaseOperations + } + return nil +} + +func (x *CloudDatabaseResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + +func (x *CloudDatabaseResponse) GetDatabase() *databasepb.Database { + if x != nil { + return x.Database + } + return nil +} + +// ReadResult contains rows read. +type ReadResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Table name. + Table string `protobuf:"bytes,1,opt,name=table,proto3" json:"table,omitempty"` + // Index name, if read from an index. + Index *string `protobuf:"bytes,2,opt,name=index,proto3,oneof" json:"index,omitempty"` + // Request index (multiread only). + RequestIndex *int32 `protobuf:"varint,3,opt,name=request_index,json=requestIndex,proto3,oneof" json:"request_index,omitempty"` + // Rows read. Each row is a struct with multiple fields, one for each column + // in read result. All rows have the same type. + Row []*ValueList `protobuf:"bytes,4,rep,name=row,proto3" json:"row,omitempty"` + // The type of rows read. It must be set if at least one row was read. + RowType *spannerpb.StructType `protobuf:"bytes,5,opt,name=row_type,json=rowType,proto3,oneof" json:"row_type,omitempty"` +} + +func (x *ReadResult) Reset() { + *x = ReadResult{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReadResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReadResult) ProtoMessage() {} + +func (x *ReadResult) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[62] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReadResult.ProtoReflect.Descriptor instead. +func (*ReadResult) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{62} +} + +func (x *ReadResult) GetTable() string { + if x != nil { + return x.Table + } + return "" +} + +func (x *ReadResult) GetIndex() string { + if x != nil && x.Index != nil { + return *x.Index + } + return "" +} + +func (x *ReadResult) GetRequestIndex() int32 { + if x != nil && x.RequestIndex != nil { + return *x.RequestIndex + } + return 0 +} + +func (x *ReadResult) GetRow() []*ValueList { + if x != nil { + return x.Row + } + return nil +} + +func (x *ReadResult) GetRowType() *spannerpb.StructType { + if x != nil { + return x.RowType + } + return nil +} + +// QueryResult contains result of a Query. +type QueryResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Rows read. Each row is a struct with multiple fields, one for each column + // in read result. All rows have the same type. + Row []*ValueList `protobuf:"bytes,1,rep,name=row,proto3" json:"row,omitempty"` + // The type of rows read. It must be set if at least one row was read. + RowType *spannerpb.StructType `protobuf:"bytes,2,opt,name=row_type,json=rowType,proto3,oneof" json:"row_type,omitempty"` +} + +func (x *QueryResult) Reset() { + *x = QueryResult{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryResult) ProtoMessage() {} + +func (x *QueryResult) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[63] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryResult.ProtoReflect.Descriptor instead. +func (*QueryResult) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{63} +} + +func (x *QueryResult) GetRow() []*ValueList { + if x != nil { + return x.Row + } + return nil +} + +func (x *QueryResult) GetRowType() *spannerpb.StructType { + if x != nil { + return x.RowType + } + return nil +} + +// Raw ChangeStream records. +// Encodes one of: DataChangeRecord, HeartbeatRecord, ChildPartitionsRecord +// returned from the ChangeStream API. +type ChangeStreamRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Record represents one type of the change stream record. + // + // Types that are assignable to Record: + // + // *ChangeStreamRecord_DataChange + // *ChangeStreamRecord_ChildPartition + // *ChangeStreamRecord_Heartbeat + Record isChangeStreamRecord_Record `protobuf_oneof:"record"` +} + +func (x *ChangeStreamRecord) Reset() { + *x = ChangeStreamRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangeStreamRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangeStreamRecord) ProtoMessage() {} + +func (x *ChangeStreamRecord) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[64] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChangeStreamRecord.ProtoReflect.Descriptor instead. +func (*ChangeStreamRecord) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{64} +} + +func (m *ChangeStreamRecord) GetRecord() isChangeStreamRecord_Record { + if m != nil { + return m.Record + } + return nil +} + +func (x *ChangeStreamRecord) GetDataChange() *DataChangeRecord { + if x, ok := x.GetRecord().(*ChangeStreamRecord_DataChange); ok { + return x.DataChange + } + return nil +} + +func (x *ChangeStreamRecord) GetChildPartition() *ChildPartitionsRecord { + if x, ok := x.GetRecord().(*ChangeStreamRecord_ChildPartition); ok { + return x.ChildPartition + } + return nil +} + +func (x *ChangeStreamRecord) GetHeartbeat() *HeartbeatRecord { + if x, ok := x.GetRecord().(*ChangeStreamRecord_Heartbeat); ok { + return x.Heartbeat + } + return nil +} + +type isChangeStreamRecord_Record interface { + isChangeStreamRecord_Record() +} + +type ChangeStreamRecord_DataChange struct { + // Data change record. + DataChange *DataChangeRecord `protobuf:"bytes,1,opt,name=data_change,json=dataChange,proto3,oneof"` +} + +type ChangeStreamRecord_ChildPartition struct { + // Child partitions record. + ChildPartition *ChildPartitionsRecord `protobuf:"bytes,2,opt,name=child_partition,json=childPartition,proto3,oneof"` +} + +type ChangeStreamRecord_Heartbeat struct { + // Heartbeat record. + Heartbeat *HeartbeatRecord `protobuf:"bytes,3,opt,name=heartbeat,proto3,oneof"` +} + +func (*ChangeStreamRecord_DataChange) isChangeStreamRecord_Record() {} + +func (*ChangeStreamRecord_ChildPartition) isChangeStreamRecord_Record() {} + +func (*ChangeStreamRecord_Heartbeat) isChangeStreamRecord_Record() {} + +// ChangeStream data change record. +type DataChangeRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The timestamp in which the change was committed. + CommitTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=commit_time,json=commitTime,proto3" json:"commit_time,omitempty"` + // The sequence number for the record within the transaction. + RecordSequence string `protobuf:"bytes,2,opt,name=record_sequence,json=recordSequence,proto3" json:"record_sequence,omitempty"` + // A globally unique string that represents the transaction in which the + // change was committed. + TransactionId string `protobuf:"bytes,3,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + // Indicates whether this is the last record for a transaction in the current + // partition. + IsLastRecord bool `protobuf:"varint,4,opt,name=is_last_record,json=isLastRecord,proto3" json:"is_last_record,omitempty"` + // Name of the table affected by the change. + Table string `protobuf:"bytes,5,opt,name=table,proto3" json:"table,omitempty"` + // Column types defined in the schema. + ColumnTypes []*DataChangeRecord_ColumnType `protobuf:"bytes,6,rep,name=column_types,json=columnTypes,proto3" json:"column_types,omitempty"` + // Changes made in the transaction. + Mods []*DataChangeRecord_Mod `protobuf:"bytes,7,rep,name=mods,proto3" json:"mods,omitempty"` + // Describes the type of change. One of INSERT, UPDATE or DELETE. + ModType string `protobuf:"bytes,8,opt,name=mod_type,json=modType,proto3" json:"mod_type,omitempty"` + // One of value capture type: NEW_VALUES, OLD_VALUES, OLD_AND_NEW_VALUES. + ValueCaptureType string `protobuf:"bytes,9,opt,name=value_capture_type,json=valueCaptureType,proto3" json:"value_capture_type,omitempty"` + // Number of records in transactions. + RecordCount int64 `protobuf:"varint,10,opt,name=record_count,json=recordCount,proto3" json:"record_count,omitempty"` + // Number of partitions in transactions. + PartitionCount int64 `protobuf:"varint,11,opt,name=partition_count,json=partitionCount,proto3" json:"partition_count,omitempty"` + // Transaction tag info. + TransactionTag string `protobuf:"bytes,12,opt,name=transaction_tag,json=transactionTag,proto3" json:"transaction_tag,omitempty"` + // Whether the transaction is a system transactionn. + IsSystemTransaction bool `protobuf:"varint,13,opt,name=is_system_transaction,json=isSystemTransaction,proto3" json:"is_system_transaction,omitempty"` +} + +func (x *DataChangeRecord) Reset() { + *x = DataChangeRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataChangeRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataChangeRecord) ProtoMessage() {} + +func (x *DataChangeRecord) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[65] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataChangeRecord.ProtoReflect.Descriptor instead. +func (*DataChangeRecord) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{65} +} + +func (x *DataChangeRecord) GetCommitTime() *timestamppb.Timestamp { + if x != nil { + return x.CommitTime + } + return nil +} + +func (x *DataChangeRecord) GetRecordSequence() string { + if x != nil { + return x.RecordSequence + } + return "" +} + +func (x *DataChangeRecord) GetTransactionId() string { + if x != nil { + return x.TransactionId + } + return "" +} + +func (x *DataChangeRecord) GetIsLastRecord() bool { + if x != nil { + return x.IsLastRecord + } + return false +} + +func (x *DataChangeRecord) GetTable() string { + if x != nil { + return x.Table + } + return "" +} + +func (x *DataChangeRecord) GetColumnTypes() []*DataChangeRecord_ColumnType { + if x != nil { + return x.ColumnTypes + } + return nil +} + +func (x *DataChangeRecord) GetMods() []*DataChangeRecord_Mod { + if x != nil { + return x.Mods + } + return nil +} + +func (x *DataChangeRecord) GetModType() string { + if x != nil { + return x.ModType + } + return "" +} + +func (x *DataChangeRecord) GetValueCaptureType() string { + if x != nil { + return x.ValueCaptureType + } + return "" +} + +func (x *DataChangeRecord) GetRecordCount() int64 { + if x != nil { + return x.RecordCount + } + return 0 +} + +func (x *DataChangeRecord) GetPartitionCount() int64 { + if x != nil { + return x.PartitionCount + } + return 0 +} + +func (x *DataChangeRecord) GetTransactionTag() string { + if x != nil { + return x.TransactionTag + } + return "" +} + +func (x *DataChangeRecord) GetIsSystemTransaction() bool { + if x != nil { + return x.IsSystemTransaction + } + return false +} + +// ChangeStream child partition record. +type ChildPartitionsRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Data change records returned from child partitions in this child partitions + // record will have a commit timestamp greater than or equal to start_time. + StartTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + // A monotonically increasing sequence number that can be used to define the + // ordering of the child partitions record when there are multiple child + // partitions records returned with the same start_time in a particular + // partition. + RecordSequence string `protobuf:"bytes,2,opt,name=record_sequence,json=recordSequence,proto3" json:"record_sequence,omitempty"` + // A set of child partitions and their associated information. + ChildPartitions []*ChildPartitionsRecord_ChildPartition `protobuf:"bytes,3,rep,name=child_partitions,json=childPartitions,proto3" json:"child_partitions,omitempty"` +} + +func (x *ChildPartitionsRecord) Reset() { + *x = ChildPartitionsRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChildPartitionsRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChildPartitionsRecord) ProtoMessage() {} + +func (x *ChildPartitionsRecord) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[66] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChildPartitionsRecord.ProtoReflect.Descriptor instead. +func (*ChildPartitionsRecord) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{66} +} + +func (x *ChildPartitionsRecord) GetStartTime() *timestamppb.Timestamp { + if x != nil { + return x.StartTime + } + return nil +} + +func (x *ChildPartitionsRecord) GetRecordSequence() string { + if x != nil { + return x.RecordSequence + } + return "" +} + +func (x *ChildPartitionsRecord) GetChildPartitions() []*ChildPartitionsRecord_ChildPartition { + if x != nil { + return x.ChildPartitions + } + return nil +} + +// ChangeStream heartbeat record. +type HeartbeatRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Timestamp for this heartbeat check. + HeartbeatTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=heartbeat_time,json=heartbeatTime,proto3" json:"heartbeat_time,omitempty"` +} + +func (x *HeartbeatRecord) Reset() { + *x = HeartbeatRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HeartbeatRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HeartbeatRecord) ProtoMessage() {} + +func (x *HeartbeatRecord) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[67] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HeartbeatRecord.ProtoReflect.Descriptor instead. +func (*HeartbeatRecord) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{67} +} + +func (x *HeartbeatRecord) GetHeartbeatTime() *timestamppb.Timestamp { + if x != nil { + return x.HeartbeatTime + } + return nil +} + +// Parameter that bind to placeholders in the SQL string +type QueryAction_Parameter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of the parameter (with no leading @). + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Type of the parameter. + Type *spannerpb.Type `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + // Value of the parameter. + Value *Value `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *QueryAction_Parameter) Reset() { + *x = QueryAction_Parameter{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryAction_Parameter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryAction_Parameter) ProtoMessage() {} + +func (x *QueryAction_Parameter) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[68] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryAction_Parameter.ProtoReflect.Descriptor instead. +func (*QueryAction_Parameter) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{4, 0} +} + +func (x *QueryAction_Parameter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *QueryAction_Parameter) GetType() *spannerpb.Type { + if x != nil { + return x.Type + } + return nil +} + +func (x *QueryAction_Parameter) GetValue() *Value { + if x != nil { + return x.Value + } + return nil +} + +// Arguments to Insert, InsertOrUpdate, and Replace operations. +type MutationAction_InsertArgs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The names of the columns to be written. + Column []string `protobuf:"bytes,1,rep,name=column,proto3" json:"column,omitempty"` + // Type information for the "values" entries below. + Type []*spannerpb.Type `protobuf:"bytes,2,rep,name=type,proto3" json:"type,omitempty"` + // The values to be written. + Values []*ValueList `protobuf:"bytes,3,rep,name=values,proto3" json:"values,omitempty"` +} + +func (x *MutationAction_InsertArgs) Reset() { + *x = MutationAction_InsertArgs{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MutationAction_InsertArgs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MutationAction_InsertArgs) ProtoMessage() {} + +func (x *MutationAction_InsertArgs) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[69] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MutationAction_InsertArgs.ProtoReflect.Descriptor instead. +func (*MutationAction_InsertArgs) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{11, 0} +} + +func (x *MutationAction_InsertArgs) GetColumn() []string { + if x != nil { + return x.Column + } + return nil +} + +func (x *MutationAction_InsertArgs) GetType() []*spannerpb.Type { + if x != nil { + return x.Type + } + return nil +} + +func (x *MutationAction_InsertArgs) GetValues() []*ValueList { + if x != nil { + return x.Values + } + return nil +} + +// Arguments to Update. +type MutationAction_UpdateArgs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The columns to be updated. Identical to InsertArgs.column. + Column []string `protobuf:"bytes,1,rep,name=column,proto3" json:"column,omitempty"` + // Type information for "values". Identical to InsertArgs.type. + Type []*spannerpb.Type `protobuf:"bytes,2,rep,name=type,proto3" json:"type,omitempty"` + // The values to be updated. Identical to InsertArgs.values. + Values []*ValueList `protobuf:"bytes,3,rep,name=values,proto3" json:"values,omitempty"` +} + +func (x *MutationAction_UpdateArgs) Reset() { + *x = MutationAction_UpdateArgs{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MutationAction_UpdateArgs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MutationAction_UpdateArgs) ProtoMessage() {} + +func (x *MutationAction_UpdateArgs) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[70] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MutationAction_UpdateArgs.ProtoReflect.Descriptor instead. +func (*MutationAction_UpdateArgs) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{11, 1} +} + +func (x *MutationAction_UpdateArgs) GetColumn() []string { + if x != nil { + return x.Column + } + return nil +} + +func (x *MutationAction_UpdateArgs) GetType() []*spannerpb.Type { + if x != nil { + return x.Type + } + return nil +} + +func (x *MutationAction_UpdateArgs) GetValues() []*ValueList { + if x != nil { + return x.Values + } + return nil +} + +// Mod represents the write action that will be perform to a table. Each mod +// will specify exactly one action, from insert, update, insert_or_update, +// replace and delete. +type MutationAction_Mod struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The table to write. + Table string `protobuf:"bytes,1,opt,name=table,proto3" json:"table,omitempty"` + // Exactly one of the remaining elements may be present. + // Insert new rows into "table". + Insert *MutationAction_InsertArgs `protobuf:"bytes,2,opt,name=insert,proto3" json:"insert,omitempty"` + // Update columns stored in existing rows of "table". + Update *MutationAction_UpdateArgs `protobuf:"bytes,3,opt,name=update,proto3" json:"update,omitempty"` + // Insert or update existing rows of "table". + InsertOrUpdate *MutationAction_InsertArgs `protobuf:"bytes,4,opt,name=insert_or_update,json=insertOrUpdate,proto3" json:"insert_or_update,omitempty"` + // Replace existing rows of "table". + Replace *MutationAction_InsertArgs `protobuf:"bytes,5,opt,name=replace,proto3" json:"replace,omitempty"` + // Delete rows from "table". + DeleteKeys *KeySet `protobuf:"bytes,6,opt,name=delete_keys,json=deleteKeys,proto3" json:"delete_keys,omitempty"` +} + +func (x *MutationAction_Mod) Reset() { + *x = MutationAction_Mod{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MutationAction_Mod) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MutationAction_Mod) ProtoMessage() {} + +func (x *MutationAction_Mod) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[71] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MutationAction_Mod.ProtoReflect.Descriptor instead. +func (*MutationAction_Mod) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{11, 2} +} + +func (x *MutationAction_Mod) GetTable() string { + if x != nil { + return x.Table + } + return "" +} + +func (x *MutationAction_Mod) GetInsert() *MutationAction_InsertArgs { + if x != nil { + return x.Insert + } + return nil +} + +func (x *MutationAction_Mod) GetUpdate() *MutationAction_UpdateArgs { + if x != nil { + return x.Update + } + return nil +} + +func (x *MutationAction_Mod) GetInsertOrUpdate() *MutationAction_InsertArgs { + if x != nil { + return x.InsertOrUpdate + } + return nil +} + +func (x *MutationAction_Mod) GetReplace() *MutationAction_InsertArgs { + if x != nil { + return x.Replace + } + return nil +} + +func (x *MutationAction_Mod) GetDeleteKeys() *KeySet { + if x != nil { + return x.DeleteKeys + } + return nil +} + +type PartitionedUpdateAction_ExecutePartitionedUpdateOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // RPC Priority + RpcPriority *spannerpb.RequestOptions_Priority `protobuf:"varint,1,opt,name=rpc_priority,json=rpcPriority,proto3,enum=google.spanner.v1.RequestOptions_Priority,oneof" json:"rpc_priority,omitempty"` + // Transaction tag + Tag *string `protobuf:"bytes,2,opt,name=tag,proto3,oneof" json:"tag,omitempty"` +} + +func (x *PartitionedUpdateAction_ExecutePartitionedUpdateOptions) Reset() { + *x = PartitionedUpdateAction_ExecutePartitionedUpdateOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartitionedUpdateAction_ExecutePartitionedUpdateOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartitionedUpdateAction_ExecutePartitionedUpdateOptions) ProtoMessage() {} + +func (x *PartitionedUpdateAction_ExecutePartitionedUpdateOptions) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[72] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartitionedUpdateAction_ExecutePartitionedUpdateOptions.ProtoReflect.Descriptor instead. +func (*PartitionedUpdateAction_ExecutePartitionedUpdateOptions) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{13, 0} +} + +func (x *PartitionedUpdateAction_ExecutePartitionedUpdateOptions) GetRpcPriority() spannerpb.RequestOptions_Priority { + if x != nil && x.RpcPriority != nil { + return *x.RpcPriority + } + return spannerpb.RequestOptions_PRIORITY_UNSPECIFIED +} + +func (x *PartitionedUpdateAction_ExecutePartitionedUpdateOptions) GetTag() string { + if x != nil && x.Tag != nil { + return *x.Tag + } + return "" +} + +// Column types. +type DataChangeRecord_ColumnType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Column name. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Column type in JSON. + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + // Whether the column is a primary key column. + IsPrimaryKey bool `protobuf:"varint,3,opt,name=is_primary_key,json=isPrimaryKey,proto3" json:"is_primary_key,omitempty"` + // The position of the column as defined in the schema. + OrdinalPosition int64 `protobuf:"varint,4,opt,name=ordinal_position,json=ordinalPosition,proto3" json:"ordinal_position,omitempty"` +} + +func (x *DataChangeRecord_ColumnType) Reset() { + *x = DataChangeRecord_ColumnType{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataChangeRecord_ColumnType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataChangeRecord_ColumnType) ProtoMessage() {} + +func (x *DataChangeRecord_ColumnType) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[76] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataChangeRecord_ColumnType.ProtoReflect.Descriptor instead. +func (*DataChangeRecord_ColumnType) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{65, 0} +} + +func (x *DataChangeRecord_ColumnType) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *DataChangeRecord_ColumnType) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *DataChangeRecord_ColumnType) GetIsPrimaryKey() bool { + if x != nil { + return x.IsPrimaryKey + } + return false +} + +func (x *DataChangeRecord_ColumnType) GetOrdinalPosition() int64 { + if x != nil { + return x.OrdinalPosition + } + return 0 +} + +// Describes the changes that were made. +type DataChangeRecord_Mod struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The primary key values in JSON. + Keys string `protobuf:"bytes,1,opt,name=keys,proto3" json:"keys,omitempty"` + // The new values of the changed columns in JSON. Only contain the non-key + // columns. + NewValues string `protobuf:"bytes,2,opt,name=new_values,json=newValues,proto3" json:"new_values,omitempty"` + // The old values of the changed columns in JSON. Only contain the non-key + // columns. + OldValues string `protobuf:"bytes,3,opt,name=old_values,json=oldValues,proto3" json:"old_values,omitempty"` +} + +func (x *DataChangeRecord_Mod) Reset() { + *x = DataChangeRecord_Mod{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataChangeRecord_Mod) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataChangeRecord_Mod) ProtoMessage() {} + +func (x *DataChangeRecord_Mod) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[77] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataChangeRecord_Mod.ProtoReflect.Descriptor instead. +func (*DataChangeRecord_Mod) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{65, 1} +} + +func (x *DataChangeRecord_Mod) GetKeys() string { + if x != nil { + return x.Keys + } + return "" +} + +func (x *DataChangeRecord_Mod) GetNewValues() string { + if x != nil { + return x.NewValues + } + return "" +} + +func (x *DataChangeRecord_Mod) GetOldValues() string { + if x != nil { + return x.OldValues + } + return "" +} + +// A single child partition. +type ChildPartitionsRecord_ChildPartition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Partition token string used to identify the child partition in queries. + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + // Parent partition tokens of this child partition. + ParentPartitionTokens []string `protobuf:"bytes,2,rep,name=parent_partition_tokens,json=parentPartitionTokens,proto3" json:"parent_partition_tokens,omitempty"` +} + +func (x *ChildPartitionsRecord_ChildPartition) Reset() { + *x = ChildPartitionsRecord_ChildPartition{} + if protoimpl.UnsafeEnabled { + mi := &file_cloud_executor_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChildPartitionsRecord_ChildPartition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChildPartitionsRecord_ChildPartition) ProtoMessage() {} + +func (x *ChildPartitionsRecord_ChildPartition) ProtoReflect() protoreflect.Message { + mi := &file_cloud_executor_proto_msgTypes[78] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChildPartitionsRecord_ChildPartition.ProtoReflect.Descriptor instead. +func (*ChildPartitionsRecord_ChildPartition) Descriptor() ([]byte, []int) { + return file_cloud_executor_proto_rawDescGZIP(), []int{66, 0} +} + +func (x *ChildPartitionsRecord_ChildPartition) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *ChildPartitionsRecord_ChildPartition) GetParentPartitionTokens() []string { + if x != nil { + return x.ParentPartitionTokens + } + return nil +} + +var File_cloud_executor_proto protoreflect.FileDescriptor + +var file_cloud_executor_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, + 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, + 0x2f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x79, 0x70, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7b, 0x0a, 0x19, 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x41, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x70, + 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x85, 0x01, 0x0a, 0x1a, 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x41, + 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, + 0x4a, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x70, + 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x63, 0x6f, + 0x6d, 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x22, 0xbd, 0x0b, 0x0a, 0x0d, + 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, + 0x0d, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x12, 0x4a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x4d, + 0x0a, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x69, + 0x73, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x12, 0x3c, 0x0a, + 0x04, 0x72, 0x65, 0x61, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x3f, 0x0a, 0x05, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x0a, 0x08, + 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x75, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x03, 0x64, 0x6d, 0x6c, 0x18, 0x17, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x6d, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x64, 0x6d, + 0x6c, 0x12, 0x49, 0x0a, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x6d, 0x6c, 0x18, 0x18, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, + 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x6d, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x08, 0x62, 0x61, 0x74, 0x63, 0x68, 0x44, 0x6d, 0x6c, 0x12, 0x48, 0x0a, 0x05, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x75, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x1b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x05, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x61, 0x0a, + 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x78, 0x6e, + 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x78, 0x6e, + 0x12, 0x61, 0x0a, 0x0f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, + 0x74, 0x78, 0x6e, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x54, 0x78, 0x6e, 0x12, 0x7e, 0x0a, 0x1b, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, + 0x64, 0x62, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x72, 0x65, + 0x61, 0x64, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x44, 0x62, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x61, + 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x44, 0x62, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x61, 0x64, 0x12, 0x81, 0x01, 0x0a, 0x1c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x5f, 0x64, 0x62, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x44, 0x62, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x44, 0x62, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x61, 0x0a, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x75, 0x0a, 0x1b, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xad, 0x01, 0x0a, 0x0a, + 0x52, 0x65, 0x61, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x19, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x12, 0x36, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4b, + 0x65, 0x79, 0x53, 0x65, 0x74, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xf2, 0x01, 0x0a, 0x0b, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x73, + 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x49, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x85, 0x01, 0x0a, 0x09, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x44, 0x6d, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, + 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, + 0x3b, 0x0a, 0x17, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x66, + 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x00, 0x52, 0x15, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x66, + 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18, + 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x66, 0x5f, 0x73, + 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x22, 0x53, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x44, 0x6d, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x07, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x22, 0xe2, 0x04, + 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x19, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6e, 0x75, + 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x06, 0x69, 0x73, 0x4e, 0x75, + 0x6c, 0x6c, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0a, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x4a, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x48, 0x00, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0d, 0x64, + 0x61, 0x74, 0x65, 0x44, 0x61, 0x79, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x0a, 0x13, + 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x11, 0x69, 0x73, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x48, + 0x0a, 0x0b, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x72, + 0x72, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x61, 0x72, 0x72, 0x61, + 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x01, 0x52, 0x09, 0x61, 0x72, 0x72, 0x61, 0x79, 0x54, 0x79, + 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, + 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x3b, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x42, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x54, 0x79, + 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x22, 0x60, 0x0a, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x43, + 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0f, + 0x0a, 0x0b, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x10, 0x02, 0x12, + 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, 0x03, + 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x10, 0x04, 0x42, + 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x06, 0x4b, 0x65, 0x79, + 0x53, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x05, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x12, 0x3a, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x44, + 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0xab, 0x06, 0x0a, 0x0e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x03, 0x6d, 0x6f, 0x64, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, + 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x4d, 0x6f, 0x64, 0x52, 0x03, 0x6d, 0x6f, 0x64, 0x1a, 0x90, 0x01, 0x0a, 0x0a, 0x49, 0x6e, + 0x73, 0x65, 0x72, 0x74, 0x41, 0x72, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, + 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x90, 0x01, 0x0a, + 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x3d, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, + 0xb0, 0x03, 0x0a, 0x03, 0x4d, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x4d, 0x0a, + 0x06, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, + 0x41, 0x72, 0x67, 0x73, 0x52, 0x06, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x12, 0x4d, 0x0a, 0x06, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, + 0x72, 0x67, 0x73, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x10, 0x69, + 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x72, 0x67, 0x73, 0x52, 0x0e, 0x69, 0x6e, + 0x73, 0x65, 0x72, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x4f, 0x0a, 0x07, + 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, + 0x41, 0x72, 0x67, 0x73, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, 0x43, 0x0a, + 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, + 0x79, 0x73, 0x22, 0x5e, 0x0a, 0x14, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x75, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x08, 0x6d, 0x75, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x82, 0x03, 0x0a, 0x17, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x72, + 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x53, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, + 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x1a, 0xa5, 0x01, 0x0a, 0x1f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x52, 0x0a, 0x0c, 0x72, 0x70, 0x63, 0x5f, 0x70, + 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x70, 0x63, + 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x74, + 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, + 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x70, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0a, 0x0a, 0x08, 0x5f, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe5, 0x02, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x88, + 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x65, 0x64, 0x12, 0x69, + 0x0a, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x48, 0x01, 0x52, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6f, + 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0xd7, 0x03, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, + 0x2d, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x10, 0x73, 0x74, + 0x61, 0x6c, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x3b, + 0x0a, 0x19, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x48, 0x00, 0x52, 0x16, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x6d, + 0x61, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x13, 0x6d, 0x61, + 0x78, 0x53, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x78, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x48, 0x00, 0x52, 0x14, 0x65, 0x78, 0x61, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x74, 0x72, + 0x6f, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, + 0x6f, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x00, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2e, 0x0a, 0x13, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x72, 0x65, + 0x61, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x72, 0x6f, + 0x6f, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x6f, 0x6f, + 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, + 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6d, + 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x62, 0x61, 0x74, + 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, + 0x69, 0x63, 0x72, 0x6f, 0x73, 0x42, 0x12, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0xb2, 0x01, 0x0a, 0x0d, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x42, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x12, 0x49, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0x51, + 0x0a, 0x0e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x3d, 0x0a, 0x1b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x1e, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x74, 0x69, 0x63, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x74, 0x69, 0x63, + 0x22, 0x9e, 0x01, 0x0a, 0x17, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x04, + 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x35, 0x0a, 0x04, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, + 0x49, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x42, 0x41, 0x4e, 0x44, 0x4f, 0x4e, 0x10, + 0x02, 0x22, 0x98, 0x17, 0x0a, 0x0b, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x7b, 0x0a, 0x1b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x18, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x7b, + 0x0a, 0x1b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x18, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x7b, 0x0a, 0x1b, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x18, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x75, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x5f, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x70, 0x0a, 0x15, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x6c, 0x69, + 0x73, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x73, 0x12, 0x6b, 0x0a, 0x15, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x6b, + 0x0a, 0x15, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x15, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x00, 0x52, 0x13, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x68, 0x0a, 0x14, 0x6c, 0x69, 0x73, 0x74, + 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x12, + 0x6c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x73, 0x12, 0x62, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x15, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x19, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x64, 0x64, 0x6c, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x44, 0x64, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x16, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x44, 0x64, 0x6c, 0x12, 0x6b, 0x0a, 0x15, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x13, 0x64, 0x72, 0x6f, 0x70, 0x5f, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, + 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x64, 0x72, 0x6f, + 0x70, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x68, + 0x0a, 0x14, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x12, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x1e, 0x6c, 0x69, 0x73, + 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x1b, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x6e, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, + 0x62, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x10, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x5f, 0x0a, 0x11, 0x63, 0x6f, + 0x70, 0x79, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x6f, 0x70, 0x79, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x5c, 0x0a, 0x10, 0x67, + 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x65, 0x74, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x65, 0x0a, 0x13, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x12, 0x65, 0x0a, 0x13, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x62, 0x0a, 0x12, 0x6c, 0x69, 0x73, 0x74, 0x5f, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x17, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x7e, 0x0a, 0x1c, 0x6c, + 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x19, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x0d, 0x67, + 0x65, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x67, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x5e, 0x0a, 0x10, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x0f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd6, 0x01, 0x0a, + 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x24, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x61, + 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x26, 0x0a, + 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x5e, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x6b, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x65, + 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x24, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0xa2, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x08, 0x70, 0x61, + 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, + 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, + 0x0a, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, + 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x97, 0x03, 0x0a, 0x19, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x6f, + 0x64, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, 0x70, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, + 0x6e, 0x67, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x59, 0x0a, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, + 0x13, 0x0a, 0x11, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x75, + 0x6e, 0x69, 0x74, 0x73, 0x22, 0xa2, 0x03, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, + 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2e, + 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x6e, 0x69, + 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x48, 0x02, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x59, + 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, + 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x22, 0x5b, 0x0a, 0x19, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0xad, 0x02, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x64, 0x6c, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x64, + 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x5f, 0x0a, 0x11, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x07, 0x64, + 0x69, 0x61, 0x6c, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, + 0x64, 0x69, 0x61, 0x6c, 0x65, 0x63, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x64, + 0x69, 0x61, 0x6c, 0x65, 0x63, 0x74, 0x22, 0xc7, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x44, 0x64, + 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x64, 0x6c, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0c, 0x73, 0x64, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, + 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x22, 0xb6, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, + 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x23, + 0x0a, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x72, + 0x6f, 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x14, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x72, 0x6f, 0x70, 0x50, + 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7a, 0x0a, 0x17, 0x44, 0x72, 0x6f, + 0x70, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x96, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xc4, + 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x06, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x08, 0x70, 0x61, + 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, + 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, + 0x07, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x70, 0x61, 0x67, + 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x58, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x22, + 0xb7, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xd9, 0x01, 0x0a, 0x1a, 0x52, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x79, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, + 0x22, 0xae, 0x02, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0b, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, + 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0c, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, + 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, + 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x22, 0xdb, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x40, 0x0a, + 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, + 0x73, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x49, 0x64, 0x22, 0xb8, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, + 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x40, 0x0a, + 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, + 0x76, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x22, 0xac, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, + 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, + 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xb5, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x32, + 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x35, 0x0a, 0x15, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xae, 0x01, 0x0a, 0x1b, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x0e, 0x62, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x74, 0x78, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, + 0x0c, 0x62, 0x61, 0x74, 0x63, 0x68, 0x54, 0x78, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x03, 0x74, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x74, 0x69, + 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x6f, 0x6c, + 0x65, 0x42, 0x07, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x22, 0x37, 0x0a, 0x1b, 0x43, 0x6c, + 0x6f, 0x73, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x65, + 0x61, 0x6e, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6c, 0x65, 0x61, + 0x6e, 0x75, 0x70, 0x22, 0xd1, 0x02, 0x0a, 0x21, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x44, 0x62, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x52, + 0x65, 0x61, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x04, 0x72, 0x65, 0x61, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x3f, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, + 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x42, 0x0a, 0x1b, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, + 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x18, 0x64, + 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x50, 0x65, 0x72, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x13, 0x6d, 0x61, + 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, + 0x1e, 0x0a, 0x1c, 0x5f, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x16, 0x0a, 0x14, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xc7, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x44, 0x62, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x46, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, + 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x42, 0x0a, + 0x1b, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, + 0x65, 0x72, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x48, 0x00, 0x52, 0x18, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x50, 0x65, 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, + 0x01, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0xa1, 0x01, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x05, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x01, + 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x62, 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x48, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x80, 0x04, 0x0a, 0x18, 0x45, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, + 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0e, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, + 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x16, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, + 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x48, 0x02, 0x52, 0x15, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x4d, + 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2e, + 0x0a, 0x10, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x0f, 0x64, 0x65, 0x61, 0x64, + 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x88, 0x01, 0x01, 0x12, 0x33, + 0x0a, 0x13, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x11, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x6f, 0x6c, 0x65, + 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, + 0x61, 0x74, 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x42, + 0x13, 0x0a, 0x11, 0x5f, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0xb1, 0x06, 0x0a, + 0x14, 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, + 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, + 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x02, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x88, 0x01, 0x01, 0x12, 0x4f, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x03, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x04, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x88, 0x01, + 0x01, 0x12, 0x25, 0x0a, 0x0c, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x78, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x05, 0x52, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, + 0x54, 0x78, 0x6e, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x4d, 0x0a, 0x0c, 0x64, 0x62, 0x5f, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x62, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x06, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x6d, 0x6c, 0x5f, + 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x03, 0x52, 0x0f, 0x64, 0x6d, 0x6c, 0x52, 0x6f, 0x77, 0x73, 0x4d, 0x6f, 0x64, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x12, 0x62, 0x0a, 0x15, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x0a, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x52, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x42, 0x0f, + 0x0a, 0x0d, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x78, 0x6e, 0x5f, 0x69, 0x64, 0x42, + 0x0f, 0x0a, 0x0d, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0xf8, 0x03, 0x0a, 0x0b, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x58, 0x0a, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0e, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x12, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x18, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x52, 0x16, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa9, 0x02, 0x0a, 0x13, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x73, 0x12, 0x57, 0x0a, 0x18, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, + 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x40, 0x0a, 0x06, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, + 0x06, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, + 0x11, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, + 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x3b, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, + 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xde, + 0x01, 0x0a, 0x15, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x6c, 0x69, 0x73, 0x74, + 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x0f, + 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, + 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, + 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x46, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, + 0x8a, 0x02, 0x0a, 0x1b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x68, 0x0a, 0x17, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x15, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, + 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x59, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xbb, 0x02, 0x0a, + 0x15, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x0f, 0x6c, 0x69, + 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x5b, 0x0a, + 0x1a, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, + 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x18, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, + 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x46, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, + 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x64, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x88, 0x02, 0x0a, 0x0a, 0x52, + 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, + 0x19, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x48, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x88, 0x01, 0x01, 0x12, 0x37, 0x0a, 0x03, 0x72, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x03, 0x72, 0x6f, 0x77, 0x12, 0x3d, 0x0a, + 0x08, 0x72, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x48, 0x02, + 0x52, 0x07, 0x72, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, + 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x72, 0x6f, 0x77, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x37, 0x0a, 0x03, 0x72, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x03, 0x72, 0x6f, 0x77, 0x12, 0x3d, + 0x0a, 0x08, 0x72, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x48, + 0x00, 0x52, 0x07, 0x72, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, + 0x09, 0x5f, 0x72, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x9a, 0x02, 0x0a, 0x12, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x12, 0x5c, 0x0a, 0x0f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x48, 0x00, + 0x52, 0x0e, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x4b, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x48, 0x00, 0x52, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x42, 0x08, 0x0a, + 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0xd0, 0x06, 0x0a, 0x10, 0x44, 0x61, 0x74, 0x61, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x3b, 0x0a, 0x0b, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, + 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0c, 0x69, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x73, 0x12, 0x44, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x4d, 0x6f, + 0x64, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x6f, 0x64, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x74, + 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x61, 0x67, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x61, 0x67, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x73, 0x5f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x73, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x85, 0x01, 0x0a, 0x0a, 0x43, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x50, 0x72, 0x69, 0x6d, + 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, + 0x6c, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x1a, 0x57, 0x0a, 0x03, 0x4d, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, + 0x6e, 0x65, 0x77, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x6e, 0x65, 0x77, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, + 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6f, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xc8, 0x02, 0x0a, 0x15, 0x43, + 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x10, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x5e, 0x0a, 0x0e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x36, 0x0a, + 0x17, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x54, 0x0a, 0x0f, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, + 0x61, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x41, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x72, + 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x68, 0x65, + 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x32, 0xcc, 0x01, 0x0a, 0x14, + 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x50, + 0x72, 0x6f, 0x78, 0x79, 0x12, 0x89, 0x01, 0x0a, 0x12, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x35, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x41, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, + 0x1a, 0x28, 0xca, 0x41, 0x25, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2d, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x42, 0x78, 0x0a, 0x1e, 0x63, 0x6f, + 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x12, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x40, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x70, 0x62, 0x3b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x6f, 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_cloud_executor_proto_rawDescOnce sync.Once + file_cloud_executor_proto_rawDescData = file_cloud_executor_proto_rawDesc +) + +func file_cloud_executor_proto_rawDescGZIP() []byte { + file_cloud_executor_proto_rawDescOnce.Do(func() { + file_cloud_executor_proto_rawDescData = protoimpl.X.CompressGZIP(file_cloud_executor_proto_rawDescData) + }) + return file_cloud_executor_proto_rawDescData +} + +var file_cloud_executor_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_cloud_executor_proto_msgTypes = make([]protoimpl.MessageInfo, 79) +var file_cloud_executor_proto_goTypes = []interface{}{ + (KeyRange_Type)(0), // 0: google.spanner.executor.v1.KeyRange.Type + (FinishTransactionAction_Mode)(0), // 1: google.spanner.executor.v1.FinishTransactionAction.Mode + (*SpannerAsyncActionRequest)(nil), // 2: google.spanner.executor.v1.SpannerAsyncActionRequest + (*SpannerAsyncActionResponse)(nil), // 3: google.spanner.executor.v1.SpannerAsyncActionResponse + (*SpannerAction)(nil), // 4: google.spanner.executor.v1.SpannerAction + (*ReadAction)(nil), // 5: google.spanner.executor.v1.ReadAction + (*QueryAction)(nil), // 6: google.spanner.executor.v1.QueryAction + (*DmlAction)(nil), // 7: google.spanner.executor.v1.DmlAction + (*BatchDmlAction)(nil), // 8: google.spanner.executor.v1.BatchDmlAction + (*Value)(nil), // 9: google.spanner.executor.v1.Value + (*KeyRange)(nil), // 10: google.spanner.executor.v1.KeyRange + (*KeySet)(nil), // 11: google.spanner.executor.v1.KeySet + (*ValueList)(nil), // 12: google.spanner.executor.v1.ValueList + (*MutationAction)(nil), // 13: google.spanner.executor.v1.MutationAction + (*WriteMutationsAction)(nil), // 14: google.spanner.executor.v1.WriteMutationsAction + (*PartitionedUpdateAction)(nil), // 15: google.spanner.executor.v1.PartitionedUpdateAction + (*StartTransactionAction)(nil), // 16: google.spanner.executor.v1.StartTransactionAction + (*Concurrency)(nil), // 17: google.spanner.executor.v1.Concurrency + (*TableMetadata)(nil), // 18: google.spanner.executor.v1.TableMetadata + (*ColumnMetadata)(nil), // 19: google.spanner.executor.v1.ColumnMetadata + (*TransactionExecutionOptions)(nil), // 20: google.spanner.executor.v1.TransactionExecutionOptions + (*FinishTransactionAction)(nil), // 21: google.spanner.executor.v1.FinishTransactionAction + (*AdminAction)(nil), // 22: google.spanner.executor.v1.AdminAction + (*CreateUserInstanceConfigAction)(nil), // 23: google.spanner.executor.v1.CreateUserInstanceConfigAction + (*UpdateUserInstanceConfigAction)(nil), // 24: google.spanner.executor.v1.UpdateUserInstanceConfigAction + (*GetCloudInstanceConfigAction)(nil), // 25: google.spanner.executor.v1.GetCloudInstanceConfigAction + (*DeleteUserInstanceConfigAction)(nil), // 26: google.spanner.executor.v1.DeleteUserInstanceConfigAction + (*ListCloudInstanceConfigsAction)(nil), // 27: google.spanner.executor.v1.ListCloudInstanceConfigsAction + (*CreateCloudInstanceAction)(nil), // 28: google.spanner.executor.v1.CreateCloudInstanceAction + (*UpdateCloudInstanceAction)(nil), // 29: google.spanner.executor.v1.UpdateCloudInstanceAction + (*DeleteCloudInstanceAction)(nil), // 30: google.spanner.executor.v1.DeleteCloudInstanceAction + (*CreateCloudDatabaseAction)(nil), // 31: google.spanner.executor.v1.CreateCloudDatabaseAction + (*UpdateCloudDatabaseDdlAction)(nil), // 32: google.spanner.executor.v1.UpdateCloudDatabaseDdlAction + (*UpdateCloudDatabaseAction)(nil), // 33: google.spanner.executor.v1.UpdateCloudDatabaseAction + (*DropCloudDatabaseAction)(nil), // 34: google.spanner.executor.v1.DropCloudDatabaseAction + (*ListCloudDatabasesAction)(nil), // 35: google.spanner.executor.v1.ListCloudDatabasesAction + (*ListCloudInstancesAction)(nil), // 36: google.spanner.executor.v1.ListCloudInstancesAction + (*GetCloudInstanceAction)(nil), // 37: google.spanner.executor.v1.GetCloudInstanceAction + (*ListCloudDatabaseOperationsAction)(nil), // 38: google.spanner.executor.v1.ListCloudDatabaseOperationsAction + (*RestoreCloudDatabaseAction)(nil), // 39: google.spanner.executor.v1.RestoreCloudDatabaseAction + (*GetCloudDatabaseAction)(nil), // 40: google.spanner.executor.v1.GetCloudDatabaseAction + (*CreateCloudBackupAction)(nil), // 41: google.spanner.executor.v1.CreateCloudBackupAction + (*CopyCloudBackupAction)(nil), // 42: google.spanner.executor.v1.CopyCloudBackupAction + (*GetCloudBackupAction)(nil), // 43: google.spanner.executor.v1.GetCloudBackupAction + (*UpdateCloudBackupAction)(nil), // 44: google.spanner.executor.v1.UpdateCloudBackupAction + (*DeleteCloudBackupAction)(nil), // 45: google.spanner.executor.v1.DeleteCloudBackupAction + (*ListCloudBackupsAction)(nil), // 46: google.spanner.executor.v1.ListCloudBackupsAction + (*ListCloudBackupOperationsAction)(nil), // 47: google.spanner.executor.v1.ListCloudBackupOperationsAction + (*GetOperationAction)(nil), // 48: google.spanner.executor.v1.GetOperationAction + (*CancelOperationAction)(nil), // 49: google.spanner.executor.v1.CancelOperationAction + (*StartBatchTransactionAction)(nil), // 50: google.spanner.executor.v1.StartBatchTransactionAction + (*CloseBatchTransactionAction)(nil), // 51: google.spanner.executor.v1.CloseBatchTransactionAction + (*GenerateDbPartitionsForReadAction)(nil), // 52: google.spanner.executor.v1.GenerateDbPartitionsForReadAction + (*GenerateDbPartitionsForQueryAction)(nil), // 53: google.spanner.executor.v1.GenerateDbPartitionsForQueryAction + (*BatchPartition)(nil), // 54: google.spanner.executor.v1.BatchPartition + (*ExecutePartitionAction)(nil), // 55: google.spanner.executor.v1.ExecutePartitionAction + (*ExecuteChangeStreamQuery)(nil), // 56: google.spanner.executor.v1.ExecuteChangeStreamQuery + (*SpannerActionOutcome)(nil), // 57: google.spanner.executor.v1.SpannerActionOutcome + (*AdminResult)(nil), // 58: google.spanner.executor.v1.AdminResult + (*CloudBackupResponse)(nil), // 59: google.spanner.executor.v1.CloudBackupResponse + (*OperationResponse)(nil), // 60: google.spanner.executor.v1.OperationResponse + (*CloudInstanceResponse)(nil), // 61: google.spanner.executor.v1.CloudInstanceResponse + (*CloudInstanceConfigResponse)(nil), // 62: google.spanner.executor.v1.CloudInstanceConfigResponse + (*CloudDatabaseResponse)(nil), // 63: google.spanner.executor.v1.CloudDatabaseResponse + (*ReadResult)(nil), // 64: google.spanner.executor.v1.ReadResult + (*QueryResult)(nil), // 65: google.spanner.executor.v1.QueryResult + (*ChangeStreamRecord)(nil), // 66: google.spanner.executor.v1.ChangeStreamRecord + (*DataChangeRecord)(nil), // 67: google.spanner.executor.v1.DataChangeRecord + (*ChildPartitionsRecord)(nil), // 68: google.spanner.executor.v1.ChildPartitionsRecord + (*HeartbeatRecord)(nil), // 69: google.spanner.executor.v1.HeartbeatRecord + (*QueryAction_Parameter)(nil), // 70: google.spanner.executor.v1.QueryAction.Parameter + (*MutationAction_InsertArgs)(nil), // 71: google.spanner.executor.v1.MutationAction.InsertArgs + (*MutationAction_UpdateArgs)(nil), // 72: google.spanner.executor.v1.MutationAction.UpdateArgs + (*MutationAction_Mod)(nil), // 73: google.spanner.executor.v1.MutationAction.Mod + (*PartitionedUpdateAction_ExecutePartitionedUpdateOptions)(nil), // 74: google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions + nil, // 75: google.spanner.executor.v1.UpdateUserInstanceConfigAction.LabelsEntry + nil, // 76: google.spanner.executor.v1.CreateCloudInstanceAction.LabelsEntry + nil, // 77: google.spanner.executor.v1.UpdateCloudInstanceAction.LabelsEntry + (*DataChangeRecord_ColumnType)(nil), // 78: google.spanner.executor.v1.DataChangeRecord.ColumnType + (*DataChangeRecord_Mod)(nil), // 79: google.spanner.executor.v1.DataChangeRecord.Mod + (*ChildPartitionsRecord_ChildPartition)(nil), // 80: google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition + (*timestamppb.Timestamp)(nil), // 81: google.protobuf.Timestamp + (*spannerpb.Type)(nil), // 82: google.spanner.v1.Type + (*instancepb.ReplicaInfo)(nil), // 83: google.spanner.admin.instance.v1.ReplicaInfo + (*databasepb.EncryptionConfig)(nil), // 84: google.spanner.admin.database.v1.EncryptionConfig + (*status.Status)(nil), // 85: google.rpc.Status + (*databasepb.Backup)(nil), // 86: google.spanner.admin.database.v1.Backup + (*longrunningpb.Operation)(nil), // 87: google.longrunning.Operation + (*instancepb.Instance)(nil), // 88: google.spanner.admin.instance.v1.Instance + (*instancepb.InstanceConfig)(nil), // 89: google.spanner.admin.instance.v1.InstanceConfig + (*databasepb.Database)(nil), // 90: google.spanner.admin.database.v1.Database + (*spannerpb.StructType)(nil), // 91: google.spanner.v1.StructType + (spannerpb.RequestOptions_Priority)(0), // 92: google.spanner.v1.RequestOptions.Priority +} +var file_cloud_executor_proto_depIdxs = []int32{ + 4, // 0: google.spanner.executor.v1.SpannerAsyncActionRequest.action:type_name -> google.spanner.executor.v1.SpannerAction + 57, // 1: google.spanner.executor.v1.SpannerAsyncActionResponse.outcome:type_name -> google.spanner.executor.v1.SpannerActionOutcome + 16, // 2: google.spanner.executor.v1.SpannerAction.start:type_name -> google.spanner.executor.v1.StartTransactionAction + 21, // 3: google.spanner.executor.v1.SpannerAction.finish:type_name -> google.spanner.executor.v1.FinishTransactionAction + 5, // 4: google.spanner.executor.v1.SpannerAction.read:type_name -> google.spanner.executor.v1.ReadAction + 6, // 5: google.spanner.executor.v1.SpannerAction.query:type_name -> google.spanner.executor.v1.QueryAction + 13, // 6: google.spanner.executor.v1.SpannerAction.mutation:type_name -> google.spanner.executor.v1.MutationAction + 7, // 7: google.spanner.executor.v1.SpannerAction.dml:type_name -> google.spanner.executor.v1.DmlAction + 8, // 8: google.spanner.executor.v1.SpannerAction.batch_dml:type_name -> google.spanner.executor.v1.BatchDmlAction + 14, // 9: google.spanner.executor.v1.SpannerAction.write:type_name -> google.spanner.executor.v1.WriteMutationsAction + 15, // 10: google.spanner.executor.v1.SpannerAction.partitioned_update:type_name -> google.spanner.executor.v1.PartitionedUpdateAction + 22, // 11: google.spanner.executor.v1.SpannerAction.admin:type_name -> google.spanner.executor.v1.AdminAction + 50, // 12: google.spanner.executor.v1.SpannerAction.start_batch_txn:type_name -> google.spanner.executor.v1.StartBatchTransactionAction + 51, // 13: google.spanner.executor.v1.SpannerAction.close_batch_txn:type_name -> google.spanner.executor.v1.CloseBatchTransactionAction + 52, // 14: google.spanner.executor.v1.SpannerAction.generate_db_partitions_read:type_name -> google.spanner.executor.v1.GenerateDbPartitionsForReadAction + 53, // 15: google.spanner.executor.v1.SpannerAction.generate_db_partitions_query:type_name -> google.spanner.executor.v1.GenerateDbPartitionsForQueryAction + 55, // 16: google.spanner.executor.v1.SpannerAction.execute_partition:type_name -> google.spanner.executor.v1.ExecutePartitionAction + 56, // 17: google.spanner.executor.v1.SpannerAction.execute_change_stream_query:type_name -> google.spanner.executor.v1.ExecuteChangeStreamQuery + 11, // 18: google.spanner.executor.v1.ReadAction.keys:type_name -> google.spanner.executor.v1.KeySet + 70, // 19: google.spanner.executor.v1.QueryAction.params:type_name -> google.spanner.executor.v1.QueryAction.Parameter + 6, // 20: google.spanner.executor.v1.DmlAction.update:type_name -> google.spanner.executor.v1.QueryAction + 6, // 21: google.spanner.executor.v1.BatchDmlAction.updates:type_name -> google.spanner.executor.v1.QueryAction + 12, // 22: google.spanner.executor.v1.Value.struct_value:type_name -> google.spanner.executor.v1.ValueList + 81, // 23: google.spanner.executor.v1.Value.timestamp_value:type_name -> google.protobuf.Timestamp + 12, // 24: google.spanner.executor.v1.Value.array_value:type_name -> google.spanner.executor.v1.ValueList + 82, // 25: google.spanner.executor.v1.Value.array_type:type_name -> google.spanner.v1.Type + 12, // 26: google.spanner.executor.v1.KeyRange.start:type_name -> google.spanner.executor.v1.ValueList + 12, // 27: google.spanner.executor.v1.KeyRange.limit:type_name -> google.spanner.executor.v1.ValueList + 0, // 28: google.spanner.executor.v1.KeyRange.type:type_name -> google.spanner.executor.v1.KeyRange.Type + 12, // 29: google.spanner.executor.v1.KeySet.point:type_name -> google.spanner.executor.v1.ValueList + 10, // 30: google.spanner.executor.v1.KeySet.range:type_name -> google.spanner.executor.v1.KeyRange + 9, // 31: google.spanner.executor.v1.ValueList.value:type_name -> google.spanner.executor.v1.Value + 73, // 32: google.spanner.executor.v1.MutationAction.mod:type_name -> google.spanner.executor.v1.MutationAction.Mod + 13, // 33: google.spanner.executor.v1.WriteMutationsAction.mutation:type_name -> google.spanner.executor.v1.MutationAction + 74, // 34: google.spanner.executor.v1.PartitionedUpdateAction.options:type_name -> google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions + 6, // 35: google.spanner.executor.v1.PartitionedUpdateAction.update:type_name -> google.spanner.executor.v1.QueryAction + 17, // 36: google.spanner.executor.v1.StartTransactionAction.concurrency:type_name -> google.spanner.executor.v1.Concurrency + 18, // 37: google.spanner.executor.v1.StartTransactionAction.table:type_name -> google.spanner.executor.v1.TableMetadata + 20, // 38: google.spanner.executor.v1.StartTransactionAction.execution_options:type_name -> google.spanner.executor.v1.TransactionExecutionOptions + 19, // 39: google.spanner.executor.v1.TableMetadata.column:type_name -> google.spanner.executor.v1.ColumnMetadata + 19, // 40: google.spanner.executor.v1.TableMetadata.key_column:type_name -> google.spanner.executor.v1.ColumnMetadata + 82, // 41: google.spanner.executor.v1.ColumnMetadata.type:type_name -> google.spanner.v1.Type + 1, // 42: google.spanner.executor.v1.FinishTransactionAction.mode:type_name -> google.spanner.executor.v1.FinishTransactionAction.Mode + 23, // 43: google.spanner.executor.v1.AdminAction.create_user_instance_config:type_name -> google.spanner.executor.v1.CreateUserInstanceConfigAction + 24, // 44: google.spanner.executor.v1.AdminAction.update_user_instance_config:type_name -> google.spanner.executor.v1.UpdateUserInstanceConfigAction + 26, // 45: google.spanner.executor.v1.AdminAction.delete_user_instance_config:type_name -> google.spanner.executor.v1.DeleteUserInstanceConfigAction + 25, // 46: google.spanner.executor.v1.AdminAction.get_cloud_instance_config:type_name -> google.spanner.executor.v1.GetCloudInstanceConfigAction + 27, // 47: google.spanner.executor.v1.AdminAction.list_instance_configs:type_name -> google.spanner.executor.v1.ListCloudInstanceConfigsAction + 28, // 48: google.spanner.executor.v1.AdminAction.create_cloud_instance:type_name -> google.spanner.executor.v1.CreateCloudInstanceAction + 29, // 49: google.spanner.executor.v1.AdminAction.update_cloud_instance:type_name -> google.spanner.executor.v1.UpdateCloudInstanceAction + 30, // 50: google.spanner.executor.v1.AdminAction.delete_cloud_instance:type_name -> google.spanner.executor.v1.DeleteCloudInstanceAction + 36, // 51: google.spanner.executor.v1.AdminAction.list_cloud_instances:type_name -> google.spanner.executor.v1.ListCloudInstancesAction + 37, // 52: google.spanner.executor.v1.AdminAction.get_cloud_instance:type_name -> google.spanner.executor.v1.GetCloudInstanceAction + 31, // 53: google.spanner.executor.v1.AdminAction.create_cloud_database:type_name -> google.spanner.executor.v1.CreateCloudDatabaseAction + 32, // 54: google.spanner.executor.v1.AdminAction.update_cloud_database_ddl:type_name -> google.spanner.executor.v1.UpdateCloudDatabaseDdlAction + 33, // 55: google.spanner.executor.v1.AdminAction.update_cloud_database:type_name -> google.spanner.executor.v1.UpdateCloudDatabaseAction + 34, // 56: google.spanner.executor.v1.AdminAction.drop_cloud_database:type_name -> google.spanner.executor.v1.DropCloudDatabaseAction + 35, // 57: google.spanner.executor.v1.AdminAction.list_cloud_databases:type_name -> google.spanner.executor.v1.ListCloudDatabasesAction + 38, // 58: google.spanner.executor.v1.AdminAction.list_cloud_database_operations:type_name -> google.spanner.executor.v1.ListCloudDatabaseOperationsAction + 39, // 59: google.spanner.executor.v1.AdminAction.restore_cloud_database:type_name -> google.spanner.executor.v1.RestoreCloudDatabaseAction + 40, // 60: google.spanner.executor.v1.AdminAction.get_cloud_database:type_name -> google.spanner.executor.v1.GetCloudDatabaseAction + 41, // 61: google.spanner.executor.v1.AdminAction.create_cloud_backup:type_name -> google.spanner.executor.v1.CreateCloudBackupAction + 42, // 62: google.spanner.executor.v1.AdminAction.copy_cloud_backup:type_name -> google.spanner.executor.v1.CopyCloudBackupAction + 43, // 63: google.spanner.executor.v1.AdminAction.get_cloud_backup:type_name -> google.spanner.executor.v1.GetCloudBackupAction + 44, // 64: google.spanner.executor.v1.AdminAction.update_cloud_backup:type_name -> google.spanner.executor.v1.UpdateCloudBackupAction + 45, // 65: google.spanner.executor.v1.AdminAction.delete_cloud_backup:type_name -> google.spanner.executor.v1.DeleteCloudBackupAction + 46, // 66: google.spanner.executor.v1.AdminAction.list_cloud_backups:type_name -> google.spanner.executor.v1.ListCloudBackupsAction + 47, // 67: google.spanner.executor.v1.AdminAction.list_cloud_backup_operations:type_name -> google.spanner.executor.v1.ListCloudBackupOperationsAction + 48, // 68: google.spanner.executor.v1.AdminAction.get_operation:type_name -> google.spanner.executor.v1.GetOperationAction + 49, // 69: google.spanner.executor.v1.AdminAction.cancel_operation:type_name -> google.spanner.executor.v1.CancelOperationAction + 83, // 70: google.spanner.executor.v1.CreateUserInstanceConfigAction.replicas:type_name -> google.spanner.admin.instance.v1.ReplicaInfo + 75, // 71: google.spanner.executor.v1.UpdateUserInstanceConfigAction.labels:type_name -> google.spanner.executor.v1.UpdateUserInstanceConfigAction.LabelsEntry + 76, // 72: google.spanner.executor.v1.CreateCloudInstanceAction.labels:type_name -> google.spanner.executor.v1.CreateCloudInstanceAction.LabelsEntry + 77, // 73: google.spanner.executor.v1.UpdateCloudInstanceAction.labels:type_name -> google.spanner.executor.v1.UpdateCloudInstanceAction.LabelsEntry + 84, // 74: google.spanner.executor.v1.CreateCloudDatabaseAction.encryption_config:type_name -> google.spanner.admin.database.v1.EncryptionConfig + 81, // 75: google.spanner.executor.v1.CreateCloudBackupAction.expire_time:type_name -> google.protobuf.Timestamp + 81, // 76: google.spanner.executor.v1.CreateCloudBackupAction.version_time:type_name -> google.protobuf.Timestamp + 81, // 77: google.spanner.executor.v1.CopyCloudBackupAction.expire_time:type_name -> google.protobuf.Timestamp + 81, // 78: google.spanner.executor.v1.UpdateCloudBackupAction.expire_time:type_name -> google.protobuf.Timestamp + 81, // 79: google.spanner.executor.v1.StartBatchTransactionAction.batch_txn_time:type_name -> google.protobuf.Timestamp + 5, // 80: google.spanner.executor.v1.GenerateDbPartitionsForReadAction.read:type_name -> google.spanner.executor.v1.ReadAction + 18, // 81: google.spanner.executor.v1.GenerateDbPartitionsForReadAction.table:type_name -> google.spanner.executor.v1.TableMetadata + 6, // 82: google.spanner.executor.v1.GenerateDbPartitionsForQueryAction.query:type_name -> google.spanner.executor.v1.QueryAction + 54, // 83: google.spanner.executor.v1.ExecutePartitionAction.partition:type_name -> google.spanner.executor.v1.BatchPartition + 81, // 84: google.spanner.executor.v1.ExecuteChangeStreamQuery.start_time:type_name -> google.protobuf.Timestamp + 81, // 85: google.spanner.executor.v1.ExecuteChangeStreamQuery.end_time:type_name -> google.protobuf.Timestamp + 85, // 86: google.spanner.executor.v1.SpannerActionOutcome.status:type_name -> google.rpc.Status + 81, // 87: google.spanner.executor.v1.SpannerActionOutcome.commit_time:type_name -> google.protobuf.Timestamp + 64, // 88: google.spanner.executor.v1.SpannerActionOutcome.read_result:type_name -> google.spanner.executor.v1.ReadResult + 65, // 89: google.spanner.executor.v1.SpannerActionOutcome.query_result:type_name -> google.spanner.executor.v1.QueryResult + 54, // 90: google.spanner.executor.v1.SpannerActionOutcome.db_partition:type_name -> google.spanner.executor.v1.BatchPartition + 58, // 91: google.spanner.executor.v1.SpannerActionOutcome.admin_result:type_name -> google.spanner.executor.v1.AdminResult + 66, // 92: google.spanner.executor.v1.SpannerActionOutcome.change_stream_records:type_name -> google.spanner.executor.v1.ChangeStreamRecord + 59, // 93: google.spanner.executor.v1.AdminResult.backup_response:type_name -> google.spanner.executor.v1.CloudBackupResponse + 60, // 94: google.spanner.executor.v1.AdminResult.operation_response:type_name -> google.spanner.executor.v1.OperationResponse + 63, // 95: google.spanner.executor.v1.AdminResult.database_response:type_name -> google.spanner.executor.v1.CloudDatabaseResponse + 61, // 96: google.spanner.executor.v1.AdminResult.instance_response:type_name -> google.spanner.executor.v1.CloudInstanceResponse + 62, // 97: google.spanner.executor.v1.AdminResult.instance_config_response:type_name -> google.spanner.executor.v1.CloudInstanceConfigResponse + 86, // 98: google.spanner.executor.v1.CloudBackupResponse.listed_backups:type_name -> google.spanner.admin.database.v1.Backup + 87, // 99: google.spanner.executor.v1.CloudBackupResponse.listed_backup_operations:type_name -> google.longrunning.Operation + 86, // 100: google.spanner.executor.v1.CloudBackupResponse.backup:type_name -> google.spanner.admin.database.v1.Backup + 87, // 101: google.spanner.executor.v1.OperationResponse.listed_operations:type_name -> google.longrunning.Operation + 87, // 102: google.spanner.executor.v1.OperationResponse.operation:type_name -> google.longrunning.Operation + 88, // 103: google.spanner.executor.v1.CloudInstanceResponse.listed_instances:type_name -> google.spanner.admin.instance.v1.Instance + 88, // 104: google.spanner.executor.v1.CloudInstanceResponse.instance:type_name -> google.spanner.admin.instance.v1.Instance + 89, // 105: google.spanner.executor.v1.CloudInstanceConfigResponse.listed_instance_configs:type_name -> google.spanner.admin.instance.v1.InstanceConfig + 89, // 106: google.spanner.executor.v1.CloudInstanceConfigResponse.instance_config:type_name -> google.spanner.admin.instance.v1.InstanceConfig + 90, // 107: google.spanner.executor.v1.CloudDatabaseResponse.listed_databases:type_name -> google.spanner.admin.database.v1.Database + 87, // 108: google.spanner.executor.v1.CloudDatabaseResponse.listed_database_operations:type_name -> google.longrunning.Operation + 90, // 109: google.spanner.executor.v1.CloudDatabaseResponse.database:type_name -> google.spanner.admin.database.v1.Database + 12, // 110: google.spanner.executor.v1.ReadResult.row:type_name -> google.spanner.executor.v1.ValueList + 91, // 111: google.spanner.executor.v1.ReadResult.row_type:type_name -> google.spanner.v1.StructType + 12, // 112: google.spanner.executor.v1.QueryResult.row:type_name -> google.spanner.executor.v1.ValueList + 91, // 113: google.spanner.executor.v1.QueryResult.row_type:type_name -> google.spanner.v1.StructType + 67, // 114: google.spanner.executor.v1.ChangeStreamRecord.data_change:type_name -> google.spanner.executor.v1.DataChangeRecord + 68, // 115: google.spanner.executor.v1.ChangeStreamRecord.child_partition:type_name -> google.spanner.executor.v1.ChildPartitionsRecord + 69, // 116: google.spanner.executor.v1.ChangeStreamRecord.heartbeat:type_name -> google.spanner.executor.v1.HeartbeatRecord + 81, // 117: google.spanner.executor.v1.DataChangeRecord.commit_time:type_name -> google.protobuf.Timestamp + 78, // 118: google.spanner.executor.v1.DataChangeRecord.column_types:type_name -> google.spanner.executor.v1.DataChangeRecord.ColumnType + 79, // 119: google.spanner.executor.v1.DataChangeRecord.mods:type_name -> google.spanner.executor.v1.DataChangeRecord.Mod + 81, // 120: google.spanner.executor.v1.ChildPartitionsRecord.start_time:type_name -> google.protobuf.Timestamp + 80, // 121: google.spanner.executor.v1.ChildPartitionsRecord.child_partitions:type_name -> google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition + 81, // 122: google.spanner.executor.v1.HeartbeatRecord.heartbeat_time:type_name -> google.protobuf.Timestamp + 82, // 123: google.spanner.executor.v1.QueryAction.Parameter.type:type_name -> google.spanner.v1.Type + 9, // 124: google.spanner.executor.v1.QueryAction.Parameter.value:type_name -> google.spanner.executor.v1.Value + 82, // 125: google.spanner.executor.v1.MutationAction.InsertArgs.type:type_name -> google.spanner.v1.Type + 12, // 126: google.spanner.executor.v1.MutationAction.InsertArgs.values:type_name -> google.spanner.executor.v1.ValueList + 82, // 127: google.spanner.executor.v1.MutationAction.UpdateArgs.type:type_name -> google.spanner.v1.Type + 12, // 128: google.spanner.executor.v1.MutationAction.UpdateArgs.values:type_name -> google.spanner.executor.v1.ValueList + 71, // 129: google.spanner.executor.v1.MutationAction.Mod.insert:type_name -> google.spanner.executor.v1.MutationAction.InsertArgs + 72, // 130: google.spanner.executor.v1.MutationAction.Mod.update:type_name -> google.spanner.executor.v1.MutationAction.UpdateArgs + 71, // 131: google.spanner.executor.v1.MutationAction.Mod.insert_or_update:type_name -> google.spanner.executor.v1.MutationAction.InsertArgs + 71, // 132: google.spanner.executor.v1.MutationAction.Mod.replace:type_name -> google.spanner.executor.v1.MutationAction.InsertArgs + 11, // 133: google.spanner.executor.v1.MutationAction.Mod.delete_keys:type_name -> google.spanner.executor.v1.KeySet + 92, // 134: google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions.rpc_priority:type_name -> google.spanner.v1.RequestOptions.Priority + 2, // 135: google.spanner.executor.v1.SpannerExecutorProxy.ExecuteActionAsync:input_type -> google.spanner.executor.v1.SpannerAsyncActionRequest + 3, // 136: google.spanner.executor.v1.SpannerExecutorProxy.ExecuteActionAsync:output_type -> google.spanner.executor.v1.SpannerAsyncActionResponse + 136, // [136:137] is the sub-list for method output_type + 135, // [135:136] is the sub-list for method input_type + 135, // [135:135] is the sub-list for extension type_name + 135, // [135:135] is the sub-list for extension extendee + 0, // [0:135] is the sub-list for field type_name +} + +func init() { file_cloud_executor_proto_init() } +func file_cloud_executor_proto_init() { + if File_cloud_executor_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_cloud_executor_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SpannerAsyncActionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SpannerAsyncActionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SpannerAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReadAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DmlAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BatchDmlAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Value); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KeyRange); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KeySet); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValueList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MutationAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WriteMutationsAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartitionedUpdateAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartTransactionAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Concurrency); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TableMetadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ColumnMetadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TransactionExecutionOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FinishTransactionAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AdminAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateUserInstanceConfigAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateUserInstanceConfigAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCloudInstanceConfigAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteUserInstanceConfigAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListCloudInstanceConfigsAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateCloudInstanceAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateCloudInstanceAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteCloudInstanceAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateCloudDatabaseAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateCloudDatabaseDdlAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateCloudDatabaseAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DropCloudDatabaseAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListCloudDatabasesAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListCloudInstancesAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCloudInstanceAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListCloudDatabaseOperationsAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RestoreCloudDatabaseAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCloudDatabaseAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateCloudBackupAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CopyCloudBackupAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCloudBackupAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateCloudBackupAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteCloudBackupAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListCloudBackupsAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListCloudBackupOperationsAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetOperationAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CancelOperationAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartBatchTransactionAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CloseBatchTransactionAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenerateDbPartitionsForReadAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenerateDbPartitionsForQueryAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BatchPartition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExecutePartitionAction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExecuteChangeStreamQuery); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SpannerActionOutcome); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AdminResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CloudBackupResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OperationResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CloudInstanceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CloudInstanceConfigResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CloudDatabaseResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReadResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangeStreamRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataChangeRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChildPartitionsRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HeartbeatRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryAction_Parameter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MutationAction_InsertArgs); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MutationAction_UpdateArgs); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MutationAction_Mod); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartitionedUpdateAction_ExecutePartitionedUpdateOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataChangeRecord_ColumnType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataChangeRecord_Mod); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cloud_executor_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChildPartitionsRecord_ChildPartition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_cloud_executor_proto_msgTypes[2].OneofWrappers = []interface{}{ + (*SpannerAction_Start)(nil), + (*SpannerAction_Finish)(nil), + (*SpannerAction_Read)(nil), + (*SpannerAction_Query)(nil), + (*SpannerAction_Mutation)(nil), + (*SpannerAction_Dml)(nil), + (*SpannerAction_BatchDml)(nil), + (*SpannerAction_Write)(nil), + (*SpannerAction_PartitionedUpdate)(nil), + (*SpannerAction_Admin)(nil), + (*SpannerAction_StartBatchTxn)(nil), + (*SpannerAction_CloseBatchTxn)(nil), + (*SpannerAction_GenerateDbPartitionsRead)(nil), + (*SpannerAction_GenerateDbPartitionsQuery)(nil), + (*SpannerAction_ExecutePartition)(nil), + (*SpannerAction_ExecuteChangeStreamQuery)(nil), + } + file_cloud_executor_proto_msgTypes[3].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[5].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[7].OneofWrappers = []interface{}{ + (*Value_IsNull)(nil), + (*Value_IntValue)(nil), + (*Value_BoolValue)(nil), + (*Value_DoubleValue)(nil), + (*Value_BytesValue)(nil), + (*Value_StringValue)(nil), + (*Value_StructValue)(nil), + (*Value_TimestampValue)(nil), + (*Value_DateDaysValue)(nil), + (*Value_IsCommitTimestamp)(nil), + (*Value_ArrayValue)(nil), + } + file_cloud_executor_proto_msgTypes[8].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[13].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[14].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[15].OneofWrappers = []interface{}{ + (*Concurrency_StalenessSeconds)(nil), + (*Concurrency_MinReadTimestampMicros)(nil), + (*Concurrency_MaxStalenessSeconds)(nil), + (*Concurrency_ExactTimestampMicros)(nil), + (*Concurrency_Strong)(nil), + (*Concurrency_Batch)(nil), + } + file_cloud_executor_proto_msgTypes[20].OneofWrappers = []interface{}{ + (*AdminAction_CreateUserInstanceConfig)(nil), + (*AdminAction_UpdateUserInstanceConfig)(nil), + (*AdminAction_DeleteUserInstanceConfig)(nil), + (*AdminAction_GetCloudInstanceConfig)(nil), + (*AdminAction_ListInstanceConfigs)(nil), + (*AdminAction_CreateCloudInstance)(nil), + (*AdminAction_UpdateCloudInstance)(nil), + (*AdminAction_DeleteCloudInstance)(nil), + (*AdminAction_ListCloudInstances)(nil), + (*AdminAction_GetCloudInstance)(nil), + (*AdminAction_CreateCloudDatabase)(nil), + (*AdminAction_UpdateCloudDatabaseDdl)(nil), + (*AdminAction_UpdateCloudDatabase)(nil), + (*AdminAction_DropCloudDatabase)(nil), + (*AdminAction_ListCloudDatabases)(nil), + (*AdminAction_ListCloudDatabaseOperations)(nil), + (*AdminAction_RestoreCloudDatabase)(nil), + (*AdminAction_GetCloudDatabase)(nil), + (*AdminAction_CreateCloudBackup)(nil), + (*AdminAction_CopyCloudBackup)(nil), + (*AdminAction_GetCloudBackup)(nil), + (*AdminAction_UpdateCloudBackup)(nil), + (*AdminAction_DeleteCloudBackup)(nil), + (*AdminAction_ListCloudBackups)(nil), + (*AdminAction_ListCloudBackupOperations)(nil), + (*AdminAction_GetOperation)(nil), + (*AdminAction_CancelOperation)(nil), + } + file_cloud_executor_proto_msgTypes[22].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[25].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[26].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[27].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[29].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[34].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[39].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[48].OneofWrappers = []interface{}{ + (*StartBatchTransactionAction_BatchTxnTime)(nil), + (*StartBatchTransactionAction_Tid)(nil), + } + file_cloud_executor_proto_msgTypes[50].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[51].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[52].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[54].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[55].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[62].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[63].OneofWrappers = []interface{}{} + file_cloud_executor_proto_msgTypes[64].OneofWrappers = []interface{}{ + (*ChangeStreamRecord_DataChange)(nil), + (*ChangeStreamRecord_ChildPartition)(nil), + (*ChangeStreamRecord_Heartbeat)(nil), + } + file_cloud_executor_proto_msgTypes[72].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_cloud_executor_proto_rawDesc, + NumEnums: 2, + NumMessages: 79, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_cloud_executor_proto_goTypes, + DependencyIndexes: file_cloud_executor_proto_depIdxs, + EnumInfos: file_cloud_executor_proto_enumTypes, + MessageInfos: file_cloud_executor_proto_msgTypes, + }.Build() + File_cloud_executor_proto = out.File + file_cloud_executor_proto_rawDesc = nil + file_cloud_executor_proto_goTypes = nil + file_cloud_executor_proto_depIdxs = nil +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConnInterface + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion6 + +// SpannerExecutorProxyClient is the client API for SpannerExecutorProxy service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type SpannerExecutorProxyClient interface { + // ExecuteActionAsync is a streaming call that starts executing a new Spanner + // action. + // + // For each request, the server will reply with one or more responses, but + // only the last response will contain status in the outcome. + // + // Responses can be matched to requests by action_id. It is allowed to have + // multiple actions in flight--in that case, actions are be executed in + // parallel. + ExecuteActionAsync(ctx context.Context, opts ...grpc.CallOption) (SpannerExecutorProxy_ExecuteActionAsyncClient, error) +} + +type spannerExecutorProxyClient struct { + cc grpc.ClientConnInterface +} + +func NewSpannerExecutorProxyClient(cc grpc.ClientConnInterface) SpannerExecutorProxyClient { + return &spannerExecutorProxyClient{cc} +} + +func (c *spannerExecutorProxyClient) ExecuteActionAsync(ctx context.Context, opts ...grpc.CallOption) (SpannerExecutorProxy_ExecuteActionAsyncClient, error) { + stream, err := c.cc.NewStream(ctx, &_SpannerExecutorProxy_serviceDesc.Streams[0], "/google.spanner.executor.v1.SpannerExecutorProxy/ExecuteActionAsync", opts...) + if err != nil { + return nil, err + } + x := &spannerExecutorProxyExecuteActionAsyncClient{stream} + return x, nil +} + +type SpannerExecutorProxy_ExecuteActionAsyncClient interface { + Send(*SpannerAsyncActionRequest) error + Recv() (*SpannerAsyncActionResponse, error) + grpc.ClientStream +} + +type spannerExecutorProxyExecuteActionAsyncClient struct { + grpc.ClientStream +} + +func (x *spannerExecutorProxyExecuteActionAsyncClient) Send(m *SpannerAsyncActionRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *spannerExecutorProxyExecuteActionAsyncClient) Recv() (*SpannerAsyncActionResponse, error) { + m := new(SpannerAsyncActionResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// SpannerExecutorProxyServer is the server API for SpannerExecutorProxy service. +type SpannerExecutorProxyServer interface { + // ExecuteActionAsync is a streaming call that starts executing a new Spanner + // action. + // + // For each request, the server will reply with one or more responses, but + // only the last response will contain status in the outcome. + // + // Responses can be matched to requests by action_id. It is allowed to have + // multiple actions in flight--in that case, actions are be executed in + // parallel. + ExecuteActionAsync(SpannerExecutorProxy_ExecuteActionAsyncServer) error +} + +// UnimplementedSpannerExecutorProxyServer can be embedded to have forward compatible implementations. +type UnimplementedSpannerExecutorProxyServer struct { +} + +func (*UnimplementedSpannerExecutorProxyServer) ExecuteActionAsync(SpannerExecutorProxy_ExecuteActionAsyncServer) error { + return status1.Errorf(codes.Unimplemented, "method ExecuteActionAsync not implemented") +} + +func RegisterSpannerExecutorProxyServer(s *grpc.Server, srv SpannerExecutorProxyServer) { + s.RegisterService(&_SpannerExecutorProxy_serviceDesc, srv) +} + +func _SpannerExecutorProxy_ExecuteActionAsync_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(SpannerExecutorProxyServer).ExecuteActionAsync(&spannerExecutorProxyExecuteActionAsyncServer{stream}) +} + +type SpannerExecutorProxy_ExecuteActionAsyncServer interface { + Send(*SpannerAsyncActionResponse) error + Recv() (*SpannerAsyncActionRequest, error) + grpc.ServerStream +} + +type spannerExecutorProxyExecuteActionAsyncServer struct { + grpc.ServerStream +} + +func (x *spannerExecutorProxyExecuteActionAsyncServer) Send(m *SpannerAsyncActionResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *spannerExecutorProxyExecuteActionAsyncServer) Recv() (*SpannerAsyncActionRequest, error) { + m := new(SpannerAsyncActionRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _SpannerExecutorProxy_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.spanner.executor.v1.SpannerExecutorProxy", + HandlerType: (*SpannerExecutorProxyServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "ExecuteActionAsync", + Handler: _SpannerExecutorProxy_ExecuteActionAsync_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "cloud_executor.proto", +} diff --git a/spanner/cloudexecutor/proto/cloud_executor.proto b/spanner/cloudexecutor/proto/cloud_executor.proto new file mode 100644 index 000000000000..f5d66fada0c7 --- /dev/null +++ b/spanner/cloudexecutor/proto/cloud_executor.proto @@ -0,0 +1,1455 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.spanner.executor.v1; + +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/longrunning/operations.proto"; +import "google/protobuf/timestamp.proto"; +import "google/rpc/status.proto"; +import "google/spanner/admin/database/v1/backup.proto"; +import "google/spanner/admin/database/v1/common.proto"; +import "google/spanner/admin/database/v1/spanner_database_admin.proto"; +import "google/spanner/admin/instance/v1/spanner_instance_admin.proto"; +import "google/spanner/v1/spanner.proto"; +import "google/spanner/v1/type.proto"; + +option go_package = "cloud.google.com/go/spanner/executor/apiv1/executorpb;executorpb"; +option java_multiple_files = true; +option java_outer_classname = "CloudExecutorProto"; +option java_package = "com.google.spanner.executor.v1"; + +// Service that executes SpannerActions asynchronously. +service SpannerExecutorProxy { + option (google.api.default_host) = "spanner-cloud-executor.googleapis.com"; + + // ExecuteActionAsync is a streaming call that starts executing a new Spanner + // action. + // + // For each request, the server will reply with one or more responses, but + // only the last response will contain status in the outcome. + // + // Responses can be matched to requests by action_id. It is allowed to have + // multiple actions in flight--in that case, actions are be executed in + // parallel. + rpc ExecuteActionAsync(stream SpannerAsyncActionRequest) + returns (stream SpannerAsyncActionResponse) {} +} + +// Request to executor service that start a new Spanner action. +message SpannerAsyncActionRequest { + // Action id to uniquely identify this action request. + int32 action_id = 1; + + // The actual SpannerAction to perform. + SpannerAction action = 2; +} + +// Response from executor service. +message SpannerAsyncActionResponse { + // Action id corresponds to the request. + int32 action_id = 1; + + // If action results are split into multiple responses, only the last response + // can and should contain status. + SpannerActionOutcome outcome = 2; +} + +// SpannerAction defines a primitive action that can be performed against +// Spanner, such as begin or commit a transaction, or perform a read or +// mutation. +message SpannerAction { + // Database against which to perform action. + // In a context where a series of actions take place, an action may omit + // database path if it applies to the same database as the previous action. + string database_path = 1; + + // Action represents a spanner action kind, there will only be one action kind + // per SpannerAction. + oneof action { + // Action to start a transaction. + StartTransactionAction start = 10; + + // Action to finish a transaction. + FinishTransactionAction finish = 11; + + // Action to do a normal read. + ReadAction read = 20; + + // Action to do a query. + QueryAction query = 21; + + // Action to buffer a mutation. + MutationAction mutation = 22; + + // Action to a DML. + DmlAction dml = 23; + + // Action to a batch DML. + BatchDmlAction batch_dml = 24; + + // Action to write a mutation. + WriteMutationsAction write = 25; + + // Action to a partitioned update. + PartitionedUpdateAction partitioned_update = 27; + + // Action that contains any administrative operation, like database, + // instance manipulation. + AdminAction admin = 30; + + // Action to start a batch transaction. + StartBatchTransactionAction start_batch_txn = 40; + + // Action to close a batch transaction. + CloseBatchTransactionAction close_batch_txn = 41; + + // Action to generate database partitions for batch read. + GenerateDbPartitionsForReadAction generate_db_partitions_read = 42; + + // Action to generate database partitions for batch query. + GenerateDbPartitionsForQueryAction generate_db_partitions_query = 43; + + // Action to execute batch actions on generated partitions. + ExecutePartitionAction execute_partition = 44; + + // Action to execute change stream query. + ExecuteChangeStreamQuery execute_change_stream_query = 50; + } +} + +// A single read request. +message ReadAction { + // The table to read at. + string table = 1; + + // The index to read at if it's an index read. + optional string index = 2; + + // List of columns must begin with the key columns used for the read. + repeated string column = 3; + + // Keys for performing this read. + KeySet keys = 4; + + // Limit on number of rows to read. If set, must be positive. + int32 limit = 5; +} + +// A SQL query request. +message QueryAction { + // Parameter that bind to placeholders in the SQL string + message Parameter { + // Name of the parameter (with no leading @). + string name = 1; + + // Type of the parameter. + google.spanner.v1.Type type = 2; + + // Value of the parameter. + Value value = 3; + } + + // The SQL string. + string sql = 1; + + // Parameters for the SQL string. + repeated Parameter params = 2; +} + +// A single DML statement. +message DmlAction { + // DML statement. + QueryAction update = 1; + + // Whether to autocommit the transaction after executing the DML statement, + // if the Executor supports autocommit. + optional bool autocommit_if_supported = 2; +} + +// Batch of DML statements invoked using batched execution. +message BatchDmlAction { + // DML statements. + repeated QueryAction updates = 1; +} + +// Value represents a single value that can be read or written to/from +// Spanner. +message Value { + // Exactly one of the following fields will be present. + oneof value_type { + // If is_null is set, then this value is null. + bool is_null = 1; + + // Int type value. It's used for all integer number types, like int32 and + // int64. + int64 int_value = 2; + + // Bool type value. + bool bool_value = 3; + + // Double type value. It's used for all float point types, like float and + // double. + double double_value = 4; + + // Bytes type value, stored in CORD. It's also used for PROTO type value. + bytes bytes_value = 5; + + // String type value, stored in CORD. + string string_value = 6; + + // Struct type value. It contains a ValueList representing the values in + // this struct. + ValueList struct_value = 7; + + // Timestamp type value. + google.protobuf.Timestamp timestamp_value = 8; + + // Date type value. Date is specified as a number of days since Unix epoch. + int32 date_days_value = 9; + + // If set, holds the sentinel value for the transaction CommitTimestamp. + bool is_commit_timestamp = 10; + + // Array type value. The underlying Valuelist should have values that have + // the same type. + ValueList array_value = 11; + } + + // Type of array element. Only set if value is an array. + optional google.spanner.v1.Type array_type = 12; +} + +// KeyRange represents a range of rows in a table or index. +// +// A range has a start key and an end key. These keys can be open or +// closed, indicating if the range includes rows with that key. +// +// Keys are represented by "ValueList", where the ith value in the list +// corresponds to the ith component of the table or index primary key. +message KeyRange { + // Type controls whether "start" and "limit" are open or closed. By default, + // "start" is closed, and "limit" is open. + enum Type { + // "TYPE_UNSPECIFIED" is equivalent to "CLOSED_OPEN". + TYPE_UNSPECIFIED = 0; + + // [start,limit] + CLOSED_CLOSED = 1; + + // [start,limit) + CLOSED_OPEN = 2; + + // (start,limit] + OPEN_CLOSED = 3; + + // (start,limit) + OPEN_OPEN = 4; + } + + // "start" and "limit" must have the same number of key parts, + // though they may name only a prefix of the table or index key. + // The start key of this KeyRange. + ValueList start = 1; + + // The end key of this KeyRange. + ValueList limit = 2; + + // "start" and "limit" type for this KeyRange. + optional Type type = 3; +} + +// KeySet defines a collection of Spanner keys and/or key ranges. All +// the keys are expected to be in the same table. The keys need not be +// sorted in any particular way. +message KeySet { + // A list of specific keys. Entries in "keys" should have exactly as + // many elements as there are columns in the primary or index key + // with which this "KeySet" is used. + repeated ValueList point = 1; + + // A list of key ranges. + repeated KeyRange range = 2; + + // For convenience "all" can be set to "true" to indicate that this + // "KeySet" matches all keys in the table or index. Note that any keys + // specified in "keys" or "ranges" are only yielded once. + bool all = 3; +} + +// List of values. +message ValueList { + // Values contained in this ValueList. + repeated Value value = 1; +} + +// A single mutation request. +message MutationAction { + // Arguments to Insert, InsertOrUpdate, and Replace operations. + message InsertArgs { + // The names of the columns to be written. + repeated string column = 1; + + // Type information for the "values" entries below. + repeated google.spanner.v1.Type type = 2; + + // The values to be written. + repeated ValueList values = 3; + } + + // Arguments to Update. + message UpdateArgs { + // The columns to be updated. Identical to InsertArgs.column. + repeated string column = 1; + + // Type information for "values". Identical to InsertArgs.type. + repeated google.spanner.v1.Type type = 2; + + // The values to be updated. Identical to InsertArgs.values. + repeated ValueList values = 3; + } + + // Mod represents the write action that will be perform to a table. Each mod + // will specify exactly one action, from insert, update, insert_or_update, + // replace and delete. + message Mod { + // The table to write. + string table = 1; + + // Exactly one of the remaining elements may be present. + // Insert new rows into "table". + InsertArgs insert = 2; + + // Update columns stored in existing rows of "table". + UpdateArgs update = 3; + + // Insert or update existing rows of "table". + InsertArgs insert_or_update = 4; + + // Replace existing rows of "table". + InsertArgs replace = 5; + + // Delete rows from "table". + KeySet delete_keys = 6; + } + + // Mods that contained in this mutation. + repeated Mod mod = 1; +} + +// WriteMutationAction defines an action of flushing the mutation so they +// are visible to subsequent operations in the transaction. +message WriteMutationsAction { + // The mutation to write. + MutationAction mutation = 1; +} + +// PartitionedUpdateAction defines an action to execute a partitioned DML +// which runs different partitions in parallel. +message PartitionedUpdateAction { + message ExecutePartitionedUpdateOptions { + // RPC Priority + optional google.spanner.v1.RequestOptions.Priority rpc_priority = 1; + + // Transaction tag + optional string tag = 2; + } + + // Options for partitioned update. + optional ExecutePartitionedUpdateOptions options = 1; + + // Partitioned dml query. + QueryAction update = 2; +} + +// StartTransactionAction defines an action of initializing a transaction. +message StartTransactionAction { + // Concurrency is for read-only transactions and must be omitted for + // read-write transactions. + optional Concurrency concurrency = 1; + + // Metadata about tables and columns that will be involved in this + // transaction. It is to convert values of key parts correctly. + repeated TableMetadata table = 2; + + // Transaction_seed contains workid and op pair for this transaction, used for + // testing. + string transaction_seed = 3; + + // Execution options (e.g., whether transaction is opaque, optimistic). + optional TransactionExecutionOptions execution_options = 4; +} + +// Concurrency for read-only transactions. +message Concurrency { + // Concurrency mode set for read-only transactions, exactly one mode below + // should be set. + oneof concurrency_mode { + // Indicates a read at a consistent timestamp that is specified relative to + // now. That is, if the caller has specified an exact staleness of s + // seconds, we will read at now - s. + double staleness_seconds = 1; + + // Indicates a boundedly stale read that reads at a timestamp >= T. + int64 min_read_timestamp_micros = 2; + + // Indicates a boundedly stale read that is at most N seconds stale. + double max_staleness_seconds = 3; + + // Indicates a read at a consistent timestamp. + int64 exact_timestamp_micros = 4; + + // Indicates a strong read, must only be set to true, or unset. + bool strong = 5; + + // Indicates a batch read, must only be set to true, or unset. + bool batch = 6; + } + + // True if exact_timestamp_micros is set, and the chosen timestamp is that of + // a snapshot epoch. + bool snapshot_epoch_read = 7; + + // If set, this is a snapshot epoch read constrained to read only the + // specified log scope root table, and its children. Will not be set for full + // database epochs. + string snapshot_epoch_root_table = 8; + + // Set only when batch is true. + int64 batch_read_timestamp_micros = 9; +} + +// TableMetadata contains metadata of a single table. +message TableMetadata { + // Table name. + string name = 1; + + // Columns, in the same order as in the schema. + repeated ColumnMetadata column = 2; + + // Keys, in order. Column name is currently not populated. + repeated ColumnMetadata key_column = 3; +} + +// ColumnMetadata represents metadata of a single column. +message ColumnMetadata { + // Column name. + string name = 1; + + // Column type. + google.spanner.v1.Type type = 2; +} + +// Options for executing the transaction. +message TransactionExecutionOptions { + // Whether optimistic concurrency should be used to execute this transaction. + bool optimistic = 1; +} + +// FinishTransactionAction defines an action of finishing a transaction. +message FinishTransactionAction { + // Mode indicates how the transaction should be finished. + enum Mode { + // "MODE_UNSPECIFIED" is equivalent to "COMMIT". + MODE_UNSPECIFIED = 0; + + // Commit the transaction. + COMMIT = 1; + + // Drop the transaction without committing it. + ABANDON = 2; + } + + // Defines how exactly the transaction should be completed, e.g. with + // commit or abortion. + Mode mode = 1; +} + +// AdminAction defines all the cloud spanner admin actions, including +// instance/database admin ops, backup ops and operation actions. +message AdminAction { + // Exactly one of the actions below will be performed in AdminAction. + oneof action { + // Action that creates a user instance config. + CreateUserInstanceConfigAction create_user_instance_config = 1; + + // Action that updates a user instance config. + UpdateUserInstanceConfigAction update_user_instance_config = 2; + + // Action that deletes a user instance config. + DeleteUserInstanceConfigAction delete_user_instance_config = 3; + + // Action that gets a user instance config. + GetCloudInstanceConfigAction get_cloud_instance_config = 4; + + // Action that lists user instance configs. + ListCloudInstanceConfigsAction list_instance_configs = 5; + + // Action that creates a Cloud Spanner instance. + CreateCloudInstanceAction create_cloud_instance = 6; + + // Action that updates a Cloud Spanner instance. + UpdateCloudInstanceAction update_cloud_instance = 7; + + // Action that deletes a Cloud Spanner instance. + DeleteCloudInstanceAction delete_cloud_instance = 8; + + // Action that lists Cloud Spanner instances. + ListCloudInstancesAction list_cloud_instances = 9; + + // Action that retrieves a Cloud Spanner instance. + GetCloudInstanceAction get_cloud_instance = 10; + + // Action that creates a Cloud Spanner database. + CreateCloudDatabaseAction create_cloud_database = 11; + + // Action that updates the schema of a Cloud Spanner database. + UpdateCloudDatabaseDdlAction update_cloud_database_ddl = 12; + + // Action that updates the schema of a Cloud Spanner database. + UpdateCloudDatabaseAction update_cloud_database = 27; + + // Action that drops a Cloud Spanner database. + DropCloudDatabaseAction drop_cloud_database = 13; + + // Action that lists Cloud Spanner databases. + ListCloudDatabasesAction list_cloud_databases = 14; + + // Action that lists Cloud Spanner database operations. + ListCloudDatabaseOperationsAction list_cloud_database_operations = 15; + + // Action that restores a Cloud Spanner database from a backup. + RestoreCloudDatabaseAction restore_cloud_database = 16; + + // Action that gets a Cloud Spanner database. + GetCloudDatabaseAction get_cloud_database = 17; + + // Action that creates a Cloud Spanner database backup. + CreateCloudBackupAction create_cloud_backup = 18; + + // Action that copies a Cloud Spanner database backup. + CopyCloudBackupAction copy_cloud_backup = 19; + + // Action that gets a Cloud Spanner database backup. + GetCloudBackupAction get_cloud_backup = 20; + + // Action that updates a Cloud Spanner database backup. + UpdateCloudBackupAction update_cloud_backup = 21; + + // Action that deletes a Cloud Spanner database backup. + DeleteCloudBackupAction delete_cloud_backup = 22; + + // Action that lists Cloud Spanner database backups. + ListCloudBackupsAction list_cloud_backups = 23; + + // Action that lists Cloud Spanner database backup operations. + ListCloudBackupOperationsAction list_cloud_backup_operations = 24; + + // Action that gets an operation. + GetOperationAction get_operation = 25; + + // Action that cancels an operation. + CancelOperationAction cancel_operation = 26; + } +} + +// Action that creates a user instance config. +message CreateUserInstanceConfigAction { + // User instance config ID (not path), e.g. "custom-config". + string user_config_id = 1; + + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 2; + + // Base config ID, e.g. "test-config". + string base_config_id = 3; + + // Replicas that should be included in the user config. + repeated google.spanner.admin.instance.v1.ReplicaInfo replicas = 4; +} + +// Action that updates a user instance config. +message UpdateUserInstanceConfigAction { + // User instance config ID (not path), e.g. "custom-config". + string user_config_id = 1; + + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 2; + + // The descriptive name for this instance config as it appears in UIs. + optional string display_name = 3; + + // labels. + map labels = 4; +} + +// Action that gets a user instance config. +message GetCloudInstanceConfigAction { + // Instance config ID (not path), e.g. "custom-config". + string instance_config_id = 1; + + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 2; +} + +// Action that deletes a user instance configs. +message DeleteUserInstanceConfigAction { + // User instance config ID (not path), e.g. "custom-config". + string user_config_id = 1; + + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 2; +} + +// Action that lists user instance configs. +message ListCloudInstanceConfigsAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Number of instance configs to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + optional int32 page_size = 2; + + // If non-empty, "page_token" should contain a next_page_token + // from a previous ListInstanceConfigsResponse to the same "parent". + optional string page_token = 3; +} + +// Action that creates a Cloud Spanner instance. +message CreateCloudInstanceAction { + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 1; + + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 2; + + // Instance config ID, e.g. "test-config". + string instance_config_id = 3; + + // Number of nodes (processing_units should not be set or set to 0 if used). + optional int32 node_count = 4; + + // Number of processing units (node_count should be set to 0 if used). + optional int32 processing_units = 6; + + // labels. + map labels = 5; +} + +// Action that updates a Cloud Spanner instance. +message UpdateCloudInstanceAction { + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 1; + + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 2; + + // The descriptive name for this instance as it appears in UIs. + // Must be unique per project and between 4 and 30 characters in length. + optional string display_name = 3; + + // The number of nodes allocated to this instance. At most one of either + // node_count or processing_units should be present in the message. + optional int32 node_count = 4; + + // The number of processing units allocated to this instance. At most one of + // processing_units or node_count should be present in the message. + optional int32 processing_units = 5; + + // labels. + map labels = 6; +} + +// Action that deletes a Cloud Spanner instance. +message DeleteCloudInstanceAction { + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 1; + + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 2; +} + +// Action that creates a Cloud Spanner database. +message CreateCloudDatabaseAction { + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 1; + + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 2; + + // Cloud database ID (not full path), e.g. "db0". + string database_id = 3; + + // SDL statements to apply to the new database. + repeated string sdl_statement = 4; + + // The KMS key used to encrypt the database to be created if the database + // should be CMEK protected. + google.spanner.admin.database.v1.EncryptionConfig encryption_config = 5; + + // Optional SQL dialect (GOOGLESQL or POSTGRESQL). Default: GOOGLESQL. + optional string dialect = 6; +} + +// Action that updates the schema of a Cloud Spanner database. +message UpdateCloudDatabaseDdlAction { + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 1; + + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 2; + + // Cloud database ID (not full path), e.g. "db0". + string database_id = 3; + + // SDL statements to apply to the database. + repeated string sdl_statement = 4; + + // Op ID can be used to track progress of the update. If set, it must be + // unique per database. If not set, Cloud Spanner will generate operation ID + // automatically. + string operation_id = 5; +} + +// Action that updates a Cloud Spanner database. +message UpdateCloudDatabaseAction { + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 1; + + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 2; + + // Cloud database name (not full path), e.g. "db0". + string database_name = 3; + + // Updated value of enable_drop_protection, this is the only field that has + // supported to be updated. + bool enable_drop_protection = 4; +} + +// Action that drops a Cloud Spanner database. +message DropCloudDatabaseAction { + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 1; + + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 2; + + // Cloud database ID (not full path), e.g. "db0". + string database_id = 3; +} + +// Action that lists Cloud Spanner databases. +message ListCloudDatabasesAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path) to list databases from, e.g. "test-instance". + string instance_id = 2; + + // Number of databases to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + int32 page_size = 3; + + // If non-empty, "page_token" should contain a next_page_token + // from a previous ListDatabasesResponse to the same "parent" + // and with the same "filter". + string page_token = 4; +} + +// Action that lists Cloud Spanner databases. +message ListCloudInstancesAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // A filter expression that filters what operations are returned in the + // response. + // The expression must specify the field name, a comparison operator, + // and the value that you want to use for filtering. + // Refer spanner_instance_admin.proto.ListInstancesRequest for + // detail. + optional string filter = 2; + + // Number of instances to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + optional int32 page_size = 3; + + // If non-empty, "page_token" should contain a next_page_token + // from a previous ListInstancesResponse to the same "parent" + // and with the same "filter". + optional string page_token = 4; +} + +// Action that retrieves a Cloud Spanner instance. +message GetCloudInstanceAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path) to retrieve the instance from, + // e.g. "test-instance". + string instance_id = 2; +} + +// Action that lists Cloud Spanner database operations. +message ListCloudDatabaseOperationsAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path) to list database operations from, + // e.g. "test-instance". + string instance_id = 2; + + // A filter expression that filters what operations are returned in the + // response. + // The expression must specify the field name, a comparison operator, + // and the value that you want to use for filtering. + // Refer spanner_database_admin.proto.ListDatabaseOperationsRequest for + // detail. + string filter = 3; + + // Number of databases to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + int32 page_size = 4; + + // If non-empty, "page_token" should contain a next_page_token + // from a previous ListDatabaseOperationsResponse to the same "parent" + // and with the same "filter". + string page_token = 5; +} + +// Action that restores a Cloud Spanner database from a backup. +message RestoreCloudDatabaseAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path) containing the backup, e.g. "backup-instance". + string backup_instance_id = 2; + + // The id of the backup from which to restore, e.g. "test-backup". + string backup_id = 3; + + // Cloud instance ID (not path) containing the database, e.g. + // "database-instance". + string database_instance_id = 4; + + // The id of the database to create and restore to, e.g. "db0". Note that this + // database must not already exist. + string database_id = 5; +} + +// Action that gets a Cloud Spanner database. +message GetCloudDatabaseAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 2; + + // The id of the database to get, e.g. "db0". + string database_id = 3; +} + +// Action that creates a Cloud Spanner database backup. +message CreateCloudBackupAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 2; + + // The id of the backup to be created, e.g. "test-backup". + string backup_id = 3; + + // The id of the database from which this backup was + // created, e.g. "db0". Note that this needs to be in the + // same instance as the backup. + string database_id = 4; + + // Output only. The expiration time of the backup, which must be at least 6 + // hours and at most 366 days from the time the request is received. + google.protobuf.Timestamp expire_time = 5 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // The version time of the backup, which must be within the time range of + // [earliest_version_time, NOW], where earliest_version_time is retrieved by + // cloud spanner frontend API (See details: go/cs-pitr-lite-design). + optional google.protobuf.Timestamp version_time = 6; +} + +// Action that copies a Cloud Spanner database backup. +message CopyCloudBackupAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 2; + + // The id of the backup to be created, e.g. "test-backup". + string backup_id = 3; + + // The fully qualified uri of the source backup from which this + // backup was copied. eg. + // "projects//instances//backups/". + string source_backup = 4; + + // Output only. The expiration time of the backup, which must be at least 6 + // hours and at most 366 days from the time the request is received. + google.protobuf.Timestamp expire_time = 5 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Action that gets a Cloud Spanner database backup. +message GetCloudBackupAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 2; + + // The id of the backup to get, e.g. "test-backup". + string backup_id = 3; +} + +// Action that updates a Cloud Spanner database backup. +message UpdateCloudBackupAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 2; + + // The id of the backup to update, e.g. "test-backup". + string backup_id = 3; + + // Output only. Updated value of expire_time, this is the only field + // that supported to be updated. + google.protobuf.Timestamp expire_time = 4 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Action that deletes a Cloud Spanner database backup. +message DeleteCloudBackupAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path), e.g. "test-instance". + string instance_id = 2; + + // The id of the backup to delete, e.g. "test-backup". + string backup_id = 3; +} + +// Action that lists Cloud Spanner database backups. +message ListCloudBackupsAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path) to list backups from, e.g. "test-instance". + string instance_id = 2; + + // A filter expression that filters backups listed in the response. + // The expression must specify the field name, a comparison operator, + // and the value that you want to use for filtering. + // Refer backup.proto.ListBackupsRequest for detail. + string filter = 3; + + // Number of backups to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + int32 page_size = 4; + + // If non-empty, "page_token" should contain a next_page_token + // from a previous ListBackupsResponse to the same "parent" + // and with the same "filter". + string page_token = 5; +} + +// Action that lists Cloud Spanner database backup operations. +message ListCloudBackupOperationsAction { + // Cloud project ID, e.g. "spanner-cloud-systest". + string project_id = 1; + + // Cloud instance ID (not path) to list backup operations from, + // e.g. "test-instance". + string instance_id = 2; + + // A filter expression that filters what operations are returned in the + // response. + // The expression must specify the field name, a comparison operator, + // and the value that you want to use for filtering. + // Refer backup.proto.ListBackupOperationsRequest for detail. + string filter = 3; + + // Number of backups to be returned in the response. If 0 or + // less, defaults to the server's maximum allowed page size. + int32 page_size = 4; + + // If non-empty, "page_token" should contain a next_page_token + // from a previous ListBackupOperationsResponse to the same "parent" + // and with the same "filter". + string page_token = 5; +} + +// Action that gets an operation. +message GetOperationAction { + // The name of the operation resource. + string operation = 1; +} + +// Action that cancels an operation. +message CancelOperationAction { + // The name of the operation resource to be cancelled. + string operation = 1; +} + +// Starts a batch read-only transaction in executor. Successful outcomes of this +// action will contain batch_txn_id--the identificator that can be used to start +// the same transaction in other Executors to parallelize partition processing. +// +// Example of a batch read flow: +// 1. Start batch transaction with a timestamp (StartBatchTransactionAction) +// 2. Generate database partitions for a read or query +// (GenerateDbPartitionsForReadAction/GenerateDbPartitionsForQueryAction) +// 3. Call ExecutePartitionAction for some or all partitions, process rows +// 4. Clean up the transaction (CloseBatchTransactionAction). +// +// More sophisticated example, with parallel processing: +// 1. Start batch transaction with a timestamp (StartBatchTransactionAction), +// note the returned BatchTransactionId +// 2. Generate database partitions for a read or query +// (GenerateDbPartitionsForReadAction/GenerateDbPartitionsForQueryAction) +// 3. Distribute the partitions over a pool of workers, along with the +// transaction ID. +// +// In each worker: +// 4-1. StartBatchTransactionAction with the given transaction ID +// 4-2. ExecutePartitionAction for each partition it got, process read results +// 4-3. Close (not cleanup) the transaction (CloseBatchTransactionAction). +// +// When all workers are done: +// 5. Cleanup the transaction (CloseBatchTransactionAction). This can be done +// either by the last worker to finish the job, or by the main Executor that +// initialized this transaction in the first place. It is also possible to clean +// it up with a brand new Executor -- just execute StartBatchTransactionAction +// with the ID, then clean it up right away. +// +// Cleaning up is optional, but recommended. +message StartBatchTransactionAction { + // To start a new transaction, specify an exact timestamp. Alternatively, an + // existing batch transaction ID can be used. Either one of two must be + // set. + oneof param { + // The exact timestamp to start the batch transaction. + google.protobuf.Timestamp batch_txn_time = 1; + + // ID of a batch read-only transaction. It can be used to start the same + // batch transaction on multiple executors and parallelize partition + // processing. + bytes tid = 2; + } + + // Database role to assume while performing this action. Setting the + // database_role will enforce additional role-based access checks on this + // action. + string cloud_database_role = 3; +} + +// Closes or cleans up the currently opened batch read-only transaction. +// +// Once a transaction is closed, the Executor can be disposed of or used to +// start start another transaction. Closing a batch transaction in one Executor +// doesn't affect the transaction's state in other Executors that also read from +// it. +// +// When a transaction is cleaned up, it becomes globally invalid. Cleaning up is +// optional, but recommended. +message CloseBatchTransactionAction { + // Indicates whether the transaction needs to be cleaned up. + bool cleanup = 1; +} + +// Generate database partitions for the given read. Successful outcomes will +// contain database partitions in the db_partition field. +message GenerateDbPartitionsForReadAction { + // Read to generate partitions for. + ReadAction read = 1; + + // Metadata related to the tables involved in the read. + repeated TableMetadata table = 2; + + // Desired size of data in each partition. Spanner doesn't guarantee to + // respect this value. + optional int64 desired_bytes_per_partition = 3; + + // If set, the desired max number of partitions. Spanner doesn't guarantee to + // respect this value. + optional int64 max_partition_count = 4; +} + +// Generate database partitions for the given query. Successful outcomes will +// contain database partitions in the db_partition field. +message GenerateDbPartitionsForQueryAction { + // Query to generate partitions for. + QueryAction query = 1; + + // Desired size of data in each partition. Spanner doesn't guarantee to + // respect this value. + optional int64 desired_bytes_per_partition = 2; +} + +// Identifies a database partition generated for a particular read or query. To +// read rows from the partition, use ExecutePartitionAction. +message BatchPartition { + // Serialized Partition instance. + bytes partition = 1; + + // The partition token decrypted from partition. + bytes partition_token = 2; + + // Table name is set iff the partition was generated for a read (as opposed to + // a query). + optional string table = 3; + + // Index name if the partition was generated for an index read. + optional string index = 4; +} + +// Performs a read or query for the given partitions. This action must be +// executed in the context of the same transaction that was used to generate +// given partitions. +message ExecutePartitionAction { + // Batch partition to execute on. + BatchPartition partition = 1; +} + +// Execute a change stream TVF query. +message ExecuteChangeStreamQuery { + // Name for this change stream. + string name = 1; + + // Specifies that records with commit_timestamp greater than or equal to + // start_time should be returned. + google.protobuf.Timestamp start_time = 2; + + // Specifies that records with commit_timestamp less than or equal to + // end_time should be returned. + optional google.protobuf.Timestamp end_time = 3; + + // Specifies which change stream partition to query, based on the content of + // child partitions records. + optional string partition_token = 4; + + // Read options for this change stream query. + repeated string read_options = 5; + + // Determines how frequently a heartbeat ChangeRecord will be returned in case + // there are no transactions committed in this partition, in milliseconds. + optional int32 heartbeat_milliseconds = 6; + + // Deadline for this change stream query, in seconds. + optional int64 deadline_seconds = 7; + + // Database role to assume while performing this action. This should only be + // set for cloud requests. Setting the database role will enforce additional + // role-based access checks on this action. + optional string cloud_database_role = 8; +} + +// SpannerActionOutcome defines a result of execution of a single SpannerAction. +message SpannerActionOutcome { + // If an outcome is split into multiple parts, status will be set only in the + // last part. + optional google.rpc.Status status = 1; + + // Transaction timestamp. It must be set for successful committed actions. + optional google.protobuf.Timestamp commit_time = 2; + + // Result of a ReadAction. This field must be set for ReadActions even if + // no rows were read. + optional ReadResult read_result = 3; + + // Result of a Query. This field must be set for Queries even if no rows were + // read. + optional QueryResult query_result = 4; + + // This bit indicates that Spanner has restarted the current transaction. It + // means that the client should replay all the reads and writes. + // Setting it to true is only valid in the context of a read-write + // transaction, as an outcome of a committing FinishTransactionAction. + optional bool transaction_restarted = 5; + + // In successful StartBatchTransactionAction outcomes, this contains the ID of + // the transaction. + optional bytes batch_txn_id = 6; + + // Generated database partitions (result of a + // GenetageDbPartitionsForReadAction/GenerateDbPartitionsForQueryAction). + repeated BatchPartition db_partition = 7; + + // Result of admin related actions. + optional AdminResult admin_result = 8; + + // Stores rows modified by query in single DML or batch DML action. + // In case of batch DML action, stores 0 as row count of errored DML query. + repeated int64 dml_rows_modified = 9; + + // Change stream records returned by a change stream query. + repeated ChangeStreamRecord change_stream_records = 10; +} + +// AdminResult contains admin action results, for database/backup/operation. +message AdminResult { + // Results of cloud backup related actions. + CloudBackupResponse backup_response = 1; + + // Results of operation related actions. + OperationResponse operation_response = 2; + + // Results of database related actions. + CloudDatabaseResponse database_response = 3; + + // Results of instance related actions. + CloudInstanceResponse instance_response = 4; + + // Results of instance config related actions. + CloudInstanceConfigResponse instance_config_response = 5; +} + +// CloudBackupResponse contains results returned by cloud backup related +// actions. +message CloudBackupResponse { + // List of backups returned by ListCloudBackupsAction. + repeated google.spanner.admin.database.v1.Backup listed_backups = 1; + + // List of operations returned by ListCloudBackupOperationsAction. + repeated google.longrunning.Operation listed_backup_operations = 2; + + // "next_page_token" can be sent in a subsequent list action + // to fetch more of the matching data. + string next_page_token = 3; + + // Backup returned by GetCloudBackupAction/UpdateCloudBackupAction. + google.spanner.admin.database.v1.Backup backup = 4; +} + +// OperationResponse contains results returned by operation related actions. +message OperationResponse { + // List of operations returned by ListOperationsAction. + repeated google.longrunning.Operation listed_operations = 1; + + // "next_page_token" can be sent in a subsequent list action + // to fetch more of the matching data. + string next_page_token = 2; + + // Operation returned by GetOperationAction. + google.longrunning.Operation operation = 3; +} + +// CloudInstanceResponse contains results returned by cloud instance related +// actions. +message CloudInstanceResponse { + // List of instances returned by ListCloudInstancesAction. + repeated google.spanner.admin.instance.v1.Instance listed_instances = 1; + + // "next_page_token" can be sent in a subsequent list action + // to fetch more of the matching data. + string next_page_token = 2; + + // Instance returned by GetCloudInstanceAction + google.spanner.admin.instance.v1.Instance instance = 3; +} + +// CloudInstanceConfigResponse contains results returned by cloud instance +// config related actions. +message CloudInstanceConfigResponse { + // List of instance configs returned by ListCloudInstanceConfigsAction. + repeated google.spanner.admin.instance.v1.InstanceConfig + listed_instance_configs = 1; + + // "next_page_token" can be sent in a subsequent list action + // to fetch more of the matching data. + string next_page_token = 2; + + // Instance config returned by GetCloudInstanceConfigAction. + google.spanner.admin.instance.v1.InstanceConfig instance_config = 3; +} + +// CloudDatabaseResponse contains results returned by cloud database related +// actions. +message CloudDatabaseResponse { + // List of databases returned by ListCloudDatabasesAction. + repeated google.spanner.admin.database.v1.Database listed_databases = 1; + + // List of operations returned by ListCloudDatabaseOperationsAction. + repeated google.longrunning.Operation listed_database_operations = 2; + + // "next_page_token" can be sent in a subsequent list action + // to fetch more of the matching data. + string next_page_token = 3; + + // Database returned by GetCloudDatabaseAction + google.spanner.admin.database.v1.Database database = 4; +} + +// ReadResult contains rows read. +message ReadResult { + // Table name. + string table = 1; + + // Index name, if read from an index. + optional string index = 2; + + // Request index (multiread only). + optional int32 request_index = 3; + + // Rows read. Each row is a struct with multiple fields, one for each column + // in read result. All rows have the same type. + repeated ValueList row = 4; + + // The type of rows read. It must be set if at least one row was read. + optional google.spanner.v1.StructType row_type = 5; +} + +// QueryResult contains result of a Query. +message QueryResult { + // Rows read. Each row is a struct with multiple fields, one for each column + // in read result. All rows have the same type. + repeated ValueList row = 1; + + // The type of rows read. It must be set if at least one row was read. + optional google.spanner.v1.StructType row_type = 2; +} + +// Raw ChangeStream records. +// Encodes one of: DataChangeRecord, HeartbeatRecord, ChildPartitionsRecord +// returned from the ChangeStream API. +message ChangeStreamRecord { + // Record represents one type of the change stream record. + oneof record { + // Data change record. + DataChangeRecord data_change = 1; + + // Child partitions record. + ChildPartitionsRecord child_partition = 2; + + // Heartbeat record. + HeartbeatRecord heartbeat = 3; + } +} + +// ChangeStream data change record. +message DataChangeRecord { + // Column types. + message ColumnType { + // Column name. + string name = 1; + + // Column type in JSON. + string type = 2; + + // Whether the column is a primary key column. + bool is_primary_key = 3; + + // The position of the column as defined in the schema. + int64 ordinal_position = 4; + } + + // Describes the changes that were made. + message Mod { + // The primary key values in JSON. + string keys = 1; + + // The new values of the changed columns in JSON. Only contain the non-key + // columns. + string new_values = 2; + + // The old values of the changed columns in JSON. Only contain the non-key + // columns. + string old_values = 3; + } + + // The timestamp in which the change was committed. + google.protobuf.Timestamp commit_time = 1; + + // The sequence number for the record within the transaction. + string record_sequence = 2; + + // A globally unique string that represents the transaction in which the + // change was committed. + string transaction_id = 3; + + // Indicates whether this is the last record for a transaction in the current + // partition. + bool is_last_record = 4; + + // Name of the table affected by the change. + string table = 5; + + // Column types defined in the schema. + repeated ColumnType column_types = 6; + + // Changes made in the transaction. + repeated Mod mods = 7; + + // Describes the type of change. One of INSERT, UPDATE or DELETE. + string mod_type = 8; + + // One of value capture type: NEW_VALUES, OLD_VALUES, OLD_AND_NEW_VALUES. + string value_capture_type = 9; + + // Number of records in transactions. + int64 record_count = 10; + + // Number of partitions in transactions. + int64 partition_count = 11; + + // Transaction tag info. + string transaction_tag = 12; + + // Whether the transaction is a system transactionn. + bool is_system_transaction = 13; +} + +// ChangeStream child partition record. +message ChildPartitionsRecord { + // A single child partition. + message ChildPartition { + // Partition token string used to identify the child partition in queries. + string token = 1; + + // Parent partition tokens of this child partition. + repeated string parent_partition_tokens = 2; + } + + // Data change records returned from child partitions in this child partitions + // record will have a commit timestamp greater than or equal to start_time. + google.protobuf.Timestamp start_time = 1; + + // A monotonically increasing sequence number that can be used to define the + // ordering of the child partitions record when there are multiple child + // partitions records returned with the same start_time in a particular + // partition. + string record_sequence = 2; + + // A set of child partitions and their associated information. + repeated ChildPartition child_partitions = 3; +} + +// ChangeStream heartbeat record. +message HeartbeatRecord { + // Timestamp for this heartbeat check. + google.protobuf.Timestamp heartbeat_time = 1; +} From b44e805e94cdd1998dccf92438d8176e7db1021b Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Sat, 14 Oct 2023 13:59:16 +0000 Subject: [PATCH 04/15] feat(spanner): add cloud_executor file which has helper methods --- .../cloudexecutor/executor/cloud_executor.go | 331 ++++++++++++++++++ 1 file changed, 331 insertions(+) create mode 100644 spanner/cloudexecutor/executor/cloud_executor.go diff --git a/spanner/cloudexecutor/executor/cloud_executor.go b/spanner/cloudexecutor/executor/cloud_executor.go new file mode 100644 index 000000000000..eb7a06d0ed0b --- /dev/null +++ b/spanner/cloudexecutor/executor/cloud_executor.go @@ -0,0 +1,331 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package executor + +import ( + "fmt" + "log" + "strings" + + "cloud.google.com/go/spanner" + "cloud.google.com/go/spanner/apiv1/spannerpb" + executorpb "cloud.google.com/go/spanner/cloudexecutor/proto" + spb "google.golang.org/genproto/googleapis/rpc/status" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + _ "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/types/known/timestamppb" +) + +// tableMetadataHelper is used to hold and retrieve metadata of tables and columns involved +// in a transaction. +type tableMetadataHelper struct { + tableColumnsInOrder map[string][]*executorpb.ColumnMetadata + tableColumnsByName map[string]map[string]*executorpb.ColumnMetadata + tableKeyColumnsInOrder map[string][]*executorpb.ColumnMetadata +} + +// initFrom reads table metadata from the given StartTransactionAction. +func (t *tableMetadataHelper) initFrom(a *executorpb.StartTransactionAction) { + t.initFromTableMetadata(a.GetTable()) +} + +// initFromTableMetadata extracts table metadata and make maps to store them. +func (t *tableMetadataHelper) initFromTableMetadata(tables []*executorpb.TableMetadata) { + t.tableColumnsInOrder = make(map[string][]*executorpb.ColumnMetadata) + t.tableColumnsByName = make(map[string]map[string]*executorpb.ColumnMetadata) + t.tableKeyColumnsInOrder = make(map[string][]*executorpb.ColumnMetadata) + for _, table := range tables { + tableName := table.GetName() + t.tableColumnsInOrder[tableName] = table.GetColumn() + t.tableKeyColumnsInOrder[tableName] = table.GetKeyColumn() + t.tableColumnsByName[tableName] = make(map[string]*executorpb.ColumnMetadata) + for _, col := range table.GetColumn() { + t.tableColumnsByName[tableName][col.GetName()] = col + } + } +} + +// getColumnType returns the column type of the given table and column. +func (t *tableMetadataHelper) getColumnType(tableName string, colName string) (*spannerpb.Type, error) { + cols, ok := t.tableColumnsByName[tableName] + if !ok { + log.Printf("There is no metadata for table %s. Make sure that StartTransactionAction has TableMetadata correctly populated.", tableName) + return nil, spanner.ToSpannerError(status.Errorf(codes.InvalidArgument, "there is no metadata for table %s", tableName)) + } + colMetadata, ok := cols[colName] + if !ok { + log.Printf("Metadata for table %s contains no column named %s", tableName, colName) + return nil, spanner.ToSpannerError(status.Errorf(codes.InvalidArgument, "metadata for table %s contains no column named %s", tableName, colName)) + } + return colMetadata.GetType(), nil +} + +// getColumnTypes returns a list of column types of the given table. +func (t *tableMetadataHelper) getColumnTypes(tableName string) ([]*spannerpb.Type, error) { + cols, ok := t.tableColumnsInOrder[tableName] + if !ok { + log.Printf("There is no metadata for table %s. Make sure that StartTransactionAction has TableMetadata correctly populated.", tableName) + return nil, spanner.ToSpannerError(status.Errorf(codes.InvalidArgument, "there is no metadata for table %s", tableName)) + } + var colTypes []*spannerpb.Type + for _, col := range cols { + colTypes = append(colTypes, col.GetType()) + } + return colTypes, nil +} + +// getKeyColumnTypes returns a list of key column types of the given table. +func (t *tableMetadataHelper) getKeyColumnTypes(tableName string) ([]*spannerpb.Type, error) { + cols, ok := t.tableKeyColumnsInOrder[tableName] + if !ok { + log.Printf("There is no metadata for table %s. Make sure that StartTxnAction has TableMetadata correctly populated.", tableName) + return nil, fmt.Errorf("there is no metadata for table %s", tableName) + } + var colTypes []*spannerpb.Type + for _, col := range cols { + colTypes = append(colTypes, col.GetType()) + } + return colTypes, nil +} + +// outcomeSender is a utility class used for sending action outcomes back to the client. For read +// actions, it buffers rows and sends partial read results in batches. +type outcomeSender struct { + actionID int32 + stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer + + // partialOutcome accumulates rows and other relevant information + partialOutcome *executorpb.SpannerActionOutcome + readResult *executorpb.ReadResult + queryResult *executorpb.QueryResult + + // All the relevant variables below should be set before first outcome is sent back, + // and unused variables should leave null. + timestamp *timestamppb.Timestamp + hasReadResult bool + hasQueryResult bool + hasChangeStreamRecords bool + table string // name of the table being read + index *string // name of the secondary index used for read + requestIndex *int32 // request index (for multireads) + rowType *spannerpb.StructType + + // Current row count in read/query result + rowCount int64 + // modified row count in dml result + rowsModified []int64 +} + +// if rowCount exceed this value, we should send rows back in batch. +const maxRowsPerBatch = 100 + +// setTimestamp sets the timestamp for commit. +func (s *outcomeSender) setTimestamp(timestamp *timestamppb.Timestamp) { + s.timestamp = timestamp +} + +// setRowType sets the rowType for appending row. +func (s *outcomeSender) setRowType(rowType *spannerpb.StructType) { + s.rowType = rowType +} + +// initForRead init the sender for read action, then set the table and index if there exists. +func (s *outcomeSender) initForRead(table string, index *string) { + s.hasReadResult = true + s.table = table + if index != nil { + s.index = index + } +} + +// initForQuery init the sender for query action +func (s *outcomeSender) initForQuery() { + s.hasQueryResult = true +} + +// initForBatchRead init the sender for batch read action, then set the table and index if there exists. +func (s *outcomeSender) initForBatchRead(table string, index *string) { + s.initForRead(table, index) + // Cloud API supports only simple batch reads (not multi reads), so request index is always 0. + requestIndex := int32(0) + s.requestIndex = &requestIndex +} + +// Add rows modified in dml to result +func (s *outcomeSender) appendDmlRowsModified(rowsModified int64) { + // s.buildOutcome() + s.rowsModified = append(s.rowsModified, rowsModified) +} + +// finishSuccessfully sends the last outcome with OK status. +func (s *outcomeSender) finishSuccessfully() error { + s.buildOutcome() + s.partialOutcome.Status = &spb.Status{Code: int32(codes.OK)} + return s.flush() +} + +// finishWithTransactionRestarted sends the last outcome with aborted error, +// this will set the TransactionRestarted to true +func (s *outcomeSender) finishWithTransactionRestarted() error { + s.buildOutcome() + transactionRestarted := true + s.partialOutcome.TransactionRestarted = &transactionRestarted + s.partialOutcome.Status = &spb.Status{Code: int32(codes.OK)} + return s.flush() +} + +// finishWithError sends the last outcome with given error status. +func (s *outcomeSender) finishWithError(err error) error { + s.buildOutcome() + //s.partialOutcome.Status = &status.Status{Code: int32(gstatus.Code(err)), Message: err.Error()} + s.partialOutcome.Status = errToStatus(err) + return s.flush() +} + +// appendRow adds another row to buffer. If buffer hits its size limit, the buffered rows will be sent back. +func (s *outcomeSender) appendRow(row *executorpb.ValueList) error { + if !s.hasReadResult && !s.hasQueryResult { + return spanner.ToSpannerError(status.Error(codes.InvalidArgument, "either hasReadResult or hasQueryResult should be true")) + } + if s.rowType == nil { + return spanner.ToSpannerError(status.Error(codes.InvalidArgument, "rowType should be set first")) + } + s.buildOutcome() + if s.hasReadResult { + s.readResult.Row = append(s.readResult.Row, row) + s.rowCount++ + } else if s.hasQueryResult { + s.queryResult.Row = append(s.queryResult.Row, row) + s.rowCount++ + } + if s.rowCount >= maxRowsPerBatch { + return s.flush() + } + return nil +} + +// buildOutcome will build the partialOutcome if not exists using relevant variables. +func (s *outcomeSender) buildOutcome() { + if s.partialOutcome != nil { + return + } + s.partialOutcome = &executorpb.SpannerActionOutcome{ + CommitTime: s.timestamp, + } + if s.hasReadResult { + s.readResult = &executorpb.ReadResult{ + Table: s.table, + Index: s.index, + RowType: s.rowType, + RequestIndex: s.requestIndex, + } + } else if s.hasQueryResult { + s.queryResult = &executorpb.QueryResult{ + RowType: s.rowType, + } + } +} + +// flush sends partialOutcome to stream and clear the internal state +func (s *outcomeSender) flush() error { + if s == nil || s.partialOutcome == nil { + log.Println("outcomeSender.flush() is called when there is no partial outcome to send. This is an internal error that should never happen") + return spanner.ToSpannerError(status.Error(codes.InvalidArgument, "either outcome sender or partial outcome is nil")) + } + s.partialOutcome.DmlRowsModified = s.rowsModified + if s.hasReadResult { + s.partialOutcome.ReadResult = s.readResult + } else if s.hasQueryResult { + s.partialOutcome.QueryResult = s.queryResult + } + err := s.sendOutcome(s.partialOutcome) + s.partialOutcome = nil + s.readResult = nil + s.queryResult = nil + s.rowCount = 0 + s.rowsModified = []int64{} + return err +} + +// sendOutcome sends the given SpannerActionOutcome. +func (s *outcomeSender) sendOutcome(outcome *executorpb.SpannerActionOutcome) error { + log.Printf("sending result %v actionId %d", outcome, s.actionID) + resp := &executorpb.SpannerAsyncActionResponse{ + ActionId: s.actionID, + Outcome: outcome, + } + err := s.stream.Send(resp) + if err != nil { + log.Printf("Failed to send outcome with error: %s", err.Error()) + } else { + log.Printf("Sent result %v actionId %d", outcome, s.actionID) + } + return err +} + +// errToStatus maps cloud error to Status +func errToStatus(e error) *spb.Status { + log.Print(e.Error()) + if strings.Contains(e.Error(), "Transaction outcome unknown") { + return &spb.Status{Code: int32(codes.DeadlineExceeded), Message: e.Error()} + } + if status.Code(e) == codes.InvalidArgument { + return &spb.Status{Code: int32(codes.InvalidArgument), Message: e.Error()} + } + if status.Code(e) == codes.PermissionDenied { + return &spb.Status{Code: int32(codes.PermissionDenied), Message: e.Error()} + } + if status.Code(e) == codes.Aborted { + return &spb.Status{Code: int32(codes.Aborted), Message: e.Error()} + } + if status.Code(e) == codes.AlreadyExists { + return &spb.Status{Code: int32(codes.AlreadyExists), Message: e.Error()} + } + if status.Code(e) == codes.Canceled { + return &spb.Status{Code: int32(codes.Canceled), Message: e.Error()} + } + if status.Code(e) == codes.Internal { + return &spb.Status{Code: int32(codes.Internal), Message: e.Error()} + } + if status.Code(e) == codes.FailedPrecondition { + return &spb.Status{Code: int32(codes.FailedPrecondition), Message: e.Error()} + } + if status.Code(e) == codes.NotFound { + return &spb.Status{Code: int32(codes.NotFound), Message: e.Error()} + } + if status.Code(e) == codes.DeadlineExceeded { + return &spb.Status{Code: int32(codes.DeadlineExceeded), Message: e.Error()} + } + if status.Code(e) == codes.ResourceExhausted { + return &spb.Status{Code: int32(codes.ResourceExhausted), Message: e.Error()} + } + if status.Code(e) == codes.OutOfRange { + return &spb.Status{Code: int32(codes.OutOfRange), Message: e.Error()} + } + if status.Code(e) == codes.Unauthenticated { + return &spb.Status{Code: int32(codes.Unauthenticated), Message: e.Error()} + } + if status.Code(e) == codes.Unimplemented { + return &spb.Status{Code: int32(codes.Unimplemented), Message: e.Error()} + } + if status.Code(e) == codes.Unavailable { + return &spb.Status{Code: int32(codes.Unavailable), Message: e.Error()} + } + if status.Code(e) == codes.Unknown { + return &spb.Status{Code: int32(codes.Unknown), Message: e.Error()} + } + return &spb.Status{Code: int32(codes.Unknown), Message: fmt.Sprintf("Error: %v, Unsupported Spanner error code: %v", e.Error(), status.Code(e))} +} From cff3d6cb660604dbd8f87033b4a39ba461bafe2a Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Thu, 19 Oct 2023 17:11:05 +0000 Subject: [PATCH 05/15] feat(spanner): make code modular --- spanner/cloudexecutor/worker_proxy.go | 32 +++++++++++++-------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/spanner/cloudexecutor/worker_proxy.go b/spanner/cloudexecutor/worker_proxy.go index b94dea196e96..320c066bf586 100644 --- a/spanner/cloudexecutor/worker_proxy.go +++ b/spanner/cloudexecutor/worker_proxy.go @@ -38,6 +38,7 @@ var ( spannerPort = flag.String("spanner_port", "", "Port of Spanner Frontend to which to send requests.") cert = flag.String("cert", "", "Certificate used to connect to Spanner GFE.") serviceKeyFile = flag.String("service_key_file", "", "Service key file used to set authentication.") + ipAddress = "127.0.0.1:" ) func main() { @@ -88,16 +89,8 @@ func main() { // Constructs client options needed to run executor for systests func getClientOptionsForSysTests() []option.ClientOption { var options []option.ClientOption - - endpoint := "127.0.0.1:" + *spannerPort - log.Printf("endpoint for grpc dial: %s", endpoint) - options = append(options, option.WithEndpoint(endpoint)) - - creds, err := credentials.NewClientTLSFromFile(*cert, "test-cert-2") - if err != nil { - log.Println(err) - } - options = append(options, option.WithGRPCDialOption(grpc.WithTransportCredentials(creds))) + options = append(options, option.WithEndpoint(getEndPoint())) + options = append(options, option.WithGRPCDialOption(grpc.WithTransportCredentials(getCredentials()))) const ( spannerAdminScope = "https://www.googleapis.com/auth/spanner.admin" @@ -128,20 +121,25 @@ func (f *fakeTokenSource) Token() (*oauth2.Token, error) { // Constructs client options needed to run executor for unit tests func getClientOptionsForUnitTests() []option.ClientOption { var options []option.ClientOption + options = append(options, option.WithEndpoint(getEndPoint())) + options = append(options, option.WithGRPCDialOption(grpc.WithTransportCredentials(getCredentials()))) + options = append(options, option.WithTokenSource(&fakeTokenSource{})) - endpoint := "127.0.0.1:" + *spannerPort + return options +} + +func getEndPoint() string { + endpoint := ipAddress + *spannerPort log.Printf("endpoint for grpc dial: %s", endpoint) + return endpoint +} - options = append(options, option.WithEndpoint(endpoint)) +func getCredentials() credentials.TransportCredentials { creds, err := credentials.NewClientTLSFromFile(*cert, "test-cert-2") if err != nil { log.Println(err) } - - options = append(options, option.WithGRPCDialOption(grpc.WithTransportCredentials(creds))) - options = append(options, option.WithTokenSource(&fakeTokenSource{})) - - return options + return creds } // Constructs client options needed to run executor on local machine From 1a5073fe48a25d92bc08bc6c93fb514d2483d34b Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Fri, 20 Oct 2023 05:17:09 +0000 Subject: [PATCH 06/15] feat(spanner): move autogenerated protos to a different PR --- spanner/cloudexecutor/proto/README.md | 7 - .../cloudexecutor/proto/cloud_executor.pb.go | 9431 ----------------- .../cloudexecutor/proto/cloud_executor.proto | 1455 --- 3 files changed, 10893 deletions(-) delete mode 100644 spanner/cloudexecutor/proto/README.md delete mode 100644 spanner/cloudexecutor/proto/cloud_executor.pb.go delete mode 100644 spanner/cloudexecutor/proto/cloud_executor.proto diff --git a/spanner/cloudexecutor/proto/README.md b/spanner/cloudexecutor/proto/README.md deleted file mode 100644 index da91020296f5..000000000000 --- a/spanner/cloudexecutor/proto/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Regenerating protos - -Cloud Spanner Executor Framework - To generate code manually for cloud_executor.proto file using protoc, run the command below. -``` -cd spanner/cloudexecutor/proto -protoc --go_out=plugins=grpc:. -I= -I=./ cloud_executor.proto -``` \ No newline at end of file diff --git a/spanner/cloudexecutor/proto/cloud_executor.pb.go b/spanner/cloudexecutor/proto/cloud_executor.pb.go deleted file mode 100644 index 944ca58b30a4..000000000000 --- a/spanner/cloudexecutor/proto/cloud_executor.pb.go +++ /dev/null @@ -1,9431 +0,0 @@ -// Copyright 2023 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.26.0 -// protoc v3.21.12 -// source: cloud_executor.proto - -package executorpb - -import ( - longrunningpb "cloud.google.com/go/longrunning/autogen/longrunningpb" - databasepb "cloud.google.com/go/spanner/admin/database/apiv1/databasepb" - instancepb "cloud.google.com/go/spanner/admin/instance/apiv1/instancepb" - spannerpb "cloud.google.com/go/spanner/apiv1/spannerpb" - context "context" - _ "google.golang.org/genproto/googleapis/api/annotations" - status "google.golang.org/genproto/googleapis/rpc/status" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status1 "google.golang.org/grpc/status" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Type controls whether "start" and "limit" are open or closed. By default, -// "start" is closed, and "limit" is open. -type KeyRange_Type int32 - -const ( - // "TYPE_UNSPECIFIED" is equivalent to "CLOSED_OPEN". - KeyRange_TYPE_UNSPECIFIED KeyRange_Type = 0 - // [start,limit] - KeyRange_CLOSED_CLOSED KeyRange_Type = 1 - // [start,limit) - KeyRange_CLOSED_OPEN KeyRange_Type = 2 - // (start,limit] - KeyRange_OPEN_CLOSED KeyRange_Type = 3 - // (start,limit) - KeyRange_OPEN_OPEN KeyRange_Type = 4 -) - -// Enum value maps for KeyRange_Type. -var ( - KeyRange_Type_name = map[int32]string{ - 0: "TYPE_UNSPECIFIED", - 1: "CLOSED_CLOSED", - 2: "CLOSED_OPEN", - 3: "OPEN_CLOSED", - 4: "OPEN_OPEN", - } - KeyRange_Type_value = map[string]int32{ - "TYPE_UNSPECIFIED": 0, - "CLOSED_CLOSED": 1, - "CLOSED_OPEN": 2, - "OPEN_CLOSED": 3, - "OPEN_OPEN": 4, - } -) - -func (x KeyRange_Type) Enum() *KeyRange_Type { - p := new(KeyRange_Type) - *p = x - return p -} - -func (x KeyRange_Type) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (KeyRange_Type) Descriptor() protoreflect.EnumDescriptor { - return file_cloud_executor_proto_enumTypes[0].Descriptor() -} - -func (KeyRange_Type) Type() protoreflect.EnumType { - return &file_cloud_executor_proto_enumTypes[0] -} - -func (x KeyRange_Type) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use KeyRange_Type.Descriptor instead. -func (KeyRange_Type) EnumDescriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{8, 0} -} - -// Mode indicates how the transaction should be finished. -type FinishTransactionAction_Mode int32 - -const ( - // "MODE_UNSPECIFIED" is equivalent to "COMMIT". - FinishTransactionAction_MODE_UNSPECIFIED FinishTransactionAction_Mode = 0 - // Commit the transaction. - FinishTransactionAction_COMMIT FinishTransactionAction_Mode = 1 - // Drop the transaction without committing it. - FinishTransactionAction_ABANDON FinishTransactionAction_Mode = 2 -) - -// Enum value maps for FinishTransactionAction_Mode. -var ( - FinishTransactionAction_Mode_name = map[int32]string{ - 0: "MODE_UNSPECIFIED", - 1: "COMMIT", - 2: "ABANDON", - } - FinishTransactionAction_Mode_value = map[string]int32{ - "MODE_UNSPECIFIED": 0, - "COMMIT": 1, - "ABANDON": 2, - } -) - -func (x FinishTransactionAction_Mode) Enum() *FinishTransactionAction_Mode { - p := new(FinishTransactionAction_Mode) - *p = x - return p -} - -func (x FinishTransactionAction_Mode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (FinishTransactionAction_Mode) Descriptor() protoreflect.EnumDescriptor { - return file_cloud_executor_proto_enumTypes[1].Descriptor() -} - -func (FinishTransactionAction_Mode) Type() protoreflect.EnumType { - return &file_cloud_executor_proto_enumTypes[1] -} - -func (x FinishTransactionAction_Mode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use FinishTransactionAction_Mode.Descriptor instead. -func (FinishTransactionAction_Mode) EnumDescriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{19, 0} -} - -// Request to executor service that start a new Spanner action. -type SpannerAsyncActionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Action id to uniquely identify this action request. - ActionId int32 `protobuf:"varint,1,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"` - // The actual SpannerAction to perform. - Action *SpannerAction `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` -} - -func (x *SpannerAsyncActionRequest) Reset() { - *x = SpannerAsyncActionRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SpannerAsyncActionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SpannerAsyncActionRequest) ProtoMessage() {} - -func (x *SpannerAsyncActionRequest) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SpannerAsyncActionRequest.ProtoReflect.Descriptor instead. -func (*SpannerAsyncActionRequest) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{0} -} - -func (x *SpannerAsyncActionRequest) GetActionId() int32 { - if x != nil { - return x.ActionId - } - return 0 -} - -func (x *SpannerAsyncActionRequest) GetAction() *SpannerAction { - if x != nil { - return x.Action - } - return nil -} - -// Response from executor service. -type SpannerAsyncActionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Action id corresponds to the request. - ActionId int32 `protobuf:"varint,1,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"` - // If action results are split into multiple responses, only the last response - // can and should contain status. - Outcome *SpannerActionOutcome `protobuf:"bytes,2,opt,name=outcome,proto3" json:"outcome,omitempty"` -} - -func (x *SpannerAsyncActionResponse) Reset() { - *x = SpannerAsyncActionResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SpannerAsyncActionResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SpannerAsyncActionResponse) ProtoMessage() {} - -func (x *SpannerAsyncActionResponse) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SpannerAsyncActionResponse.ProtoReflect.Descriptor instead. -func (*SpannerAsyncActionResponse) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{1} -} - -func (x *SpannerAsyncActionResponse) GetActionId() int32 { - if x != nil { - return x.ActionId - } - return 0 -} - -func (x *SpannerAsyncActionResponse) GetOutcome() *SpannerActionOutcome { - if x != nil { - return x.Outcome - } - return nil -} - -// SpannerAction defines a primitive action that can be performed against -// Spanner, such as begin or commit a transaction, or perform a read or -// mutation. -type SpannerAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Database against which to perform action. - // In a context where a series of actions take place, an action may omit - // database path if it applies to the same database as the previous action. - DatabasePath string `protobuf:"bytes,1,opt,name=database_path,json=databasePath,proto3" json:"database_path,omitempty"` - // Action represents a spanner action kind, there will only be one action kind - // per SpannerAction. - // - // Types that are assignable to Action: - // - // *SpannerAction_Start - // *SpannerAction_Finish - // *SpannerAction_Read - // *SpannerAction_Query - // *SpannerAction_Mutation - // *SpannerAction_Dml - // *SpannerAction_BatchDml - // *SpannerAction_Write - // *SpannerAction_PartitionedUpdate - // *SpannerAction_Admin - // *SpannerAction_StartBatchTxn - // *SpannerAction_CloseBatchTxn - // *SpannerAction_GenerateDbPartitionsRead - // *SpannerAction_GenerateDbPartitionsQuery - // *SpannerAction_ExecutePartition - // *SpannerAction_ExecuteChangeStreamQuery - Action isSpannerAction_Action `protobuf_oneof:"action"` -} - -func (x *SpannerAction) Reset() { - *x = SpannerAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SpannerAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SpannerAction) ProtoMessage() {} - -func (x *SpannerAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SpannerAction.ProtoReflect.Descriptor instead. -func (*SpannerAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{2} -} - -func (x *SpannerAction) GetDatabasePath() string { - if x != nil { - return x.DatabasePath - } - return "" -} - -func (m *SpannerAction) GetAction() isSpannerAction_Action { - if m != nil { - return m.Action - } - return nil -} - -func (x *SpannerAction) GetStart() *StartTransactionAction { - if x, ok := x.GetAction().(*SpannerAction_Start); ok { - return x.Start - } - return nil -} - -func (x *SpannerAction) GetFinish() *FinishTransactionAction { - if x, ok := x.GetAction().(*SpannerAction_Finish); ok { - return x.Finish - } - return nil -} - -func (x *SpannerAction) GetRead() *ReadAction { - if x, ok := x.GetAction().(*SpannerAction_Read); ok { - return x.Read - } - return nil -} - -func (x *SpannerAction) GetQuery() *QueryAction { - if x, ok := x.GetAction().(*SpannerAction_Query); ok { - return x.Query - } - return nil -} - -func (x *SpannerAction) GetMutation() *MutationAction { - if x, ok := x.GetAction().(*SpannerAction_Mutation); ok { - return x.Mutation - } - return nil -} - -func (x *SpannerAction) GetDml() *DmlAction { - if x, ok := x.GetAction().(*SpannerAction_Dml); ok { - return x.Dml - } - return nil -} - -func (x *SpannerAction) GetBatchDml() *BatchDmlAction { - if x, ok := x.GetAction().(*SpannerAction_BatchDml); ok { - return x.BatchDml - } - return nil -} - -func (x *SpannerAction) GetWrite() *WriteMutationsAction { - if x, ok := x.GetAction().(*SpannerAction_Write); ok { - return x.Write - } - return nil -} - -func (x *SpannerAction) GetPartitionedUpdate() *PartitionedUpdateAction { - if x, ok := x.GetAction().(*SpannerAction_PartitionedUpdate); ok { - return x.PartitionedUpdate - } - return nil -} - -func (x *SpannerAction) GetAdmin() *AdminAction { - if x, ok := x.GetAction().(*SpannerAction_Admin); ok { - return x.Admin - } - return nil -} - -func (x *SpannerAction) GetStartBatchTxn() *StartBatchTransactionAction { - if x, ok := x.GetAction().(*SpannerAction_StartBatchTxn); ok { - return x.StartBatchTxn - } - return nil -} - -func (x *SpannerAction) GetCloseBatchTxn() *CloseBatchTransactionAction { - if x, ok := x.GetAction().(*SpannerAction_CloseBatchTxn); ok { - return x.CloseBatchTxn - } - return nil -} - -func (x *SpannerAction) GetGenerateDbPartitionsRead() *GenerateDbPartitionsForReadAction { - if x, ok := x.GetAction().(*SpannerAction_GenerateDbPartitionsRead); ok { - return x.GenerateDbPartitionsRead - } - return nil -} - -func (x *SpannerAction) GetGenerateDbPartitionsQuery() *GenerateDbPartitionsForQueryAction { - if x, ok := x.GetAction().(*SpannerAction_GenerateDbPartitionsQuery); ok { - return x.GenerateDbPartitionsQuery - } - return nil -} - -func (x *SpannerAction) GetExecutePartition() *ExecutePartitionAction { - if x, ok := x.GetAction().(*SpannerAction_ExecutePartition); ok { - return x.ExecutePartition - } - return nil -} - -func (x *SpannerAction) GetExecuteChangeStreamQuery() *ExecuteChangeStreamQuery { - if x, ok := x.GetAction().(*SpannerAction_ExecuteChangeStreamQuery); ok { - return x.ExecuteChangeStreamQuery - } - return nil -} - -type isSpannerAction_Action interface { - isSpannerAction_Action() -} - -type SpannerAction_Start struct { - // Action to start a transaction. - Start *StartTransactionAction `protobuf:"bytes,10,opt,name=start,proto3,oneof"` -} - -type SpannerAction_Finish struct { - // Action to finish a transaction. - Finish *FinishTransactionAction `protobuf:"bytes,11,opt,name=finish,proto3,oneof"` -} - -type SpannerAction_Read struct { - // Action to do a normal read. - Read *ReadAction `protobuf:"bytes,20,opt,name=read,proto3,oneof"` -} - -type SpannerAction_Query struct { - // Action to do a query. - Query *QueryAction `protobuf:"bytes,21,opt,name=query,proto3,oneof"` -} - -type SpannerAction_Mutation struct { - // Action to buffer a mutation. - Mutation *MutationAction `protobuf:"bytes,22,opt,name=mutation,proto3,oneof"` -} - -type SpannerAction_Dml struct { - // Action to a DML. - Dml *DmlAction `protobuf:"bytes,23,opt,name=dml,proto3,oneof"` -} - -type SpannerAction_BatchDml struct { - // Action to a batch DML. - BatchDml *BatchDmlAction `protobuf:"bytes,24,opt,name=batch_dml,json=batchDml,proto3,oneof"` -} - -type SpannerAction_Write struct { - // Action to write a mutation. - Write *WriteMutationsAction `protobuf:"bytes,25,opt,name=write,proto3,oneof"` -} - -type SpannerAction_PartitionedUpdate struct { - // Action to a partitioned update. - PartitionedUpdate *PartitionedUpdateAction `protobuf:"bytes,27,opt,name=partitioned_update,json=partitionedUpdate,proto3,oneof"` -} - -type SpannerAction_Admin struct { - // Action that contains any administrative operation, like database, - // instance manipulation. - Admin *AdminAction `protobuf:"bytes,30,opt,name=admin,proto3,oneof"` -} - -type SpannerAction_StartBatchTxn struct { - // Action to start a batch transaction. - StartBatchTxn *StartBatchTransactionAction `protobuf:"bytes,40,opt,name=start_batch_txn,json=startBatchTxn,proto3,oneof"` -} - -type SpannerAction_CloseBatchTxn struct { - // Action to close a batch transaction. - CloseBatchTxn *CloseBatchTransactionAction `protobuf:"bytes,41,opt,name=close_batch_txn,json=closeBatchTxn,proto3,oneof"` -} - -type SpannerAction_GenerateDbPartitionsRead struct { - // Action to generate database partitions for batch read. - GenerateDbPartitionsRead *GenerateDbPartitionsForReadAction `protobuf:"bytes,42,opt,name=generate_db_partitions_read,json=generateDbPartitionsRead,proto3,oneof"` -} - -type SpannerAction_GenerateDbPartitionsQuery struct { - // Action to generate database partitions for batch query. - GenerateDbPartitionsQuery *GenerateDbPartitionsForQueryAction `protobuf:"bytes,43,opt,name=generate_db_partitions_query,json=generateDbPartitionsQuery,proto3,oneof"` -} - -type SpannerAction_ExecutePartition struct { - // Action to execute batch actions on generated partitions. - ExecutePartition *ExecutePartitionAction `protobuf:"bytes,44,opt,name=execute_partition,json=executePartition,proto3,oneof"` -} - -type SpannerAction_ExecuteChangeStreamQuery struct { - // Action to execute change stream query. - ExecuteChangeStreamQuery *ExecuteChangeStreamQuery `protobuf:"bytes,50,opt,name=execute_change_stream_query,json=executeChangeStreamQuery,proto3,oneof"` -} - -func (*SpannerAction_Start) isSpannerAction_Action() {} - -func (*SpannerAction_Finish) isSpannerAction_Action() {} - -func (*SpannerAction_Read) isSpannerAction_Action() {} - -func (*SpannerAction_Query) isSpannerAction_Action() {} - -func (*SpannerAction_Mutation) isSpannerAction_Action() {} - -func (*SpannerAction_Dml) isSpannerAction_Action() {} - -func (*SpannerAction_BatchDml) isSpannerAction_Action() {} - -func (*SpannerAction_Write) isSpannerAction_Action() {} - -func (*SpannerAction_PartitionedUpdate) isSpannerAction_Action() {} - -func (*SpannerAction_Admin) isSpannerAction_Action() {} - -func (*SpannerAction_StartBatchTxn) isSpannerAction_Action() {} - -func (*SpannerAction_CloseBatchTxn) isSpannerAction_Action() {} - -func (*SpannerAction_GenerateDbPartitionsRead) isSpannerAction_Action() {} - -func (*SpannerAction_GenerateDbPartitionsQuery) isSpannerAction_Action() {} - -func (*SpannerAction_ExecutePartition) isSpannerAction_Action() {} - -func (*SpannerAction_ExecuteChangeStreamQuery) isSpannerAction_Action() {} - -// A single read request. -type ReadAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The table to read at. - Table string `protobuf:"bytes,1,opt,name=table,proto3" json:"table,omitempty"` - // The index to read at if it's an index read. - Index *string `protobuf:"bytes,2,opt,name=index,proto3,oneof" json:"index,omitempty"` - // List of columns must begin with the key columns used for the read. - Column []string `protobuf:"bytes,3,rep,name=column,proto3" json:"column,omitempty"` - // Keys for performing this read. - Keys *KeySet `protobuf:"bytes,4,opt,name=keys,proto3" json:"keys,omitempty"` - // Limit on number of rows to read. If set, must be positive. - Limit int32 `protobuf:"varint,5,opt,name=limit,proto3" json:"limit,omitempty"` -} - -func (x *ReadAction) Reset() { - *x = ReadAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ReadAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ReadAction) ProtoMessage() {} - -func (x *ReadAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ReadAction.ProtoReflect.Descriptor instead. -func (*ReadAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{3} -} - -func (x *ReadAction) GetTable() string { - if x != nil { - return x.Table - } - return "" -} - -func (x *ReadAction) GetIndex() string { - if x != nil && x.Index != nil { - return *x.Index - } - return "" -} - -func (x *ReadAction) GetColumn() []string { - if x != nil { - return x.Column - } - return nil -} - -func (x *ReadAction) GetKeys() *KeySet { - if x != nil { - return x.Keys - } - return nil -} - -func (x *ReadAction) GetLimit() int32 { - if x != nil { - return x.Limit - } - return 0 -} - -// A SQL query request. -type QueryAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The SQL string. - Sql string `protobuf:"bytes,1,opt,name=sql,proto3" json:"sql,omitempty"` - // Parameters for the SQL string. - Params []*QueryAction_Parameter `protobuf:"bytes,2,rep,name=params,proto3" json:"params,omitempty"` -} - -func (x *QueryAction) Reset() { - *x = QueryAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *QueryAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*QueryAction) ProtoMessage() {} - -func (x *QueryAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use QueryAction.ProtoReflect.Descriptor instead. -func (*QueryAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{4} -} - -func (x *QueryAction) GetSql() string { - if x != nil { - return x.Sql - } - return "" -} - -func (x *QueryAction) GetParams() []*QueryAction_Parameter { - if x != nil { - return x.Params - } - return nil -} - -// A single DML statement. -type DmlAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // DML statement. - Update *QueryAction `protobuf:"bytes,1,opt,name=update,proto3" json:"update,omitempty"` - // Whether to autocommit the transaction after executing the DML statement, - // if the Executor supports autocommit. - AutocommitIfSupported *bool `protobuf:"varint,2,opt,name=autocommit_if_supported,json=autocommitIfSupported,proto3,oneof" json:"autocommit_if_supported,omitempty"` -} - -func (x *DmlAction) Reset() { - *x = DmlAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DmlAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DmlAction) ProtoMessage() {} - -func (x *DmlAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DmlAction.ProtoReflect.Descriptor instead. -func (*DmlAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{5} -} - -func (x *DmlAction) GetUpdate() *QueryAction { - if x != nil { - return x.Update - } - return nil -} - -func (x *DmlAction) GetAutocommitIfSupported() bool { - if x != nil && x.AutocommitIfSupported != nil { - return *x.AutocommitIfSupported - } - return false -} - -// Batch of DML statements invoked using batched execution. -type BatchDmlAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // DML statements. - Updates []*QueryAction `protobuf:"bytes,1,rep,name=updates,proto3" json:"updates,omitempty"` -} - -func (x *BatchDmlAction) Reset() { - *x = BatchDmlAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BatchDmlAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BatchDmlAction) ProtoMessage() {} - -func (x *BatchDmlAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BatchDmlAction.ProtoReflect.Descriptor instead. -func (*BatchDmlAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{6} -} - -func (x *BatchDmlAction) GetUpdates() []*QueryAction { - if x != nil { - return x.Updates - } - return nil -} - -// Value represents a single value that can be read or written to/from -// Spanner. -type Value struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Exactly one of the following fields will be present. - // - // Types that are assignable to ValueType: - // - // *Value_IsNull - // *Value_IntValue - // *Value_BoolValue - // *Value_DoubleValue - // *Value_BytesValue - // *Value_StringValue - // *Value_StructValue - // *Value_TimestampValue - // *Value_DateDaysValue - // *Value_IsCommitTimestamp - // *Value_ArrayValue - ValueType isValue_ValueType `protobuf_oneof:"value_type"` - // Type of array element. Only set if value is an array. - ArrayType *spannerpb.Type `protobuf:"bytes,12,opt,name=array_type,json=arrayType,proto3,oneof" json:"array_type,omitempty"` -} - -func (x *Value) Reset() { - *x = Value{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Value) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Value) ProtoMessage() {} - -func (x *Value) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Value.ProtoReflect.Descriptor instead. -func (*Value) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{7} -} - -func (m *Value) GetValueType() isValue_ValueType { - if m != nil { - return m.ValueType - } - return nil -} - -func (x *Value) GetIsNull() bool { - if x, ok := x.GetValueType().(*Value_IsNull); ok { - return x.IsNull - } - return false -} - -func (x *Value) GetIntValue() int64 { - if x, ok := x.GetValueType().(*Value_IntValue); ok { - return x.IntValue - } - return 0 -} - -func (x *Value) GetBoolValue() bool { - if x, ok := x.GetValueType().(*Value_BoolValue); ok { - return x.BoolValue - } - return false -} - -func (x *Value) GetDoubleValue() float64 { - if x, ok := x.GetValueType().(*Value_DoubleValue); ok { - return x.DoubleValue - } - return 0 -} - -func (x *Value) GetBytesValue() []byte { - if x, ok := x.GetValueType().(*Value_BytesValue); ok { - return x.BytesValue - } - return nil -} - -func (x *Value) GetStringValue() string { - if x, ok := x.GetValueType().(*Value_StringValue); ok { - return x.StringValue - } - return "" -} - -func (x *Value) GetStructValue() *ValueList { - if x, ok := x.GetValueType().(*Value_StructValue); ok { - return x.StructValue - } - return nil -} - -func (x *Value) GetTimestampValue() *timestamppb.Timestamp { - if x, ok := x.GetValueType().(*Value_TimestampValue); ok { - return x.TimestampValue - } - return nil -} - -func (x *Value) GetDateDaysValue() int32 { - if x, ok := x.GetValueType().(*Value_DateDaysValue); ok { - return x.DateDaysValue - } - return 0 -} - -func (x *Value) GetIsCommitTimestamp() bool { - if x, ok := x.GetValueType().(*Value_IsCommitTimestamp); ok { - return x.IsCommitTimestamp - } - return false -} - -func (x *Value) GetArrayValue() *ValueList { - if x, ok := x.GetValueType().(*Value_ArrayValue); ok { - return x.ArrayValue - } - return nil -} - -func (x *Value) GetArrayType() *spannerpb.Type { - if x != nil { - return x.ArrayType - } - return nil -} - -type isValue_ValueType interface { - isValue_ValueType() -} - -type Value_IsNull struct { - // If is_null is set, then this value is null. - IsNull bool `protobuf:"varint,1,opt,name=is_null,json=isNull,proto3,oneof"` -} - -type Value_IntValue struct { - // Int type value. It's used for all integer number types, like int32 and - // int64. - IntValue int64 `protobuf:"varint,2,opt,name=int_value,json=intValue,proto3,oneof"` -} - -type Value_BoolValue struct { - // Bool type value. - BoolValue bool `protobuf:"varint,3,opt,name=bool_value,json=boolValue,proto3,oneof"` -} - -type Value_DoubleValue struct { - // Double type value. It's used for all float point types, like float and - // double. - DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue,proto3,oneof"` -} - -type Value_BytesValue struct { - // Bytes type value, stored in CORD. It's also used for PROTO type value. - BytesValue []byte `protobuf:"bytes,5,opt,name=bytes_value,json=bytesValue,proto3,oneof"` -} - -type Value_StringValue struct { - // String type value, stored in CORD. - StringValue string `protobuf:"bytes,6,opt,name=string_value,json=stringValue,proto3,oneof"` -} - -type Value_StructValue struct { - // Struct type value. It contains a ValueList representing the values in - // this struct. - StructValue *ValueList `protobuf:"bytes,7,opt,name=struct_value,json=structValue,proto3,oneof"` -} - -type Value_TimestampValue struct { - // Timestamp type value. - TimestampValue *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=timestamp_value,json=timestampValue,proto3,oneof"` -} - -type Value_DateDaysValue struct { - // Date type value. Date is specified as a number of days since Unix epoch. - DateDaysValue int32 `protobuf:"varint,9,opt,name=date_days_value,json=dateDaysValue,proto3,oneof"` -} - -type Value_IsCommitTimestamp struct { - // If set, holds the sentinel value for the transaction CommitTimestamp. - IsCommitTimestamp bool `protobuf:"varint,10,opt,name=is_commit_timestamp,json=isCommitTimestamp,proto3,oneof"` -} - -type Value_ArrayValue struct { - // Array type value. The underlying Valuelist should have values that have - // the same type. - ArrayValue *ValueList `protobuf:"bytes,11,opt,name=array_value,json=arrayValue,proto3,oneof"` -} - -func (*Value_IsNull) isValue_ValueType() {} - -func (*Value_IntValue) isValue_ValueType() {} - -func (*Value_BoolValue) isValue_ValueType() {} - -func (*Value_DoubleValue) isValue_ValueType() {} - -func (*Value_BytesValue) isValue_ValueType() {} - -func (*Value_StringValue) isValue_ValueType() {} - -func (*Value_StructValue) isValue_ValueType() {} - -func (*Value_TimestampValue) isValue_ValueType() {} - -func (*Value_DateDaysValue) isValue_ValueType() {} - -func (*Value_IsCommitTimestamp) isValue_ValueType() {} - -func (*Value_ArrayValue) isValue_ValueType() {} - -// KeyRange represents a range of rows in a table or index. -// -// A range has a start key and an end key. These keys can be open or -// closed, indicating if the range includes rows with that key. -// -// Keys are represented by "ValueList", where the ith value in the list -// corresponds to the ith component of the table or index primary key. -type KeyRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // "start" and "limit" must have the same number of key parts, - // though they may name only a prefix of the table or index key. - // The start key of this KeyRange. - Start *ValueList `protobuf:"bytes,1,opt,name=start,proto3" json:"start,omitempty"` - // The end key of this KeyRange. - Limit *ValueList `protobuf:"bytes,2,opt,name=limit,proto3" json:"limit,omitempty"` - // "start" and "limit" type for this KeyRange. - Type *KeyRange_Type `protobuf:"varint,3,opt,name=type,proto3,enum=google.spanner.executor.v1.KeyRange_Type,oneof" json:"type,omitempty"` -} - -func (x *KeyRange) Reset() { - *x = KeyRange{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *KeyRange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*KeyRange) ProtoMessage() {} - -func (x *KeyRange) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use KeyRange.ProtoReflect.Descriptor instead. -func (*KeyRange) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{8} -} - -func (x *KeyRange) GetStart() *ValueList { - if x != nil { - return x.Start - } - return nil -} - -func (x *KeyRange) GetLimit() *ValueList { - if x != nil { - return x.Limit - } - return nil -} - -func (x *KeyRange) GetType() KeyRange_Type { - if x != nil && x.Type != nil { - return *x.Type - } - return KeyRange_TYPE_UNSPECIFIED -} - -// KeySet defines a collection of Spanner keys and/or key ranges. All -// the keys are expected to be in the same table. The keys need not be -// sorted in any particular way. -type KeySet struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A list of specific keys. Entries in "keys" should have exactly as - // many elements as there are columns in the primary or index key - // with which this "KeySet" is used. - Point []*ValueList `protobuf:"bytes,1,rep,name=point,proto3" json:"point,omitempty"` - // A list of key ranges. - Range []*KeyRange `protobuf:"bytes,2,rep,name=range,proto3" json:"range,omitempty"` - // For convenience "all" can be set to "true" to indicate that this - // "KeySet" matches all keys in the table or index. Note that any keys - // specified in "keys" or "ranges" are only yielded once. - All bool `protobuf:"varint,3,opt,name=all,proto3" json:"all,omitempty"` -} - -func (x *KeySet) Reset() { - *x = KeySet{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *KeySet) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*KeySet) ProtoMessage() {} - -func (x *KeySet) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use KeySet.ProtoReflect.Descriptor instead. -func (*KeySet) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{9} -} - -func (x *KeySet) GetPoint() []*ValueList { - if x != nil { - return x.Point - } - return nil -} - -func (x *KeySet) GetRange() []*KeyRange { - if x != nil { - return x.Range - } - return nil -} - -func (x *KeySet) GetAll() bool { - if x != nil { - return x.All - } - return false -} - -// List of values. -type ValueList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Values contained in this ValueList. - Value []*Value `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"` -} - -func (x *ValueList) Reset() { - *x = ValueList{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ValueList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ValueList) ProtoMessage() {} - -func (x *ValueList) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ValueList.ProtoReflect.Descriptor instead. -func (*ValueList) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{10} -} - -func (x *ValueList) GetValue() []*Value { - if x != nil { - return x.Value - } - return nil -} - -// A single mutation request. -type MutationAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Mods that contained in this mutation. - Mod []*MutationAction_Mod `protobuf:"bytes,1,rep,name=mod,proto3" json:"mod,omitempty"` -} - -func (x *MutationAction) Reset() { - *x = MutationAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MutationAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MutationAction) ProtoMessage() {} - -func (x *MutationAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MutationAction.ProtoReflect.Descriptor instead. -func (*MutationAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{11} -} - -func (x *MutationAction) GetMod() []*MutationAction_Mod { - if x != nil { - return x.Mod - } - return nil -} - -// WriteMutationAction defines an action of flushing the mutation so they -// are visible to subsequent operations in the transaction. -type WriteMutationsAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The mutation to write. - Mutation *MutationAction `protobuf:"bytes,1,opt,name=mutation,proto3" json:"mutation,omitempty"` -} - -func (x *WriteMutationsAction) Reset() { - *x = WriteMutationsAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WriteMutationsAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WriteMutationsAction) ProtoMessage() {} - -func (x *WriteMutationsAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WriteMutationsAction.ProtoReflect.Descriptor instead. -func (*WriteMutationsAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{12} -} - -func (x *WriteMutationsAction) GetMutation() *MutationAction { - if x != nil { - return x.Mutation - } - return nil -} - -// PartitionedUpdateAction defines an action to execute a partitioned DML -// which runs different partitions in parallel. -type PartitionedUpdateAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Options for partitioned update. - Options *PartitionedUpdateAction_ExecutePartitionedUpdateOptions `protobuf:"bytes,1,opt,name=options,proto3,oneof" json:"options,omitempty"` - // Partitioned dml query. - Update *QueryAction `protobuf:"bytes,2,opt,name=update,proto3" json:"update,omitempty"` -} - -func (x *PartitionedUpdateAction) Reset() { - *x = PartitionedUpdateAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PartitionedUpdateAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PartitionedUpdateAction) ProtoMessage() {} - -func (x *PartitionedUpdateAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PartitionedUpdateAction.ProtoReflect.Descriptor instead. -func (*PartitionedUpdateAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{13} -} - -func (x *PartitionedUpdateAction) GetOptions() *PartitionedUpdateAction_ExecutePartitionedUpdateOptions { - if x != nil { - return x.Options - } - return nil -} - -func (x *PartitionedUpdateAction) GetUpdate() *QueryAction { - if x != nil { - return x.Update - } - return nil -} - -// StartTransactionAction defines an action of initializing a transaction. -type StartTransactionAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Concurrency is for read-only transactions and must be omitted for - // read-write transactions. - Concurrency *Concurrency `protobuf:"bytes,1,opt,name=concurrency,proto3,oneof" json:"concurrency,omitempty"` - // Metadata about tables and columns that will be involved in this - // transaction. It is to convert values of key parts correctly. - Table []*TableMetadata `protobuf:"bytes,2,rep,name=table,proto3" json:"table,omitempty"` - // Transaction_seed contains workid and op pair for this transaction, used for - // testing. - TransactionSeed string `protobuf:"bytes,3,opt,name=transaction_seed,json=transactionSeed,proto3" json:"transaction_seed,omitempty"` - // Execution options (e.g., whether transaction is opaque, optimistic). - ExecutionOptions *TransactionExecutionOptions `protobuf:"bytes,4,opt,name=execution_options,json=executionOptions,proto3,oneof" json:"execution_options,omitempty"` -} - -func (x *StartTransactionAction) Reset() { - *x = StartTransactionAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartTransactionAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartTransactionAction) ProtoMessage() {} - -func (x *StartTransactionAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StartTransactionAction.ProtoReflect.Descriptor instead. -func (*StartTransactionAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{14} -} - -func (x *StartTransactionAction) GetConcurrency() *Concurrency { - if x != nil { - return x.Concurrency - } - return nil -} - -func (x *StartTransactionAction) GetTable() []*TableMetadata { - if x != nil { - return x.Table - } - return nil -} - -func (x *StartTransactionAction) GetTransactionSeed() string { - if x != nil { - return x.TransactionSeed - } - return "" -} - -func (x *StartTransactionAction) GetExecutionOptions() *TransactionExecutionOptions { - if x != nil { - return x.ExecutionOptions - } - return nil -} - -// Concurrency for read-only transactions. -type Concurrency struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Concurrency mode set for read-only transactions, exactly one mode below - // should be set. - // - // Types that are assignable to ConcurrencyMode: - // - // *Concurrency_StalenessSeconds - // *Concurrency_MinReadTimestampMicros - // *Concurrency_MaxStalenessSeconds - // *Concurrency_ExactTimestampMicros - // *Concurrency_Strong - // *Concurrency_Batch - ConcurrencyMode isConcurrency_ConcurrencyMode `protobuf_oneof:"concurrency_mode"` - // True if exact_timestamp_micros is set, and the chosen timestamp is that of - // a snapshot epoch. - SnapshotEpochRead bool `protobuf:"varint,7,opt,name=snapshot_epoch_read,json=snapshotEpochRead,proto3" json:"snapshot_epoch_read,omitempty"` - // If set, this is a snapshot epoch read constrained to read only the - // specified log scope root table, and its children. Will not be set for full - // database epochs. - SnapshotEpochRootTable string `protobuf:"bytes,8,opt,name=snapshot_epoch_root_table,json=snapshotEpochRootTable,proto3" json:"snapshot_epoch_root_table,omitempty"` - // Set only when batch is true. - BatchReadTimestampMicros int64 `protobuf:"varint,9,opt,name=batch_read_timestamp_micros,json=batchReadTimestampMicros,proto3" json:"batch_read_timestamp_micros,omitempty"` -} - -func (x *Concurrency) Reset() { - *x = Concurrency{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Concurrency) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Concurrency) ProtoMessage() {} - -func (x *Concurrency) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Concurrency.ProtoReflect.Descriptor instead. -func (*Concurrency) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{15} -} - -func (m *Concurrency) GetConcurrencyMode() isConcurrency_ConcurrencyMode { - if m != nil { - return m.ConcurrencyMode - } - return nil -} - -func (x *Concurrency) GetStalenessSeconds() float64 { - if x, ok := x.GetConcurrencyMode().(*Concurrency_StalenessSeconds); ok { - return x.StalenessSeconds - } - return 0 -} - -func (x *Concurrency) GetMinReadTimestampMicros() int64 { - if x, ok := x.GetConcurrencyMode().(*Concurrency_MinReadTimestampMicros); ok { - return x.MinReadTimestampMicros - } - return 0 -} - -func (x *Concurrency) GetMaxStalenessSeconds() float64 { - if x, ok := x.GetConcurrencyMode().(*Concurrency_MaxStalenessSeconds); ok { - return x.MaxStalenessSeconds - } - return 0 -} - -func (x *Concurrency) GetExactTimestampMicros() int64 { - if x, ok := x.GetConcurrencyMode().(*Concurrency_ExactTimestampMicros); ok { - return x.ExactTimestampMicros - } - return 0 -} - -func (x *Concurrency) GetStrong() bool { - if x, ok := x.GetConcurrencyMode().(*Concurrency_Strong); ok { - return x.Strong - } - return false -} - -func (x *Concurrency) GetBatch() bool { - if x, ok := x.GetConcurrencyMode().(*Concurrency_Batch); ok { - return x.Batch - } - return false -} - -func (x *Concurrency) GetSnapshotEpochRead() bool { - if x != nil { - return x.SnapshotEpochRead - } - return false -} - -func (x *Concurrency) GetSnapshotEpochRootTable() string { - if x != nil { - return x.SnapshotEpochRootTable - } - return "" -} - -func (x *Concurrency) GetBatchReadTimestampMicros() int64 { - if x != nil { - return x.BatchReadTimestampMicros - } - return 0 -} - -type isConcurrency_ConcurrencyMode interface { - isConcurrency_ConcurrencyMode() -} - -type Concurrency_StalenessSeconds struct { - // Indicates a read at a consistent timestamp that is specified relative to - // now. That is, if the caller has specified an exact staleness of s - // seconds, we will read at now - s. - StalenessSeconds float64 `protobuf:"fixed64,1,opt,name=staleness_seconds,json=stalenessSeconds,proto3,oneof"` -} - -type Concurrency_MinReadTimestampMicros struct { - // Indicates a boundedly stale read that reads at a timestamp >= T. - MinReadTimestampMicros int64 `protobuf:"varint,2,opt,name=min_read_timestamp_micros,json=minReadTimestampMicros,proto3,oneof"` -} - -type Concurrency_MaxStalenessSeconds struct { - // Indicates a boundedly stale read that is at most N seconds stale. - MaxStalenessSeconds float64 `protobuf:"fixed64,3,opt,name=max_staleness_seconds,json=maxStalenessSeconds,proto3,oneof"` -} - -type Concurrency_ExactTimestampMicros struct { - // Indicates a read at a consistent timestamp. - ExactTimestampMicros int64 `protobuf:"varint,4,opt,name=exact_timestamp_micros,json=exactTimestampMicros,proto3,oneof"` -} - -type Concurrency_Strong struct { - // Indicates a strong read, must only be set to true, or unset. - Strong bool `protobuf:"varint,5,opt,name=strong,proto3,oneof"` -} - -type Concurrency_Batch struct { - // Indicates a batch read, must only be set to true, or unset. - Batch bool `protobuf:"varint,6,opt,name=batch,proto3,oneof"` -} - -func (*Concurrency_StalenessSeconds) isConcurrency_ConcurrencyMode() {} - -func (*Concurrency_MinReadTimestampMicros) isConcurrency_ConcurrencyMode() {} - -func (*Concurrency_MaxStalenessSeconds) isConcurrency_ConcurrencyMode() {} - -func (*Concurrency_ExactTimestampMicros) isConcurrency_ConcurrencyMode() {} - -func (*Concurrency_Strong) isConcurrency_ConcurrencyMode() {} - -func (*Concurrency_Batch) isConcurrency_ConcurrencyMode() {} - -// TableMetadata contains metadata of a single table. -type TableMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Table name. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Columns, in the same order as in the schema. - Column []*ColumnMetadata `protobuf:"bytes,2,rep,name=column,proto3" json:"column,omitempty"` - // Keys, in order. Column name is currently not populated. - KeyColumn []*ColumnMetadata `protobuf:"bytes,3,rep,name=key_column,json=keyColumn,proto3" json:"key_column,omitempty"` -} - -func (x *TableMetadata) Reset() { - *x = TableMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TableMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TableMetadata) ProtoMessage() {} - -func (x *TableMetadata) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TableMetadata.ProtoReflect.Descriptor instead. -func (*TableMetadata) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{16} -} - -func (x *TableMetadata) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *TableMetadata) GetColumn() []*ColumnMetadata { - if x != nil { - return x.Column - } - return nil -} - -func (x *TableMetadata) GetKeyColumn() []*ColumnMetadata { - if x != nil { - return x.KeyColumn - } - return nil -} - -// ColumnMetadata represents metadata of a single column. -type ColumnMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Column name. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Column type. - Type *spannerpb.Type `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` -} - -func (x *ColumnMetadata) Reset() { - *x = ColumnMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ColumnMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ColumnMetadata) ProtoMessage() {} - -func (x *ColumnMetadata) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ColumnMetadata.ProtoReflect.Descriptor instead. -func (*ColumnMetadata) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{17} -} - -func (x *ColumnMetadata) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ColumnMetadata) GetType() *spannerpb.Type { - if x != nil { - return x.Type - } - return nil -} - -// Options for executing the transaction. -type TransactionExecutionOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Whether optimistic concurrency should be used to execute this transaction. - Optimistic bool `protobuf:"varint,1,opt,name=optimistic,proto3" json:"optimistic,omitempty"` -} - -func (x *TransactionExecutionOptions) Reset() { - *x = TransactionExecutionOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TransactionExecutionOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TransactionExecutionOptions) ProtoMessage() {} - -func (x *TransactionExecutionOptions) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TransactionExecutionOptions.ProtoReflect.Descriptor instead. -func (*TransactionExecutionOptions) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{18} -} - -func (x *TransactionExecutionOptions) GetOptimistic() bool { - if x != nil { - return x.Optimistic - } - return false -} - -// FinishTransactionAction defines an action of finishing a transaction. -type FinishTransactionAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Defines how exactly the transaction should be completed, e.g. with - // commit or abortion. - Mode FinishTransactionAction_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=google.spanner.executor.v1.FinishTransactionAction_Mode" json:"mode,omitempty"` -} - -func (x *FinishTransactionAction) Reset() { - *x = FinishTransactionAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FinishTransactionAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FinishTransactionAction) ProtoMessage() {} - -func (x *FinishTransactionAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FinishTransactionAction.ProtoReflect.Descriptor instead. -func (*FinishTransactionAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{19} -} - -func (x *FinishTransactionAction) GetMode() FinishTransactionAction_Mode { - if x != nil { - return x.Mode - } - return FinishTransactionAction_MODE_UNSPECIFIED -} - -// AdminAction defines all the cloud spanner admin actions, including -// instance/database admin ops, backup ops and operation actions. -type AdminAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Exactly one of the actions below will be performed in AdminAction. - // - // Types that are assignable to Action: - // - // *AdminAction_CreateUserInstanceConfig - // *AdminAction_UpdateUserInstanceConfig - // *AdminAction_DeleteUserInstanceConfig - // *AdminAction_GetCloudInstanceConfig - // *AdminAction_ListInstanceConfigs - // *AdminAction_CreateCloudInstance - // *AdminAction_UpdateCloudInstance - // *AdminAction_DeleteCloudInstance - // *AdminAction_ListCloudInstances - // *AdminAction_GetCloudInstance - // *AdminAction_CreateCloudDatabase - // *AdminAction_UpdateCloudDatabaseDdl - // *AdminAction_UpdateCloudDatabase - // *AdminAction_DropCloudDatabase - // *AdminAction_ListCloudDatabases - // *AdminAction_ListCloudDatabaseOperations - // *AdminAction_RestoreCloudDatabase - // *AdminAction_GetCloudDatabase - // *AdminAction_CreateCloudBackup - // *AdminAction_CopyCloudBackup - // *AdminAction_GetCloudBackup - // *AdminAction_UpdateCloudBackup - // *AdminAction_DeleteCloudBackup - // *AdminAction_ListCloudBackups - // *AdminAction_ListCloudBackupOperations - // *AdminAction_GetOperation - // *AdminAction_CancelOperation - Action isAdminAction_Action `protobuf_oneof:"action"` -} - -func (x *AdminAction) Reset() { - *x = AdminAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AdminAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AdminAction) ProtoMessage() {} - -func (x *AdminAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AdminAction.ProtoReflect.Descriptor instead. -func (*AdminAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{20} -} - -func (m *AdminAction) GetAction() isAdminAction_Action { - if m != nil { - return m.Action - } - return nil -} - -func (x *AdminAction) GetCreateUserInstanceConfig() *CreateUserInstanceConfigAction { - if x, ok := x.GetAction().(*AdminAction_CreateUserInstanceConfig); ok { - return x.CreateUserInstanceConfig - } - return nil -} - -func (x *AdminAction) GetUpdateUserInstanceConfig() *UpdateUserInstanceConfigAction { - if x, ok := x.GetAction().(*AdminAction_UpdateUserInstanceConfig); ok { - return x.UpdateUserInstanceConfig - } - return nil -} - -func (x *AdminAction) GetDeleteUserInstanceConfig() *DeleteUserInstanceConfigAction { - if x, ok := x.GetAction().(*AdminAction_DeleteUserInstanceConfig); ok { - return x.DeleteUserInstanceConfig - } - return nil -} - -func (x *AdminAction) GetGetCloudInstanceConfig() *GetCloudInstanceConfigAction { - if x, ok := x.GetAction().(*AdminAction_GetCloudInstanceConfig); ok { - return x.GetCloudInstanceConfig - } - return nil -} - -func (x *AdminAction) GetListInstanceConfigs() *ListCloudInstanceConfigsAction { - if x, ok := x.GetAction().(*AdminAction_ListInstanceConfigs); ok { - return x.ListInstanceConfigs - } - return nil -} - -func (x *AdminAction) GetCreateCloudInstance() *CreateCloudInstanceAction { - if x, ok := x.GetAction().(*AdminAction_CreateCloudInstance); ok { - return x.CreateCloudInstance - } - return nil -} - -func (x *AdminAction) GetUpdateCloudInstance() *UpdateCloudInstanceAction { - if x, ok := x.GetAction().(*AdminAction_UpdateCloudInstance); ok { - return x.UpdateCloudInstance - } - return nil -} - -func (x *AdminAction) GetDeleteCloudInstance() *DeleteCloudInstanceAction { - if x, ok := x.GetAction().(*AdminAction_DeleteCloudInstance); ok { - return x.DeleteCloudInstance - } - return nil -} - -func (x *AdminAction) GetListCloudInstances() *ListCloudInstancesAction { - if x, ok := x.GetAction().(*AdminAction_ListCloudInstances); ok { - return x.ListCloudInstances - } - return nil -} - -func (x *AdminAction) GetGetCloudInstance() *GetCloudInstanceAction { - if x, ok := x.GetAction().(*AdminAction_GetCloudInstance); ok { - return x.GetCloudInstance - } - return nil -} - -func (x *AdminAction) GetCreateCloudDatabase() *CreateCloudDatabaseAction { - if x, ok := x.GetAction().(*AdminAction_CreateCloudDatabase); ok { - return x.CreateCloudDatabase - } - return nil -} - -func (x *AdminAction) GetUpdateCloudDatabaseDdl() *UpdateCloudDatabaseDdlAction { - if x, ok := x.GetAction().(*AdminAction_UpdateCloudDatabaseDdl); ok { - return x.UpdateCloudDatabaseDdl - } - return nil -} - -func (x *AdminAction) GetUpdateCloudDatabase() *UpdateCloudDatabaseAction { - if x, ok := x.GetAction().(*AdminAction_UpdateCloudDatabase); ok { - return x.UpdateCloudDatabase - } - return nil -} - -func (x *AdminAction) GetDropCloudDatabase() *DropCloudDatabaseAction { - if x, ok := x.GetAction().(*AdminAction_DropCloudDatabase); ok { - return x.DropCloudDatabase - } - return nil -} - -func (x *AdminAction) GetListCloudDatabases() *ListCloudDatabasesAction { - if x, ok := x.GetAction().(*AdminAction_ListCloudDatabases); ok { - return x.ListCloudDatabases - } - return nil -} - -func (x *AdminAction) GetListCloudDatabaseOperations() *ListCloudDatabaseOperationsAction { - if x, ok := x.GetAction().(*AdminAction_ListCloudDatabaseOperations); ok { - return x.ListCloudDatabaseOperations - } - return nil -} - -func (x *AdminAction) GetRestoreCloudDatabase() *RestoreCloudDatabaseAction { - if x, ok := x.GetAction().(*AdminAction_RestoreCloudDatabase); ok { - return x.RestoreCloudDatabase - } - return nil -} - -func (x *AdminAction) GetGetCloudDatabase() *GetCloudDatabaseAction { - if x, ok := x.GetAction().(*AdminAction_GetCloudDatabase); ok { - return x.GetCloudDatabase - } - return nil -} - -func (x *AdminAction) GetCreateCloudBackup() *CreateCloudBackupAction { - if x, ok := x.GetAction().(*AdminAction_CreateCloudBackup); ok { - return x.CreateCloudBackup - } - return nil -} - -func (x *AdminAction) GetCopyCloudBackup() *CopyCloudBackupAction { - if x, ok := x.GetAction().(*AdminAction_CopyCloudBackup); ok { - return x.CopyCloudBackup - } - return nil -} - -func (x *AdminAction) GetGetCloudBackup() *GetCloudBackupAction { - if x, ok := x.GetAction().(*AdminAction_GetCloudBackup); ok { - return x.GetCloudBackup - } - return nil -} - -func (x *AdminAction) GetUpdateCloudBackup() *UpdateCloudBackupAction { - if x, ok := x.GetAction().(*AdminAction_UpdateCloudBackup); ok { - return x.UpdateCloudBackup - } - return nil -} - -func (x *AdminAction) GetDeleteCloudBackup() *DeleteCloudBackupAction { - if x, ok := x.GetAction().(*AdminAction_DeleteCloudBackup); ok { - return x.DeleteCloudBackup - } - return nil -} - -func (x *AdminAction) GetListCloudBackups() *ListCloudBackupsAction { - if x, ok := x.GetAction().(*AdminAction_ListCloudBackups); ok { - return x.ListCloudBackups - } - return nil -} - -func (x *AdminAction) GetListCloudBackupOperations() *ListCloudBackupOperationsAction { - if x, ok := x.GetAction().(*AdminAction_ListCloudBackupOperations); ok { - return x.ListCloudBackupOperations - } - return nil -} - -func (x *AdminAction) GetGetOperation() *GetOperationAction { - if x, ok := x.GetAction().(*AdminAction_GetOperation); ok { - return x.GetOperation - } - return nil -} - -func (x *AdminAction) GetCancelOperation() *CancelOperationAction { - if x, ok := x.GetAction().(*AdminAction_CancelOperation); ok { - return x.CancelOperation - } - return nil -} - -type isAdminAction_Action interface { - isAdminAction_Action() -} - -type AdminAction_CreateUserInstanceConfig struct { - // Action that creates a user instance config. - CreateUserInstanceConfig *CreateUserInstanceConfigAction `protobuf:"bytes,1,opt,name=create_user_instance_config,json=createUserInstanceConfig,proto3,oneof"` -} - -type AdminAction_UpdateUserInstanceConfig struct { - // Action that updates a user instance config. - UpdateUserInstanceConfig *UpdateUserInstanceConfigAction `protobuf:"bytes,2,opt,name=update_user_instance_config,json=updateUserInstanceConfig,proto3,oneof"` -} - -type AdminAction_DeleteUserInstanceConfig struct { - // Action that deletes a user instance config. - DeleteUserInstanceConfig *DeleteUserInstanceConfigAction `protobuf:"bytes,3,opt,name=delete_user_instance_config,json=deleteUserInstanceConfig,proto3,oneof"` -} - -type AdminAction_GetCloudInstanceConfig struct { - // Action that gets a user instance config. - GetCloudInstanceConfig *GetCloudInstanceConfigAction `protobuf:"bytes,4,opt,name=get_cloud_instance_config,json=getCloudInstanceConfig,proto3,oneof"` -} - -type AdminAction_ListInstanceConfigs struct { - // Action that lists user instance configs. - ListInstanceConfigs *ListCloudInstanceConfigsAction `protobuf:"bytes,5,opt,name=list_instance_configs,json=listInstanceConfigs,proto3,oneof"` -} - -type AdminAction_CreateCloudInstance struct { - // Action that creates a Cloud Spanner instance. - CreateCloudInstance *CreateCloudInstanceAction `protobuf:"bytes,6,opt,name=create_cloud_instance,json=createCloudInstance,proto3,oneof"` -} - -type AdminAction_UpdateCloudInstance struct { - // Action that updates a Cloud Spanner instance. - UpdateCloudInstance *UpdateCloudInstanceAction `protobuf:"bytes,7,opt,name=update_cloud_instance,json=updateCloudInstance,proto3,oneof"` -} - -type AdminAction_DeleteCloudInstance struct { - // Action that deletes a Cloud Spanner instance. - DeleteCloudInstance *DeleteCloudInstanceAction `protobuf:"bytes,8,opt,name=delete_cloud_instance,json=deleteCloudInstance,proto3,oneof"` -} - -type AdminAction_ListCloudInstances struct { - // Action that lists Cloud Spanner instances. - ListCloudInstances *ListCloudInstancesAction `protobuf:"bytes,9,opt,name=list_cloud_instances,json=listCloudInstances,proto3,oneof"` -} - -type AdminAction_GetCloudInstance struct { - // Action that retrieves a Cloud Spanner instance. - GetCloudInstance *GetCloudInstanceAction `protobuf:"bytes,10,opt,name=get_cloud_instance,json=getCloudInstance,proto3,oneof"` -} - -type AdminAction_CreateCloudDatabase struct { - // Action that creates a Cloud Spanner database. - CreateCloudDatabase *CreateCloudDatabaseAction `protobuf:"bytes,11,opt,name=create_cloud_database,json=createCloudDatabase,proto3,oneof"` -} - -type AdminAction_UpdateCloudDatabaseDdl struct { - // Action that updates the schema of a Cloud Spanner database. - UpdateCloudDatabaseDdl *UpdateCloudDatabaseDdlAction `protobuf:"bytes,12,opt,name=update_cloud_database_ddl,json=updateCloudDatabaseDdl,proto3,oneof"` -} - -type AdminAction_UpdateCloudDatabase struct { - // Action that updates the schema of a Cloud Spanner database. - UpdateCloudDatabase *UpdateCloudDatabaseAction `protobuf:"bytes,27,opt,name=update_cloud_database,json=updateCloudDatabase,proto3,oneof"` -} - -type AdminAction_DropCloudDatabase struct { - // Action that drops a Cloud Spanner database. - DropCloudDatabase *DropCloudDatabaseAction `protobuf:"bytes,13,opt,name=drop_cloud_database,json=dropCloudDatabase,proto3,oneof"` -} - -type AdminAction_ListCloudDatabases struct { - // Action that lists Cloud Spanner databases. - ListCloudDatabases *ListCloudDatabasesAction `protobuf:"bytes,14,opt,name=list_cloud_databases,json=listCloudDatabases,proto3,oneof"` -} - -type AdminAction_ListCloudDatabaseOperations struct { - // Action that lists Cloud Spanner database operations. - ListCloudDatabaseOperations *ListCloudDatabaseOperationsAction `protobuf:"bytes,15,opt,name=list_cloud_database_operations,json=listCloudDatabaseOperations,proto3,oneof"` -} - -type AdminAction_RestoreCloudDatabase struct { - // Action that restores a Cloud Spanner database from a backup. - RestoreCloudDatabase *RestoreCloudDatabaseAction `protobuf:"bytes,16,opt,name=restore_cloud_database,json=restoreCloudDatabase,proto3,oneof"` -} - -type AdminAction_GetCloudDatabase struct { - // Action that gets a Cloud Spanner database. - GetCloudDatabase *GetCloudDatabaseAction `protobuf:"bytes,17,opt,name=get_cloud_database,json=getCloudDatabase,proto3,oneof"` -} - -type AdminAction_CreateCloudBackup struct { - // Action that creates a Cloud Spanner database backup. - CreateCloudBackup *CreateCloudBackupAction `protobuf:"bytes,18,opt,name=create_cloud_backup,json=createCloudBackup,proto3,oneof"` -} - -type AdminAction_CopyCloudBackup struct { - // Action that copies a Cloud Spanner database backup. - CopyCloudBackup *CopyCloudBackupAction `protobuf:"bytes,19,opt,name=copy_cloud_backup,json=copyCloudBackup,proto3,oneof"` -} - -type AdminAction_GetCloudBackup struct { - // Action that gets a Cloud Spanner database backup. - GetCloudBackup *GetCloudBackupAction `protobuf:"bytes,20,opt,name=get_cloud_backup,json=getCloudBackup,proto3,oneof"` -} - -type AdminAction_UpdateCloudBackup struct { - // Action that updates a Cloud Spanner database backup. - UpdateCloudBackup *UpdateCloudBackupAction `protobuf:"bytes,21,opt,name=update_cloud_backup,json=updateCloudBackup,proto3,oneof"` -} - -type AdminAction_DeleteCloudBackup struct { - // Action that deletes a Cloud Spanner database backup. - DeleteCloudBackup *DeleteCloudBackupAction `protobuf:"bytes,22,opt,name=delete_cloud_backup,json=deleteCloudBackup,proto3,oneof"` -} - -type AdminAction_ListCloudBackups struct { - // Action that lists Cloud Spanner database backups. - ListCloudBackups *ListCloudBackupsAction `protobuf:"bytes,23,opt,name=list_cloud_backups,json=listCloudBackups,proto3,oneof"` -} - -type AdminAction_ListCloudBackupOperations struct { - // Action that lists Cloud Spanner database backup operations. - ListCloudBackupOperations *ListCloudBackupOperationsAction `protobuf:"bytes,24,opt,name=list_cloud_backup_operations,json=listCloudBackupOperations,proto3,oneof"` -} - -type AdminAction_GetOperation struct { - // Action that gets an operation. - GetOperation *GetOperationAction `protobuf:"bytes,25,opt,name=get_operation,json=getOperation,proto3,oneof"` -} - -type AdminAction_CancelOperation struct { - // Action that cancels an operation. - CancelOperation *CancelOperationAction `protobuf:"bytes,26,opt,name=cancel_operation,json=cancelOperation,proto3,oneof"` -} - -func (*AdminAction_CreateUserInstanceConfig) isAdminAction_Action() {} - -func (*AdminAction_UpdateUserInstanceConfig) isAdminAction_Action() {} - -func (*AdminAction_DeleteUserInstanceConfig) isAdminAction_Action() {} - -func (*AdminAction_GetCloudInstanceConfig) isAdminAction_Action() {} - -func (*AdminAction_ListInstanceConfigs) isAdminAction_Action() {} - -func (*AdminAction_CreateCloudInstance) isAdminAction_Action() {} - -func (*AdminAction_UpdateCloudInstance) isAdminAction_Action() {} - -func (*AdminAction_DeleteCloudInstance) isAdminAction_Action() {} - -func (*AdminAction_ListCloudInstances) isAdminAction_Action() {} - -func (*AdminAction_GetCloudInstance) isAdminAction_Action() {} - -func (*AdminAction_CreateCloudDatabase) isAdminAction_Action() {} - -func (*AdminAction_UpdateCloudDatabaseDdl) isAdminAction_Action() {} - -func (*AdminAction_UpdateCloudDatabase) isAdminAction_Action() {} - -func (*AdminAction_DropCloudDatabase) isAdminAction_Action() {} - -func (*AdminAction_ListCloudDatabases) isAdminAction_Action() {} - -func (*AdminAction_ListCloudDatabaseOperations) isAdminAction_Action() {} - -func (*AdminAction_RestoreCloudDatabase) isAdminAction_Action() {} - -func (*AdminAction_GetCloudDatabase) isAdminAction_Action() {} - -func (*AdminAction_CreateCloudBackup) isAdminAction_Action() {} - -func (*AdminAction_CopyCloudBackup) isAdminAction_Action() {} - -func (*AdminAction_GetCloudBackup) isAdminAction_Action() {} - -func (*AdminAction_UpdateCloudBackup) isAdminAction_Action() {} - -func (*AdminAction_DeleteCloudBackup) isAdminAction_Action() {} - -func (*AdminAction_ListCloudBackups) isAdminAction_Action() {} - -func (*AdminAction_ListCloudBackupOperations) isAdminAction_Action() {} - -func (*AdminAction_GetOperation) isAdminAction_Action() {} - -func (*AdminAction_CancelOperation) isAdminAction_Action() {} - -// Action that creates a user instance config. -type CreateUserInstanceConfigAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // User instance config ID (not path), e.g. "custom-config". - UserConfigId string `protobuf:"bytes,1,opt,name=user_config_id,json=userConfigId,proto3" json:"user_config_id,omitempty"` - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Base config ID, e.g. "test-config". - BaseConfigId string `protobuf:"bytes,3,opt,name=base_config_id,json=baseConfigId,proto3" json:"base_config_id,omitempty"` - // Replicas that should be included in the user config. - Replicas []*instancepb.ReplicaInfo `protobuf:"bytes,4,rep,name=replicas,proto3" json:"replicas,omitempty"` -} - -func (x *CreateUserInstanceConfigAction) Reset() { - *x = CreateUserInstanceConfigAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateUserInstanceConfigAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateUserInstanceConfigAction) ProtoMessage() {} - -func (x *CreateUserInstanceConfigAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateUserInstanceConfigAction.ProtoReflect.Descriptor instead. -func (*CreateUserInstanceConfigAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{21} -} - -func (x *CreateUserInstanceConfigAction) GetUserConfigId() string { - if x != nil { - return x.UserConfigId - } - return "" -} - -func (x *CreateUserInstanceConfigAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *CreateUserInstanceConfigAction) GetBaseConfigId() string { - if x != nil { - return x.BaseConfigId - } - return "" -} - -func (x *CreateUserInstanceConfigAction) GetReplicas() []*instancepb.ReplicaInfo { - if x != nil { - return x.Replicas - } - return nil -} - -// Action that updates a user instance config. -type UpdateUserInstanceConfigAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // User instance config ID (not path), e.g. "custom-config". - UserConfigId string `protobuf:"bytes,1,opt,name=user_config_id,json=userConfigId,proto3" json:"user_config_id,omitempty"` - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // The descriptive name for this instance config as it appears in UIs. - DisplayName *string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3,oneof" json:"display_name,omitempty"` - // labels. - Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *UpdateUserInstanceConfigAction) Reset() { - *x = UpdateUserInstanceConfigAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateUserInstanceConfigAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateUserInstanceConfigAction) ProtoMessage() {} - -func (x *UpdateUserInstanceConfigAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateUserInstanceConfigAction.ProtoReflect.Descriptor instead. -func (*UpdateUserInstanceConfigAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{22} -} - -func (x *UpdateUserInstanceConfigAction) GetUserConfigId() string { - if x != nil { - return x.UserConfigId - } - return "" -} - -func (x *UpdateUserInstanceConfigAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *UpdateUserInstanceConfigAction) GetDisplayName() string { - if x != nil && x.DisplayName != nil { - return *x.DisplayName - } - return "" -} - -func (x *UpdateUserInstanceConfigAction) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -// Action that gets a user instance config. -type GetCloudInstanceConfigAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Instance config ID (not path), e.g. "custom-config". - InstanceConfigId string `protobuf:"bytes,1,opt,name=instance_config_id,json=instanceConfigId,proto3" json:"instance_config_id,omitempty"` - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` -} - -func (x *GetCloudInstanceConfigAction) Reset() { - *x = GetCloudInstanceConfigAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetCloudInstanceConfigAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetCloudInstanceConfigAction) ProtoMessage() {} - -func (x *GetCloudInstanceConfigAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetCloudInstanceConfigAction.ProtoReflect.Descriptor instead. -func (*GetCloudInstanceConfigAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{23} -} - -func (x *GetCloudInstanceConfigAction) GetInstanceConfigId() string { - if x != nil { - return x.InstanceConfigId - } - return "" -} - -func (x *GetCloudInstanceConfigAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -// Action that deletes a user instance configs. -type DeleteUserInstanceConfigAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // User instance config ID (not path), e.g. "custom-config". - UserConfigId string `protobuf:"bytes,1,opt,name=user_config_id,json=userConfigId,proto3" json:"user_config_id,omitempty"` - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` -} - -func (x *DeleteUserInstanceConfigAction) Reset() { - *x = DeleteUserInstanceConfigAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteUserInstanceConfigAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteUserInstanceConfigAction) ProtoMessage() {} - -func (x *DeleteUserInstanceConfigAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteUserInstanceConfigAction.ProtoReflect.Descriptor instead. -func (*DeleteUserInstanceConfigAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{24} -} - -func (x *DeleteUserInstanceConfigAction) GetUserConfigId() string { - if x != nil { - return x.UserConfigId - } - return "" -} - -func (x *DeleteUserInstanceConfigAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -// Action that lists user instance configs. -type ListCloudInstanceConfigsAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Number of instance configs to be returned in the response. If 0 or - // less, defaults to the server's maximum allowed page size. - PageSize *int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3,oneof" json:"page_size,omitempty"` - // If non-empty, "page_token" should contain a next_page_token - // from a previous ListInstanceConfigsResponse to the same "parent". - PageToken *string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3,oneof" json:"page_token,omitempty"` -} - -func (x *ListCloudInstanceConfigsAction) Reset() { - *x = ListCloudInstanceConfigsAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCloudInstanceConfigsAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCloudInstanceConfigsAction) ProtoMessage() {} - -func (x *ListCloudInstanceConfigsAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCloudInstanceConfigsAction.ProtoReflect.Descriptor instead. -func (*ListCloudInstanceConfigsAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{25} -} - -func (x *ListCloudInstanceConfigsAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *ListCloudInstanceConfigsAction) GetPageSize() int32 { - if x != nil && x.PageSize != nil { - return *x.PageSize - } - return 0 -} - -func (x *ListCloudInstanceConfigsAction) GetPageToken() string { - if x != nil && x.PageToken != nil { - return *x.PageToken - } - return "" -} - -// Action that creates a Cloud Spanner instance. -type CreateCloudInstanceAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Instance config ID, e.g. "test-config". - InstanceConfigId string `protobuf:"bytes,3,opt,name=instance_config_id,json=instanceConfigId,proto3" json:"instance_config_id,omitempty"` - // Number of nodes (processing_units should not be set or set to 0 if used). - NodeCount *int32 `protobuf:"varint,4,opt,name=node_count,json=nodeCount,proto3,oneof" json:"node_count,omitempty"` - // Number of processing units (node_count should be set to 0 if used). - ProcessingUnits *int32 `protobuf:"varint,6,opt,name=processing_units,json=processingUnits,proto3,oneof" json:"processing_units,omitempty"` - // labels. - Labels map[string]string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *CreateCloudInstanceAction) Reset() { - *x = CreateCloudInstanceAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateCloudInstanceAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateCloudInstanceAction) ProtoMessage() {} - -func (x *CreateCloudInstanceAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateCloudInstanceAction.ProtoReflect.Descriptor instead. -func (*CreateCloudInstanceAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{26} -} - -func (x *CreateCloudInstanceAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *CreateCloudInstanceAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *CreateCloudInstanceAction) GetInstanceConfigId() string { - if x != nil { - return x.InstanceConfigId - } - return "" -} - -func (x *CreateCloudInstanceAction) GetNodeCount() int32 { - if x != nil && x.NodeCount != nil { - return *x.NodeCount - } - return 0 -} - -func (x *CreateCloudInstanceAction) GetProcessingUnits() int32 { - if x != nil && x.ProcessingUnits != nil { - return *x.ProcessingUnits - } - return 0 -} - -func (x *CreateCloudInstanceAction) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -// Action that updates a Cloud Spanner instance. -type UpdateCloudInstanceAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // The descriptive name for this instance as it appears in UIs. - // Must be unique per project and between 4 and 30 characters in length. - DisplayName *string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3,oneof" json:"display_name,omitempty"` - // The number of nodes allocated to this instance. At most one of either - // node_count or processing_units should be present in the message. - NodeCount *int32 `protobuf:"varint,4,opt,name=node_count,json=nodeCount,proto3,oneof" json:"node_count,omitempty"` - // The number of processing units allocated to this instance. At most one of - // processing_units or node_count should be present in the message. - ProcessingUnits *int32 `protobuf:"varint,5,opt,name=processing_units,json=processingUnits,proto3,oneof" json:"processing_units,omitempty"` - // labels. - Labels map[string]string `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *UpdateCloudInstanceAction) Reset() { - *x = UpdateCloudInstanceAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateCloudInstanceAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateCloudInstanceAction) ProtoMessage() {} - -func (x *UpdateCloudInstanceAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateCloudInstanceAction.ProtoReflect.Descriptor instead. -func (*UpdateCloudInstanceAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{27} -} - -func (x *UpdateCloudInstanceAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *UpdateCloudInstanceAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *UpdateCloudInstanceAction) GetDisplayName() string { - if x != nil && x.DisplayName != nil { - return *x.DisplayName - } - return "" -} - -func (x *UpdateCloudInstanceAction) GetNodeCount() int32 { - if x != nil && x.NodeCount != nil { - return *x.NodeCount - } - return 0 -} - -func (x *UpdateCloudInstanceAction) GetProcessingUnits() int32 { - if x != nil && x.ProcessingUnits != nil { - return *x.ProcessingUnits - } - return 0 -} - -func (x *UpdateCloudInstanceAction) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -// Action that deletes a Cloud Spanner instance. -type DeleteCloudInstanceAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` -} - -func (x *DeleteCloudInstanceAction) Reset() { - *x = DeleteCloudInstanceAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteCloudInstanceAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteCloudInstanceAction) ProtoMessage() {} - -func (x *DeleteCloudInstanceAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteCloudInstanceAction.ProtoReflect.Descriptor instead. -func (*DeleteCloudInstanceAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{28} -} - -func (x *DeleteCloudInstanceAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *DeleteCloudInstanceAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -// Action that creates a Cloud Spanner database. -type CreateCloudDatabaseAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud database ID (not full path), e.g. "db0". - DatabaseId string `protobuf:"bytes,3,opt,name=database_id,json=databaseId,proto3" json:"database_id,omitempty"` - // SDL statements to apply to the new database. - SdlStatement []string `protobuf:"bytes,4,rep,name=sdl_statement,json=sdlStatement,proto3" json:"sdl_statement,omitempty"` - // The KMS key used to encrypt the database to be created if the database - // should be CMEK protected. - EncryptionConfig *databasepb.EncryptionConfig `protobuf:"bytes,5,opt,name=encryption_config,json=encryptionConfig,proto3" json:"encryption_config,omitempty"` - // Optional SQL dialect (GOOGLESQL or POSTGRESQL). Default: GOOGLESQL. - Dialect *string `protobuf:"bytes,6,opt,name=dialect,proto3,oneof" json:"dialect,omitempty"` -} - -func (x *CreateCloudDatabaseAction) Reset() { - *x = CreateCloudDatabaseAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateCloudDatabaseAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateCloudDatabaseAction) ProtoMessage() {} - -func (x *CreateCloudDatabaseAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateCloudDatabaseAction.ProtoReflect.Descriptor instead. -func (*CreateCloudDatabaseAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{29} -} - -func (x *CreateCloudDatabaseAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *CreateCloudDatabaseAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *CreateCloudDatabaseAction) GetDatabaseId() string { - if x != nil { - return x.DatabaseId - } - return "" -} - -func (x *CreateCloudDatabaseAction) GetSdlStatement() []string { - if x != nil { - return x.SdlStatement - } - return nil -} - -func (x *CreateCloudDatabaseAction) GetEncryptionConfig() *databasepb.EncryptionConfig { - if x != nil { - return x.EncryptionConfig - } - return nil -} - -func (x *CreateCloudDatabaseAction) GetDialect() string { - if x != nil && x.Dialect != nil { - return *x.Dialect - } - return "" -} - -// Action that updates the schema of a Cloud Spanner database. -type UpdateCloudDatabaseDdlAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud database ID (not full path), e.g. "db0". - DatabaseId string `protobuf:"bytes,3,opt,name=database_id,json=databaseId,proto3" json:"database_id,omitempty"` - // SDL statements to apply to the database. - SdlStatement []string `protobuf:"bytes,4,rep,name=sdl_statement,json=sdlStatement,proto3" json:"sdl_statement,omitempty"` - // Op ID can be used to track progress of the update. If set, it must be - // unique per database. If not set, Cloud Spanner will generate operation ID - // automatically. - OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` -} - -func (x *UpdateCloudDatabaseDdlAction) Reset() { - *x = UpdateCloudDatabaseDdlAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateCloudDatabaseDdlAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateCloudDatabaseDdlAction) ProtoMessage() {} - -func (x *UpdateCloudDatabaseDdlAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateCloudDatabaseDdlAction.ProtoReflect.Descriptor instead. -func (*UpdateCloudDatabaseDdlAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{30} -} - -func (x *UpdateCloudDatabaseDdlAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *UpdateCloudDatabaseDdlAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *UpdateCloudDatabaseDdlAction) GetDatabaseId() string { - if x != nil { - return x.DatabaseId - } - return "" -} - -func (x *UpdateCloudDatabaseDdlAction) GetSdlStatement() []string { - if x != nil { - return x.SdlStatement - } - return nil -} - -func (x *UpdateCloudDatabaseDdlAction) GetOperationId() string { - if x != nil { - return x.OperationId - } - return "" -} - -// Action that updates a Cloud Spanner database. -type UpdateCloudDatabaseAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud database name (not full path), e.g. "db0". - DatabaseName string `protobuf:"bytes,3,opt,name=database_name,json=databaseName,proto3" json:"database_name,omitempty"` - // Updated value of enable_drop_protection, this is the only field that has - // supported to be updated. - EnableDropProtection bool `protobuf:"varint,4,opt,name=enable_drop_protection,json=enableDropProtection,proto3" json:"enable_drop_protection,omitempty"` -} - -func (x *UpdateCloudDatabaseAction) Reset() { - *x = UpdateCloudDatabaseAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateCloudDatabaseAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateCloudDatabaseAction) ProtoMessage() {} - -func (x *UpdateCloudDatabaseAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateCloudDatabaseAction.ProtoReflect.Descriptor instead. -func (*UpdateCloudDatabaseAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{31} -} - -func (x *UpdateCloudDatabaseAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *UpdateCloudDatabaseAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *UpdateCloudDatabaseAction) GetDatabaseName() string { - if x != nil { - return x.DatabaseName - } - return "" -} - -func (x *UpdateCloudDatabaseAction) GetEnableDropProtection() bool { - if x != nil { - return x.EnableDropProtection - } - return false -} - -// Action that drops a Cloud Spanner database. -type DropCloudDatabaseAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud database ID (not full path), e.g. "db0". - DatabaseId string `protobuf:"bytes,3,opt,name=database_id,json=databaseId,proto3" json:"database_id,omitempty"` -} - -func (x *DropCloudDatabaseAction) Reset() { - *x = DropCloudDatabaseAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DropCloudDatabaseAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DropCloudDatabaseAction) ProtoMessage() {} - -func (x *DropCloudDatabaseAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DropCloudDatabaseAction.ProtoReflect.Descriptor instead. -func (*DropCloudDatabaseAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{32} -} - -func (x *DropCloudDatabaseAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *DropCloudDatabaseAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *DropCloudDatabaseAction) GetDatabaseId() string { - if x != nil { - return x.DatabaseId - } - return "" -} - -// Action that lists Cloud Spanner databases. -type ListCloudDatabasesAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud instance ID (not path) to list databases from, e.g. "test-instance". - InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // Number of databases to be returned in the response. If 0 or - // less, defaults to the server's maximum allowed page size. - PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // If non-empty, "page_token" should contain a next_page_token - // from a previous ListDatabasesResponse to the same "parent" - // and with the same "filter". - PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` -} - -func (x *ListCloudDatabasesAction) Reset() { - *x = ListCloudDatabasesAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCloudDatabasesAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCloudDatabasesAction) ProtoMessage() {} - -func (x *ListCloudDatabasesAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCloudDatabasesAction.ProtoReflect.Descriptor instead. -func (*ListCloudDatabasesAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{33} -} - -func (x *ListCloudDatabasesAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *ListCloudDatabasesAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *ListCloudDatabasesAction) GetPageSize() int32 { - if x != nil { - return x.PageSize - } - return 0 -} - -func (x *ListCloudDatabasesAction) GetPageToken() string { - if x != nil { - return x.PageToken - } - return "" -} - -// Action that lists Cloud Spanner databases. -type ListCloudInstancesAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // A filter expression that filters what operations are returned in the - // response. - // The expression must specify the field name, a comparison operator, - // and the value that you want to use for filtering. - // Refer spanner_instance_admin.proto.ListInstancesRequest for - // detail. - Filter *string `protobuf:"bytes,2,opt,name=filter,proto3,oneof" json:"filter,omitempty"` - // Number of instances to be returned in the response. If 0 or - // less, defaults to the server's maximum allowed page size. - PageSize *int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3,oneof" json:"page_size,omitempty"` - // If non-empty, "page_token" should contain a next_page_token - // from a previous ListInstancesResponse to the same "parent" - // and with the same "filter". - PageToken *string `protobuf:"bytes,4,opt,name=page_token,json=pageToken,proto3,oneof" json:"page_token,omitempty"` -} - -func (x *ListCloudInstancesAction) Reset() { - *x = ListCloudInstancesAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCloudInstancesAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCloudInstancesAction) ProtoMessage() {} - -func (x *ListCloudInstancesAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCloudInstancesAction.ProtoReflect.Descriptor instead. -func (*ListCloudInstancesAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{34} -} - -func (x *ListCloudInstancesAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *ListCloudInstancesAction) GetFilter() string { - if x != nil && x.Filter != nil { - return *x.Filter - } - return "" -} - -func (x *ListCloudInstancesAction) GetPageSize() int32 { - if x != nil && x.PageSize != nil { - return *x.PageSize - } - return 0 -} - -func (x *ListCloudInstancesAction) GetPageToken() string { - if x != nil && x.PageToken != nil { - return *x.PageToken - } - return "" -} - -// Action that retrieves a Cloud Spanner instance. -type GetCloudInstanceAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud instance ID (not path) to retrieve the instance from, - // e.g. "test-instance". - InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` -} - -func (x *GetCloudInstanceAction) Reset() { - *x = GetCloudInstanceAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetCloudInstanceAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetCloudInstanceAction) ProtoMessage() {} - -func (x *GetCloudInstanceAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetCloudInstanceAction.ProtoReflect.Descriptor instead. -func (*GetCloudInstanceAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{35} -} - -func (x *GetCloudInstanceAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *GetCloudInstanceAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -// Action that lists Cloud Spanner database operations. -type ListCloudDatabaseOperationsAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud instance ID (not path) to list database operations from, - // e.g. "test-instance". - InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // A filter expression that filters what operations are returned in the - // response. - // The expression must specify the field name, a comparison operator, - // and the value that you want to use for filtering. - // Refer spanner_database_admin.proto.ListDatabaseOperationsRequest for - // detail. - Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` - // Number of databases to be returned in the response. If 0 or - // less, defaults to the server's maximum allowed page size. - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // If non-empty, "page_token" should contain a next_page_token - // from a previous ListDatabaseOperationsResponse to the same "parent" - // and with the same "filter". - PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` -} - -func (x *ListCloudDatabaseOperationsAction) Reset() { - *x = ListCloudDatabaseOperationsAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCloudDatabaseOperationsAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCloudDatabaseOperationsAction) ProtoMessage() {} - -func (x *ListCloudDatabaseOperationsAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCloudDatabaseOperationsAction.ProtoReflect.Descriptor instead. -func (*ListCloudDatabaseOperationsAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{36} -} - -func (x *ListCloudDatabaseOperationsAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *ListCloudDatabaseOperationsAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *ListCloudDatabaseOperationsAction) GetFilter() string { - if x != nil { - return x.Filter - } - return "" -} - -func (x *ListCloudDatabaseOperationsAction) GetPageSize() int32 { - if x != nil { - return x.PageSize - } - return 0 -} - -func (x *ListCloudDatabaseOperationsAction) GetPageToken() string { - if x != nil { - return x.PageToken - } - return "" -} - -// Action that restores a Cloud Spanner database from a backup. -type RestoreCloudDatabaseAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud instance ID (not path) containing the backup, e.g. "backup-instance". - BackupInstanceId string `protobuf:"bytes,2,opt,name=backup_instance_id,json=backupInstanceId,proto3" json:"backup_instance_id,omitempty"` - // The id of the backup from which to restore, e.g. "test-backup". - BackupId string `protobuf:"bytes,3,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` - // Cloud instance ID (not path) containing the database, e.g. - // "database-instance". - DatabaseInstanceId string `protobuf:"bytes,4,opt,name=database_instance_id,json=databaseInstanceId,proto3" json:"database_instance_id,omitempty"` - // The id of the database to create and restore to, e.g. "db0". Note that this - // database must not already exist. - DatabaseId string `protobuf:"bytes,5,opt,name=database_id,json=databaseId,proto3" json:"database_id,omitempty"` -} - -func (x *RestoreCloudDatabaseAction) Reset() { - *x = RestoreCloudDatabaseAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RestoreCloudDatabaseAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RestoreCloudDatabaseAction) ProtoMessage() {} - -func (x *RestoreCloudDatabaseAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RestoreCloudDatabaseAction.ProtoReflect.Descriptor instead. -func (*RestoreCloudDatabaseAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{37} -} - -func (x *RestoreCloudDatabaseAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *RestoreCloudDatabaseAction) GetBackupInstanceId() string { - if x != nil { - return x.BackupInstanceId - } - return "" -} - -func (x *RestoreCloudDatabaseAction) GetBackupId() string { - if x != nil { - return x.BackupId - } - return "" -} - -func (x *RestoreCloudDatabaseAction) GetDatabaseInstanceId() string { - if x != nil { - return x.DatabaseInstanceId - } - return "" -} - -func (x *RestoreCloudDatabaseAction) GetDatabaseId() string { - if x != nil { - return x.DatabaseId - } - return "" -} - -// Action that gets a Cloud Spanner database. -type GetCloudDatabaseAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // The id of the database to get, e.g. "db0". - DatabaseId string `protobuf:"bytes,3,opt,name=database_id,json=databaseId,proto3" json:"database_id,omitempty"` -} - -func (x *GetCloudDatabaseAction) Reset() { - *x = GetCloudDatabaseAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetCloudDatabaseAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetCloudDatabaseAction) ProtoMessage() {} - -func (x *GetCloudDatabaseAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[38] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetCloudDatabaseAction.ProtoReflect.Descriptor instead. -func (*GetCloudDatabaseAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{38} -} - -func (x *GetCloudDatabaseAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *GetCloudDatabaseAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *GetCloudDatabaseAction) GetDatabaseId() string { - if x != nil { - return x.DatabaseId - } - return "" -} - -// Action that creates a Cloud Spanner database backup. -type CreateCloudBackupAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // The id of the backup to be created, e.g. "test-backup". - BackupId string `protobuf:"bytes,3,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` - // The id of the database from which this backup was - // created, e.g. "db0". Note that this needs to be in the - // same instance as the backup. - DatabaseId string `protobuf:"bytes,4,opt,name=database_id,json=databaseId,proto3" json:"database_id,omitempty"` - // Output only. The expiration time of the backup, which must be at least 6 - // hours and at most 366 days from the time the request is received. - ExpireTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=expire_time,json=expireTime,proto3" json:"expire_time,omitempty"` - // The version time of the backup, which must be within the time range of - // [earliest_version_time, NOW], where earliest_version_time is retrieved by - // cloud spanner frontend API (See details: go/cs-pitr-lite-design). - VersionTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=version_time,json=versionTime,proto3,oneof" json:"version_time,omitempty"` -} - -func (x *CreateCloudBackupAction) Reset() { - *x = CreateCloudBackupAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateCloudBackupAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateCloudBackupAction) ProtoMessage() {} - -func (x *CreateCloudBackupAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[39] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateCloudBackupAction.ProtoReflect.Descriptor instead. -func (*CreateCloudBackupAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{39} -} - -func (x *CreateCloudBackupAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *CreateCloudBackupAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *CreateCloudBackupAction) GetBackupId() string { - if x != nil { - return x.BackupId - } - return "" -} - -func (x *CreateCloudBackupAction) GetDatabaseId() string { - if x != nil { - return x.DatabaseId - } - return "" -} - -func (x *CreateCloudBackupAction) GetExpireTime() *timestamppb.Timestamp { - if x != nil { - return x.ExpireTime - } - return nil -} - -func (x *CreateCloudBackupAction) GetVersionTime() *timestamppb.Timestamp { - if x != nil { - return x.VersionTime - } - return nil -} - -// Action that copies a Cloud Spanner database backup. -type CopyCloudBackupAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // The id of the backup to be created, e.g. "test-backup". - BackupId string `protobuf:"bytes,3,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` - // The fully qualified uri of the source backup from which this - // backup was copied. eg. - // "projects//instances//backups/". - SourceBackup string `protobuf:"bytes,4,opt,name=source_backup,json=sourceBackup,proto3" json:"source_backup,omitempty"` - // Output only. The expiration time of the backup, which must be at least 6 - // hours and at most 366 days from the time the request is received. - ExpireTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=expire_time,json=expireTime,proto3" json:"expire_time,omitempty"` -} - -func (x *CopyCloudBackupAction) Reset() { - *x = CopyCloudBackupAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CopyCloudBackupAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CopyCloudBackupAction) ProtoMessage() {} - -func (x *CopyCloudBackupAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[40] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CopyCloudBackupAction.ProtoReflect.Descriptor instead. -func (*CopyCloudBackupAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{40} -} - -func (x *CopyCloudBackupAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *CopyCloudBackupAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *CopyCloudBackupAction) GetBackupId() string { - if x != nil { - return x.BackupId - } - return "" -} - -func (x *CopyCloudBackupAction) GetSourceBackup() string { - if x != nil { - return x.SourceBackup - } - return "" -} - -func (x *CopyCloudBackupAction) GetExpireTime() *timestamppb.Timestamp { - if x != nil { - return x.ExpireTime - } - return nil -} - -// Action that gets a Cloud Spanner database backup. -type GetCloudBackupAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // The id of the backup to get, e.g. "test-backup". - BackupId string `protobuf:"bytes,3,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` -} - -func (x *GetCloudBackupAction) Reset() { - *x = GetCloudBackupAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetCloudBackupAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetCloudBackupAction) ProtoMessage() {} - -func (x *GetCloudBackupAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[41] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetCloudBackupAction.ProtoReflect.Descriptor instead. -func (*GetCloudBackupAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{41} -} - -func (x *GetCloudBackupAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *GetCloudBackupAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *GetCloudBackupAction) GetBackupId() string { - if x != nil { - return x.BackupId - } - return "" -} - -// Action that updates a Cloud Spanner database backup. -type UpdateCloudBackupAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // The id of the backup to update, e.g. "test-backup". - BackupId string `protobuf:"bytes,3,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` - // Output only. Updated value of expire_time, this is the only field - // that supported to be updated. - ExpireTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expire_time,json=expireTime,proto3" json:"expire_time,omitempty"` -} - -func (x *UpdateCloudBackupAction) Reset() { - *x = UpdateCloudBackupAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateCloudBackupAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateCloudBackupAction) ProtoMessage() {} - -func (x *UpdateCloudBackupAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[42] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateCloudBackupAction.ProtoReflect.Descriptor instead. -func (*UpdateCloudBackupAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{42} -} - -func (x *UpdateCloudBackupAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *UpdateCloudBackupAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *UpdateCloudBackupAction) GetBackupId() string { - if x != nil { - return x.BackupId - } - return "" -} - -func (x *UpdateCloudBackupAction) GetExpireTime() *timestamppb.Timestamp { - if x != nil { - return x.ExpireTime - } - return nil -} - -// Action that deletes a Cloud Spanner database backup. -type DeleteCloudBackupAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud instance ID (not path), e.g. "test-instance". - InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // The id of the backup to delete, e.g. "test-backup". - BackupId string `protobuf:"bytes,3,opt,name=backup_id,json=backupId,proto3" json:"backup_id,omitempty"` -} - -func (x *DeleteCloudBackupAction) Reset() { - *x = DeleteCloudBackupAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[43] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteCloudBackupAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteCloudBackupAction) ProtoMessage() {} - -func (x *DeleteCloudBackupAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[43] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteCloudBackupAction.ProtoReflect.Descriptor instead. -func (*DeleteCloudBackupAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{43} -} - -func (x *DeleteCloudBackupAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *DeleteCloudBackupAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *DeleteCloudBackupAction) GetBackupId() string { - if x != nil { - return x.BackupId - } - return "" -} - -// Action that lists Cloud Spanner database backups. -type ListCloudBackupsAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud instance ID (not path) to list backups from, e.g. "test-instance". - InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // A filter expression that filters backups listed in the response. - // The expression must specify the field name, a comparison operator, - // and the value that you want to use for filtering. - // Refer backup.proto.ListBackupsRequest for detail. - Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` - // Number of backups to be returned in the response. If 0 or - // less, defaults to the server's maximum allowed page size. - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // If non-empty, "page_token" should contain a next_page_token - // from a previous ListBackupsResponse to the same "parent" - // and with the same "filter". - PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` -} - -func (x *ListCloudBackupsAction) Reset() { - *x = ListCloudBackupsAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[44] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCloudBackupsAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCloudBackupsAction) ProtoMessage() {} - -func (x *ListCloudBackupsAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[44] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCloudBackupsAction.ProtoReflect.Descriptor instead. -func (*ListCloudBackupsAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{44} -} - -func (x *ListCloudBackupsAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *ListCloudBackupsAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *ListCloudBackupsAction) GetFilter() string { - if x != nil { - return x.Filter - } - return "" -} - -func (x *ListCloudBackupsAction) GetPageSize() int32 { - if x != nil { - return x.PageSize - } - return 0 -} - -func (x *ListCloudBackupsAction) GetPageToken() string { - if x != nil { - return x.PageToken - } - return "" -} - -// Action that lists Cloud Spanner database backup operations. -type ListCloudBackupOperationsAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cloud project ID, e.g. "spanner-cloud-systest". - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - // Cloud instance ID (not path) to list backup operations from, - // e.g. "test-instance". - InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` - // A filter expression that filters what operations are returned in the - // response. - // The expression must specify the field name, a comparison operator, - // and the value that you want to use for filtering. - // Refer backup.proto.ListBackupOperationsRequest for detail. - Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"` - // Number of backups to be returned in the response. If 0 or - // less, defaults to the server's maximum allowed page size. - PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // If non-empty, "page_token" should contain a next_page_token - // from a previous ListBackupOperationsResponse to the same "parent" - // and with the same "filter". - PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` -} - -func (x *ListCloudBackupOperationsAction) Reset() { - *x = ListCloudBackupOperationsAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[45] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCloudBackupOperationsAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCloudBackupOperationsAction) ProtoMessage() {} - -func (x *ListCloudBackupOperationsAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[45] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCloudBackupOperationsAction.ProtoReflect.Descriptor instead. -func (*ListCloudBackupOperationsAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{45} -} - -func (x *ListCloudBackupOperationsAction) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *ListCloudBackupOperationsAction) GetInstanceId() string { - if x != nil { - return x.InstanceId - } - return "" -} - -func (x *ListCloudBackupOperationsAction) GetFilter() string { - if x != nil { - return x.Filter - } - return "" -} - -func (x *ListCloudBackupOperationsAction) GetPageSize() int32 { - if x != nil { - return x.PageSize - } - return 0 -} - -func (x *ListCloudBackupOperationsAction) GetPageToken() string { - if x != nil { - return x.PageToken - } - return "" -} - -// Action that gets an operation. -type GetOperationAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the operation resource. - Operation string `protobuf:"bytes,1,opt,name=operation,proto3" json:"operation,omitempty"` -} - -func (x *GetOperationAction) Reset() { - *x = GetOperationAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[46] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetOperationAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetOperationAction) ProtoMessage() {} - -func (x *GetOperationAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[46] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetOperationAction.ProtoReflect.Descriptor instead. -func (*GetOperationAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{46} -} - -func (x *GetOperationAction) GetOperation() string { - if x != nil { - return x.Operation - } - return "" -} - -// Action that cancels an operation. -type CancelOperationAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the operation resource to be cancelled. - Operation string `protobuf:"bytes,1,opt,name=operation,proto3" json:"operation,omitempty"` -} - -func (x *CancelOperationAction) Reset() { - *x = CancelOperationAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[47] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CancelOperationAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CancelOperationAction) ProtoMessage() {} - -func (x *CancelOperationAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[47] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CancelOperationAction.ProtoReflect.Descriptor instead. -func (*CancelOperationAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{47} -} - -func (x *CancelOperationAction) GetOperation() string { - if x != nil { - return x.Operation - } - return "" -} - -// Starts a batch read-only transaction in executor. Successful outcomes of this -// action will contain batch_txn_id--the identificator that can be used to start -// the same transaction in other Executors to parallelize partition processing. -// -// Example of a batch read flow: -// 1. Start batch transaction with a timestamp (StartBatchTransactionAction) -// 2. Generate database partitions for a read or query -// (GenerateDbPartitionsForReadAction/GenerateDbPartitionsForQueryAction) -// 3. Call ExecutePartitionAction for some or all partitions, process rows -// 4. Clean up the transaction (CloseBatchTransactionAction). -// -// More sophisticated example, with parallel processing: -// 1. Start batch transaction with a timestamp (StartBatchTransactionAction), -// note the returned BatchTransactionId -// 2. Generate database partitions for a read or query -// (GenerateDbPartitionsForReadAction/GenerateDbPartitionsForQueryAction) -// 3. Distribute the partitions over a pool of workers, along with the -// transaction ID. -// -// In each worker: -// 4-1. StartBatchTransactionAction with the given transaction ID -// 4-2. ExecutePartitionAction for each partition it got, process read results -// 4-3. Close (not cleanup) the transaction (CloseBatchTransactionAction). -// -// When all workers are done: -// 5. Cleanup the transaction (CloseBatchTransactionAction). This can be done -// either by the last worker to finish the job, or by the main Executor that -// initialized this transaction in the first place. It is also possible to clean -// it up with a brand new Executor -- just execute StartBatchTransactionAction -// with the ID, then clean it up right away. -// -// Cleaning up is optional, but recommended. -type StartBatchTransactionAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // To start a new transaction, specify an exact timestamp. Alternatively, an - // existing batch transaction ID can be used. Either one of two must be - // set. - // - // Types that are assignable to Param: - // - // *StartBatchTransactionAction_BatchTxnTime - // *StartBatchTransactionAction_Tid - Param isStartBatchTransactionAction_Param `protobuf_oneof:"param"` - // Database role to assume while performing this action. Setting the - // database_role will enforce additional role-based access checks on this - // action. - CloudDatabaseRole string `protobuf:"bytes,3,opt,name=cloud_database_role,json=cloudDatabaseRole,proto3" json:"cloud_database_role,omitempty"` -} - -func (x *StartBatchTransactionAction) Reset() { - *x = StartBatchTransactionAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[48] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartBatchTransactionAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartBatchTransactionAction) ProtoMessage() {} - -func (x *StartBatchTransactionAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[48] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StartBatchTransactionAction.ProtoReflect.Descriptor instead. -func (*StartBatchTransactionAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{48} -} - -func (m *StartBatchTransactionAction) GetParam() isStartBatchTransactionAction_Param { - if m != nil { - return m.Param - } - return nil -} - -func (x *StartBatchTransactionAction) GetBatchTxnTime() *timestamppb.Timestamp { - if x, ok := x.GetParam().(*StartBatchTransactionAction_BatchTxnTime); ok { - return x.BatchTxnTime - } - return nil -} - -func (x *StartBatchTransactionAction) GetTid() []byte { - if x, ok := x.GetParam().(*StartBatchTransactionAction_Tid); ok { - return x.Tid - } - return nil -} - -func (x *StartBatchTransactionAction) GetCloudDatabaseRole() string { - if x != nil { - return x.CloudDatabaseRole - } - return "" -} - -type isStartBatchTransactionAction_Param interface { - isStartBatchTransactionAction_Param() -} - -type StartBatchTransactionAction_BatchTxnTime struct { - // The exact timestamp to start the batch transaction. - BatchTxnTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=batch_txn_time,json=batchTxnTime,proto3,oneof"` -} - -type StartBatchTransactionAction_Tid struct { - // ID of a batch read-only transaction. It can be used to start the same - // batch transaction on multiple executors and parallelize partition - // processing. - Tid []byte `protobuf:"bytes,2,opt,name=tid,proto3,oneof"` -} - -func (*StartBatchTransactionAction_BatchTxnTime) isStartBatchTransactionAction_Param() {} - -func (*StartBatchTransactionAction_Tid) isStartBatchTransactionAction_Param() {} - -// Closes or cleans up the currently opened batch read-only transaction. -// -// Once a transaction is closed, the Executor can be disposed of or used to -// start start another transaction. Closing a batch transaction in one Executor -// doesn't affect the transaction's state in other Executors that also read from -// it. -// -// When a transaction is cleaned up, it becomes globally invalid. Cleaning up is -// optional, but recommended. -type CloseBatchTransactionAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Indicates whether the transaction needs to be cleaned up. - Cleanup bool `protobuf:"varint,1,opt,name=cleanup,proto3" json:"cleanup,omitempty"` -} - -func (x *CloseBatchTransactionAction) Reset() { - *x = CloseBatchTransactionAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[49] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CloseBatchTransactionAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CloseBatchTransactionAction) ProtoMessage() {} - -func (x *CloseBatchTransactionAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[49] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CloseBatchTransactionAction.ProtoReflect.Descriptor instead. -func (*CloseBatchTransactionAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{49} -} - -func (x *CloseBatchTransactionAction) GetCleanup() bool { - if x != nil { - return x.Cleanup - } - return false -} - -// Generate database partitions for the given read. Successful outcomes will -// contain database partitions in the db_partition field. -type GenerateDbPartitionsForReadAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Read to generate partitions for. - Read *ReadAction `protobuf:"bytes,1,opt,name=read,proto3" json:"read,omitempty"` - // Metadata related to the tables involved in the read. - Table []*TableMetadata `protobuf:"bytes,2,rep,name=table,proto3" json:"table,omitempty"` - // Desired size of data in each partition. Spanner doesn't guarantee to - // respect this value. - DesiredBytesPerPartition *int64 `protobuf:"varint,3,opt,name=desired_bytes_per_partition,json=desiredBytesPerPartition,proto3,oneof" json:"desired_bytes_per_partition,omitempty"` - // If set, the desired max number of partitions. Spanner doesn't guarantee to - // respect this value. - MaxPartitionCount *int64 `protobuf:"varint,4,opt,name=max_partition_count,json=maxPartitionCount,proto3,oneof" json:"max_partition_count,omitempty"` -} - -func (x *GenerateDbPartitionsForReadAction) Reset() { - *x = GenerateDbPartitionsForReadAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[50] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GenerateDbPartitionsForReadAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GenerateDbPartitionsForReadAction) ProtoMessage() {} - -func (x *GenerateDbPartitionsForReadAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[50] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GenerateDbPartitionsForReadAction.ProtoReflect.Descriptor instead. -func (*GenerateDbPartitionsForReadAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{50} -} - -func (x *GenerateDbPartitionsForReadAction) GetRead() *ReadAction { - if x != nil { - return x.Read - } - return nil -} - -func (x *GenerateDbPartitionsForReadAction) GetTable() []*TableMetadata { - if x != nil { - return x.Table - } - return nil -} - -func (x *GenerateDbPartitionsForReadAction) GetDesiredBytesPerPartition() int64 { - if x != nil && x.DesiredBytesPerPartition != nil { - return *x.DesiredBytesPerPartition - } - return 0 -} - -func (x *GenerateDbPartitionsForReadAction) GetMaxPartitionCount() int64 { - if x != nil && x.MaxPartitionCount != nil { - return *x.MaxPartitionCount - } - return 0 -} - -// Generate database partitions for the given query. Successful outcomes will -// contain database partitions in the db_partition field. -type GenerateDbPartitionsForQueryAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Query to generate partitions for. - Query *QueryAction `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` - // Desired size of data in each partition. Spanner doesn't guarantee to - // respect this value. - DesiredBytesPerPartition *int64 `protobuf:"varint,2,opt,name=desired_bytes_per_partition,json=desiredBytesPerPartition,proto3,oneof" json:"desired_bytes_per_partition,omitempty"` -} - -func (x *GenerateDbPartitionsForQueryAction) Reset() { - *x = GenerateDbPartitionsForQueryAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[51] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GenerateDbPartitionsForQueryAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GenerateDbPartitionsForQueryAction) ProtoMessage() {} - -func (x *GenerateDbPartitionsForQueryAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[51] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GenerateDbPartitionsForQueryAction.ProtoReflect.Descriptor instead. -func (*GenerateDbPartitionsForQueryAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{51} -} - -func (x *GenerateDbPartitionsForQueryAction) GetQuery() *QueryAction { - if x != nil { - return x.Query - } - return nil -} - -func (x *GenerateDbPartitionsForQueryAction) GetDesiredBytesPerPartition() int64 { - if x != nil && x.DesiredBytesPerPartition != nil { - return *x.DesiredBytesPerPartition - } - return 0 -} - -// Identifies a database partition generated for a particular read or query. To -// read rows from the partition, use ExecutePartitionAction. -type BatchPartition struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Serialized Partition instance. - Partition []byte `protobuf:"bytes,1,opt,name=partition,proto3" json:"partition,omitempty"` - // The partition token decrypted from partition. - PartitionToken []byte `protobuf:"bytes,2,opt,name=partition_token,json=partitionToken,proto3" json:"partition_token,omitempty"` - // Table name is set iff the partition was generated for a read (as opposed to - // a query). - Table *string `protobuf:"bytes,3,opt,name=table,proto3,oneof" json:"table,omitempty"` - // Index name if the partition was generated for an index read. - Index *string `protobuf:"bytes,4,opt,name=index,proto3,oneof" json:"index,omitempty"` -} - -func (x *BatchPartition) Reset() { - *x = BatchPartition{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[52] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BatchPartition) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BatchPartition) ProtoMessage() {} - -func (x *BatchPartition) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[52] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BatchPartition.ProtoReflect.Descriptor instead. -func (*BatchPartition) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{52} -} - -func (x *BatchPartition) GetPartition() []byte { - if x != nil { - return x.Partition - } - return nil -} - -func (x *BatchPartition) GetPartitionToken() []byte { - if x != nil { - return x.PartitionToken - } - return nil -} - -func (x *BatchPartition) GetTable() string { - if x != nil && x.Table != nil { - return *x.Table - } - return "" -} - -func (x *BatchPartition) GetIndex() string { - if x != nil && x.Index != nil { - return *x.Index - } - return "" -} - -// Performs a read or query for the given partitions. This action must be -// executed in the context of the same transaction that was used to generate -// given partitions. -type ExecutePartitionAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Batch partition to execute on. - Partition *BatchPartition `protobuf:"bytes,1,opt,name=partition,proto3" json:"partition,omitempty"` -} - -func (x *ExecutePartitionAction) Reset() { - *x = ExecutePartitionAction{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[53] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExecutePartitionAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExecutePartitionAction) ProtoMessage() {} - -func (x *ExecutePartitionAction) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[53] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExecutePartitionAction.ProtoReflect.Descriptor instead. -func (*ExecutePartitionAction) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{53} -} - -func (x *ExecutePartitionAction) GetPartition() *BatchPartition { - if x != nil { - return x.Partition - } - return nil -} - -// Execute a change stream TVF query. -type ExecuteChangeStreamQuery struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name for this change stream. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Specifies that records with commit_timestamp greater than or equal to - // start_time should be returned. - StartTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` - // Specifies that records with commit_timestamp less than or equal to - // end_time should be returned. - EndTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime,proto3,oneof" json:"end_time,omitempty"` - // Specifies which change stream partition to query, based on the content of - // child partitions records. - PartitionToken *string `protobuf:"bytes,4,opt,name=partition_token,json=partitionToken,proto3,oneof" json:"partition_token,omitempty"` - // Read options for this change stream query. - ReadOptions []string `protobuf:"bytes,5,rep,name=read_options,json=readOptions,proto3" json:"read_options,omitempty"` - // Determines how frequently a heartbeat ChangeRecord will be returned in case - // there are no transactions committed in this partition, in milliseconds. - HeartbeatMilliseconds *int32 `protobuf:"varint,6,opt,name=heartbeat_milliseconds,json=heartbeatMilliseconds,proto3,oneof" json:"heartbeat_milliseconds,omitempty"` - // Deadline for this change stream query, in seconds. - DeadlineSeconds *int64 `protobuf:"varint,7,opt,name=deadline_seconds,json=deadlineSeconds,proto3,oneof" json:"deadline_seconds,omitempty"` - // Database role to assume while performing this action. This should only be - // set for cloud requests. Setting the database role will enforce additional - // role-based access checks on this action. - CloudDatabaseRole *string `protobuf:"bytes,8,opt,name=cloud_database_role,json=cloudDatabaseRole,proto3,oneof" json:"cloud_database_role,omitempty"` -} - -func (x *ExecuteChangeStreamQuery) Reset() { - *x = ExecuteChangeStreamQuery{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExecuteChangeStreamQuery) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExecuteChangeStreamQuery) ProtoMessage() {} - -func (x *ExecuteChangeStreamQuery) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[54] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExecuteChangeStreamQuery.ProtoReflect.Descriptor instead. -func (*ExecuteChangeStreamQuery) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{54} -} - -func (x *ExecuteChangeStreamQuery) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ExecuteChangeStreamQuery) GetStartTime() *timestamppb.Timestamp { - if x != nil { - return x.StartTime - } - return nil -} - -func (x *ExecuteChangeStreamQuery) GetEndTime() *timestamppb.Timestamp { - if x != nil { - return x.EndTime - } - return nil -} - -func (x *ExecuteChangeStreamQuery) GetPartitionToken() string { - if x != nil && x.PartitionToken != nil { - return *x.PartitionToken - } - return "" -} - -func (x *ExecuteChangeStreamQuery) GetReadOptions() []string { - if x != nil { - return x.ReadOptions - } - return nil -} - -func (x *ExecuteChangeStreamQuery) GetHeartbeatMilliseconds() int32 { - if x != nil && x.HeartbeatMilliseconds != nil { - return *x.HeartbeatMilliseconds - } - return 0 -} - -func (x *ExecuteChangeStreamQuery) GetDeadlineSeconds() int64 { - if x != nil && x.DeadlineSeconds != nil { - return *x.DeadlineSeconds - } - return 0 -} - -func (x *ExecuteChangeStreamQuery) GetCloudDatabaseRole() string { - if x != nil && x.CloudDatabaseRole != nil { - return *x.CloudDatabaseRole - } - return "" -} - -// SpannerActionOutcome defines a result of execution of a single SpannerAction. -type SpannerActionOutcome struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // If an outcome is split into multiple parts, status will be set only in the - // last part. - Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3,oneof" json:"status,omitempty"` - // Transaction timestamp. It must be set for successful committed actions. - CommitTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=commit_time,json=commitTime,proto3,oneof" json:"commit_time,omitempty"` - // Result of a ReadAction. This field must be set for ReadActions even if - // no rows were read. - ReadResult *ReadResult `protobuf:"bytes,3,opt,name=read_result,json=readResult,proto3,oneof" json:"read_result,omitempty"` - // Result of a Query. This field must be set for Queries even if no rows were - // read. - QueryResult *QueryResult `protobuf:"bytes,4,opt,name=query_result,json=queryResult,proto3,oneof" json:"query_result,omitempty"` - // This bit indicates that Spanner has restarted the current transaction. It - // means that the client should replay all the reads and writes. - // Setting it to true is only valid in the context of a read-write - // transaction, as an outcome of a committing FinishTransactionAction. - TransactionRestarted *bool `protobuf:"varint,5,opt,name=transaction_restarted,json=transactionRestarted,proto3,oneof" json:"transaction_restarted,omitempty"` - // In successful StartBatchTransactionAction outcomes, this contains the ID of - // the transaction. - BatchTxnId []byte `protobuf:"bytes,6,opt,name=batch_txn_id,json=batchTxnId,proto3,oneof" json:"batch_txn_id,omitempty"` - // Generated database partitions (result of a - // GenetageDbPartitionsForReadAction/GenerateDbPartitionsForQueryAction). - DbPartition []*BatchPartition `protobuf:"bytes,7,rep,name=db_partition,json=dbPartition,proto3" json:"db_partition,omitempty"` - // Result of admin related actions. - AdminResult *AdminResult `protobuf:"bytes,8,opt,name=admin_result,json=adminResult,proto3,oneof" json:"admin_result,omitempty"` - // Stores rows modified by query in single DML or batch DML action. - // In case of batch DML action, stores 0 as row count of errored DML query. - DmlRowsModified []int64 `protobuf:"varint,9,rep,packed,name=dml_rows_modified,json=dmlRowsModified,proto3" json:"dml_rows_modified,omitempty"` - // Change stream records returned by a change stream query. - ChangeStreamRecords []*ChangeStreamRecord `protobuf:"bytes,10,rep,name=change_stream_records,json=changeStreamRecords,proto3" json:"change_stream_records,omitempty"` -} - -func (x *SpannerActionOutcome) Reset() { - *x = SpannerActionOutcome{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[55] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SpannerActionOutcome) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SpannerActionOutcome) ProtoMessage() {} - -func (x *SpannerActionOutcome) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[55] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SpannerActionOutcome.ProtoReflect.Descriptor instead. -func (*SpannerActionOutcome) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{55} -} - -func (x *SpannerActionOutcome) GetStatus() *status.Status { - if x != nil { - return x.Status - } - return nil -} - -func (x *SpannerActionOutcome) GetCommitTime() *timestamppb.Timestamp { - if x != nil { - return x.CommitTime - } - return nil -} - -func (x *SpannerActionOutcome) GetReadResult() *ReadResult { - if x != nil { - return x.ReadResult - } - return nil -} - -func (x *SpannerActionOutcome) GetQueryResult() *QueryResult { - if x != nil { - return x.QueryResult - } - return nil -} - -func (x *SpannerActionOutcome) GetTransactionRestarted() bool { - if x != nil && x.TransactionRestarted != nil { - return *x.TransactionRestarted - } - return false -} - -func (x *SpannerActionOutcome) GetBatchTxnId() []byte { - if x != nil { - return x.BatchTxnId - } - return nil -} - -func (x *SpannerActionOutcome) GetDbPartition() []*BatchPartition { - if x != nil { - return x.DbPartition - } - return nil -} - -func (x *SpannerActionOutcome) GetAdminResult() *AdminResult { - if x != nil { - return x.AdminResult - } - return nil -} - -func (x *SpannerActionOutcome) GetDmlRowsModified() []int64 { - if x != nil { - return x.DmlRowsModified - } - return nil -} - -func (x *SpannerActionOutcome) GetChangeStreamRecords() []*ChangeStreamRecord { - if x != nil { - return x.ChangeStreamRecords - } - return nil -} - -// AdminResult contains admin action results, for database/backup/operation. -type AdminResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Results of cloud backup related actions. - BackupResponse *CloudBackupResponse `protobuf:"bytes,1,opt,name=backup_response,json=backupResponse,proto3" json:"backup_response,omitempty"` - // Results of operation related actions. - OperationResponse *OperationResponse `protobuf:"bytes,2,opt,name=operation_response,json=operationResponse,proto3" json:"operation_response,omitempty"` - // Results of database related actions. - DatabaseResponse *CloudDatabaseResponse `protobuf:"bytes,3,opt,name=database_response,json=databaseResponse,proto3" json:"database_response,omitempty"` - // Results of instance related actions. - InstanceResponse *CloudInstanceResponse `protobuf:"bytes,4,opt,name=instance_response,json=instanceResponse,proto3" json:"instance_response,omitempty"` - // Results of instance config related actions. - InstanceConfigResponse *CloudInstanceConfigResponse `protobuf:"bytes,5,opt,name=instance_config_response,json=instanceConfigResponse,proto3" json:"instance_config_response,omitempty"` -} - -func (x *AdminResult) Reset() { - *x = AdminResult{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[56] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AdminResult) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AdminResult) ProtoMessage() {} - -func (x *AdminResult) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[56] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AdminResult.ProtoReflect.Descriptor instead. -func (*AdminResult) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{56} -} - -func (x *AdminResult) GetBackupResponse() *CloudBackupResponse { - if x != nil { - return x.BackupResponse - } - return nil -} - -func (x *AdminResult) GetOperationResponse() *OperationResponse { - if x != nil { - return x.OperationResponse - } - return nil -} - -func (x *AdminResult) GetDatabaseResponse() *CloudDatabaseResponse { - if x != nil { - return x.DatabaseResponse - } - return nil -} - -func (x *AdminResult) GetInstanceResponse() *CloudInstanceResponse { - if x != nil { - return x.InstanceResponse - } - return nil -} - -func (x *AdminResult) GetInstanceConfigResponse() *CloudInstanceConfigResponse { - if x != nil { - return x.InstanceConfigResponse - } - return nil -} - -// CloudBackupResponse contains results returned by cloud backup related -// actions. -type CloudBackupResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // List of backups returned by ListCloudBackupsAction. - ListedBackups []*databasepb.Backup `protobuf:"bytes,1,rep,name=listed_backups,json=listedBackups,proto3" json:"listed_backups,omitempty"` - // List of operations returned by ListCloudBackupOperationsAction. - ListedBackupOperations []*longrunningpb.Operation `protobuf:"bytes,2,rep,name=listed_backup_operations,json=listedBackupOperations,proto3" json:"listed_backup_operations,omitempty"` - // "next_page_token" can be sent in a subsequent list action - // to fetch more of the matching data. - NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - // Backup returned by GetCloudBackupAction/UpdateCloudBackupAction. - Backup *databasepb.Backup `protobuf:"bytes,4,opt,name=backup,proto3" json:"backup,omitempty"` -} - -func (x *CloudBackupResponse) Reset() { - *x = CloudBackupResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[57] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CloudBackupResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CloudBackupResponse) ProtoMessage() {} - -func (x *CloudBackupResponse) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[57] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CloudBackupResponse.ProtoReflect.Descriptor instead. -func (*CloudBackupResponse) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{57} -} - -func (x *CloudBackupResponse) GetListedBackups() []*databasepb.Backup { - if x != nil { - return x.ListedBackups - } - return nil -} - -func (x *CloudBackupResponse) GetListedBackupOperations() []*longrunningpb.Operation { - if x != nil { - return x.ListedBackupOperations - } - return nil -} - -func (x *CloudBackupResponse) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -func (x *CloudBackupResponse) GetBackup() *databasepb.Backup { - if x != nil { - return x.Backup - } - return nil -} - -// OperationResponse contains results returned by operation related actions. -type OperationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // List of operations returned by ListOperationsAction. - ListedOperations []*longrunningpb.Operation `protobuf:"bytes,1,rep,name=listed_operations,json=listedOperations,proto3" json:"listed_operations,omitempty"` - // "next_page_token" can be sent in a subsequent list action - // to fetch more of the matching data. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - // Operation returned by GetOperationAction. - Operation *longrunningpb.Operation `protobuf:"bytes,3,opt,name=operation,proto3" json:"operation,omitempty"` -} - -func (x *OperationResponse) Reset() { - *x = OperationResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[58] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OperationResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OperationResponse) ProtoMessage() {} - -func (x *OperationResponse) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[58] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OperationResponse.ProtoReflect.Descriptor instead. -func (*OperationResponse) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{58} -} - -func (x *OperationResponse) GetListedOperations() []*longrunningpb.Operation { - if x != nil { - return x.ListedOperations - } - return nil -} - -func (x *OperationResponse) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -func (x *OperationResponse) GetOperation() *longrunningpb.Operation { - if x != nil { - return x.Operation - } - return nil -} - -// CloudInstanceResponse contains results returned by cloud instance related -// actions. -type CloudInstanceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // List of instances returned by ListCloudInstancesAction. - ListedInstances []*instancepb.Instance `protobuf:"bytes,1,rep,name=listed_instances,json=listedInstances,proto3" json:"listed_instances,omitempty"` - // "next_page_token" can be sent in a subsequent list action - // to fetch more of the matching data. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - // Instance returned by GetCloudInstanceAction - Instance *instancepb.Instance `protobuf:"bytes,3,opt,name=instance,proto3" json:"instance,omitempty"` -} - -func (x *CloudInstanceResponse) Reset() { - *x = CloudInstanceResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[59] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CloudInstanceResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CloudInstanceResponse) ProtoMessage() {} - -func (x *CloudInstanceResponse) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[59] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CloudInstanceResponse.ProtoReflect.Descriptor instead. -func (*CloudInstanceResponse) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{59} -} - -func (x *CloudInstanceResponse) GetListedInstances() []*instancepb.Instance { - if x != nil { - return x.ListedInstances - } - return nil -} - -func (x *CloudInstanceResponse) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -func (x *CloudInstanceResponse) GetInstance() *instancepb.Instance { - if x != nil { - return x.Instance - } - return nil -} - -// CloudInstanceConfigResponse contains results returned by cloud instance -// config related actions. -type CloudInstanceConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // List of instance configs returned by ListCloudInstanceConfigsAction. - ListedInstanceConfigs []*instancepb.InstanceConfig `protobuf:"bytes,1,rep,name=listed_instance_configs,json=listedInstanceConfigs,proto3" json:"listed_instance_configs,omitempty"` - // "next_page_token" can be sent in a subsequent list action - // to fetch more of the matching data. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - // Instance config returned by GetCloudInstanceConfigAction. - InstanceConfig *instancepb.InstanceConfig `protobuf:"bytes,3,opt,name=instance_config,json=instanceConfig,proto3" json:"instance_config,omitempty"` -} - -func (x *CloudInstanceConfigResponse) Reset() { - *x = CloudInstanceConfigResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[60] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CloudInstanceConfigResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CloudInstanceConfigResponse) ProtoMessage() {} - -func (x *CloudInstanceConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[60] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CloudInstanceConfigResponse.ProtoReflect.Descriptor instead. -func (*CloudInstanceConfigResponse) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{60} -} - -func (x *CloudInstanceConfigResponse) GetListedInstanceConfigs() []*instancepb.InstanceConfig { - if x != nil { - return x.ListedInstanceConfigs - } - return nil -} - -func (x *CloudInstanceConfigResponse) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -func (x *CloudInstanceConfigResponse) GetInstanceConfig() *instancepb.InstanceConfig { - if x != nil { - return x.InstanceConfig - } - return nil -} - -// CloudDatabaseResponse contains results returned by cloud database related -// actions. -type CloudDatabaseResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // List of databases returned by ListCloudDatabasesAction. - ListedDatabases []*databasepb.Database `protobuf:"bytes,1,rep,name=listed_databases,json=listedDatabases,proto3" json:"listed_databases,omitempty"` - // List of operations returned by ListCloudDatabaseOperationsAction. - ListedDatabaseOperations []*longrunningpb.Operation `protobuf:"bytes,2,rep,name=listed_database_operations,json=listedDatabaseOperations,proto3" json:"listed_database_operations,omitempty"` - // "next_page_token" can be sent in a subsequent list action - // to fetch more of the matching data. - NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - // Database returned by GetCloudDatabaseAction - Database *databasepb.Database `protobuf:"bytes,4,opt,name=database,proto3" json:"database,omitempty"` -} - -func (x *CloudDatabaseResponse) Reset() { - *x = CloudDatabaseResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[61] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CloudDatabaseResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CloudDatabaseResponse) ProtoMessage() {} - -func (x *CloudDatabaseResponse) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[61] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CloudDatabaseResponse.ProtoReflect.Descriptor instead. -func (*CloudDatabaseResponse) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{61} -} - -func (x *CloudDatabaseResponse) GetListedDatabases() []*databasepb.Database { - if x != nil { - return x.ListedDatabases - } - return nil -} - -func (x *CloudDatabaseResponse) GetListedDatabaseOperations() []*longrunningpb.Operation { - if x != nil { - return x.ListedDatabaseOperations - } - return nil -} - -func (x *CloudDatabaseResponse) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -func (x *CloudDatabaseResponse) GetDatabase() *databasepb.Database { - if x != nil { - return x.Database - } - return nil -} - -// ReadResult contains rows read. -type ReadResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Table name. - Table string `protobuf:"bytes,1,opt,name=table,proto3" json:"table,omitempty"` - // Index name, if read from an index. - Index *string `protobuf:"bytes,2,opt,name=index,proto3,oneof" json:"index,omitempty"` - // Request index (multiread only). - RequestIndex *int32 `protobuf:"varint,3,opt,name=request_index,json=requestIndex,proto3,oneof" json:"request_index,omitempty"` - // Rows read. Each row is a struct with multiple fields, one for each column - // in read result. All rows have the same type. - Row []*ValueList `protobuf:"bytes,4,rep,name=row,proto3" json:"row,omitempty"` - // The type of rows read. It must be set if at least one row was read. - RowType *spannerpb.StructType `protobuf:"bytes,5,opt,name=row_type,json=rowType,proto3,oneof" json:"row_type,omitempty"` -} - -func (x *ReadResult) Reset() { - *x = ReadResult{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[62] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ReadResult) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ReadResult) ProtoMessage() {} - -func (x *ReadResult) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[62] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ReadResult.ProtoReflect.Descriptor instead. -func (*ReadResult) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{62} -} - -func (x *ReadResult) GetTable() string { - if x != nil { - return x.Table - } - return "" -} - -func (x *ReadResult) GetIndex() string { - if x != nil && x.Index != nil { - return *x.Index - } - return "" -} - -func (x *ReadResult) GetRequestIndex() int32 { - if x != nil && x.RequestIndex != nil { - return *x.RequestIndex - } - return 0 -} - -func (x *ReadResult) GetRow() []*ValueList { - if x != nil { - return x.Row - } - return nil -} - -func (x *ReadResult) GetRowType() *spannerpb.StructType { - if x != nil { - return x.RowType - } - return nil -} - -// QueryResult contains result of a Query. -type QueryResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Rows read. Each row is a struct with multiple fields, one for each column - // in read result. All rows have the same type. - Row []*ValueList `protobuf:"bytes,1,rep,name=row,proto3" json:"row,omitempty"` - // The type of rows read. It must be set if at least one row was read. - RowType *spannerpb.StructType `protobuf:"bytes,2,opt,name=row_type,json=rowType,proto3,oneof" json:"row_type,omitempty"` -} - -func (x *QueryResult) Reset() { - *x = QueryResult{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[63] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *QueryResult) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*QueryResult) ProtoMessage() {} - -func (x *QueryResult) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[63] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use QueryResult.ProtoReflect.Descriptor instead. -func (*QueryResult) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{63} -} - -func (x *QueryResult) GetRow() []*ValueList { - if x != nil { - return x.Row - } - return nil -} - -func (x *QueryResult) GetRowType() *spannerpb.StructType { - if x != nil { - return x.RowType - } - return nil -} - -// Raw ChangeStream records. -// Encodes one of: DataChangeRecord, HeartbeatRecord, ChildPartitionsRecord -// returned from the ChangeStream API. -type ChangeStreamRecord struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Record represents one type of the change stream record. - // - // Types that are assignable to Record: - // - // *ChangeStreamRecord_DataChange - // *ChangeStreamRecord_ChildPartition - // *ChangeStreamRecord_Heartbeat - Record isChangeStreamRecord_Record `protobuf_oneof:"record"` -} - -func (x *ChangeStreamRecord) Reset() { - *x = ChangeStreamRecord{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[64] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChangeStreamRecord) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChangeStreamRecord) ProtoMessage() {} - -func (x *ChangeStreamRecord) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[64] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChangeStreamRecord.ProtoReflect.Descriptor instead. -func (*ChangeStreamRecord) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{64} -} - -func (m *ChangeStreamRecord) GetRecord() isChangeStreamRecord_Record { - if m != nil { - return m.Record - } - return nil -} - -func (x *ChangeStreamRecord) GetDataChange() *DataChangeRecord { - if x, ok := x.GetRecord().(*ChangeStreamRecord_DataChange); ok { - return x.DataChange - } - return nil -} - -func (x *ChangeStreamRecord) GetChildPartition() *ChildPartitionsRecord { - if x, ok := x.GetRecord().(*ChangeStreamRecord_ChildPartition); ok { - return x.ChildPartition - } - return nil -} - -func (x *ChangeStreamRecord) GetHeartbeat() *HeartbeatRecord { - if x, ok := x.GetRecord().(*ChangeStreamRecord_Heartbeat); ok { - return x.Heartbeat - } - return nil -} - -type isChangeStreamRecord_Record interface { - isChangeStreamRecord_Record() -} - -type ChangeStreamRecord_DataChange struct { - // Data change record. - DataChange *DataChangeRecord `protobuf:"bytes,1,opt,name=data_change,json=dataChange,proto3,oneof"` -} - -type ChangeStreamRecord_ChildPartition struct { - // Child partitions record. - ChildPartition *ChildPartitionsRecord `protobuf:"bytes,2,opt,name=child_partition,json=childPartition,proto3,oneof"` -} - -type ChangeStreamRecord_Heartbeat struct { - // Heartbeat record. - Heartbeat *HeartbeatRecord `protobuf:"bytes,3,opt,name=heartbeat,proto3,oneof"` -} - -func (*ChangeStreamRecord_DataChange) isChangeStreamRecord_Record() {} - -func (*ChangeStreamRecord_ChildPartition) isChangeStreamRecord_Record() {} - -func (*ChangeStreamRecord_Heartbeat) isChangeStreamRecord_Record() {} - -// ChangeStream data change record. -type DataChangeRecord struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The timestamp in which the change was committed. - CommitTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=commit_time,json=commitTime,proto3" json:"commit_time,omitempty"` - // The sequence number for the record within the transaction. - RecordSequence string `protobuf:"bytes,2,opt,name=record_sequence,json=recordSequence,proto3" json:"record_sequence,omitempty"` - // A globally unique string that represents the transaction in which the - // change was committed. - TransactionId string `protobuf:"bytes,3,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` - // Indicates whether this is the last record for a transaction in the current - // partition. - IsLastRecord bool `protobuf:"varint,4,opt,name=is_last_record,json=isLastRecord,proto3" json:"is_last_record,omitempty"` - // Name of the table affected by the change. - Table string `protobuf:"bytes,5,opt,name=table,proto3" json:"table,omitempty"` - // Column types defined in the schema. - ColumnTypes []*DataChangeRecord_ColumnType `protobuf:"bytes,6,rep,name=column_types,json=columnTypes,proto3" json:"column_types,omitempty"` - // Changes made in the transaction. - Mods []*DataChangeRecord_Mod `protobuf:"bytes,7,rep,name=mods,proto3" json:"mods,omitempty"` - // Describes the type of change. One of INSERT, UPDATE or DELETE. - ModType string `protobuf:"bytes,8,opt,name=mod_type,json=modType,proto3" json:"mod_type,omitempty"` - // One of value capture type: NEW_VALUES, OLD_VALUES, OLD_AND_NEW_VALUES. - ValueCaptureType string `protobuf:"bytes,9,opt,name=value_capture_type,json=valueCaptureType,proto3" json:"value_capture_type,omitempty"` - // Number of records in transactions. - RecordCount int64 `protobuf:"varint,10,opt,name=record_count,json=recordCount,proto3" json:"record_count,omitempty"` - // Number of partitions in transactions. - PartitionCount int64 `protobuf:"varint,11,opt,name=partition_count,json=partitionCount,proto3" json:"partition_count,omitempty"` - // Transaction tag info. - TransactionTag string `protobuf:"bytes,12,opt,name=transaction_tag,json=transactionTag,proto3" json:"transaction_tag,omitempty"` - // Whether the transaction is a system transactionn. - IsSystemTransaction bool `protobuf:"varint,13,opt,name=is_system_transaction,json=isSystemTransaction,proto3" json:"is_system_transaction,omitempty"` -} - -func (x *DataChangeRecord) Reset() { - *x = DataChangeRecord{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[65] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DataChangeRecord) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DataChangeRecord) ProtoMessage() {} - -func (x *DataChangeRecord) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[65] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DataChangeRecord.ProtoReflect.Descriptor instead. -func (*DataChangeRecord) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{65} -} - -func (x *DataChangeRecord) GetCommitTime() *timestamppb.Timestamp { - if x != nil { - return x.CommitTime - } - return nil -} - -func (x *DataChangeRecord) GetRecordSequence() string { - if x != nil { - return x.RecordSequence - } - return "" -} - -func (x *DataChangeRecord) GetTransactionId() string { - if x != nil { - return x.TransactionId - } - return "" -} - -func (x *DataChangeRecord) GetIsLastRecord() bool { - if x != nil { - return x.IsLastRecord - } - return false -} - -func (x *DataChangeRecord) GetTable() string { - if x != nil { - return x.Table - } - return "" -} - -func (x *DataChangeRecord) GetColumnTypes() []*DataChangeRecord_ColumnType { - if x != nil { - return x.ColumnTypes - } - return nil -} - -func (x *DataChangeRecord) GetMods() []*DataChangeRecord_Mod { - if x != nil { - return x.Mods - } - return nil -} - -func (x *DataChangeRecord) GetModType() string { - if x != nil { - return x.ModType - } - return "" -} - -func (x *DataChangeRecord) GetValueCaptureType() string { - if x != nil { - return x.ValueCaptureType - } - return "" -} - -func (x *DataChangeRecord) GetRecordCount() int64 { - if x != nil { - return x.RecordCount - } - return 0 -} - -func (x *DataChangeRecord) GetPartitionCount() int64 { - if x != nil { - return x.PartitionCount - } - return 0 -} - -func (x *DataChangeRecord) GetTransactionTag() string { - if x != nil { - return x.TransactionTag - } - return "" -} - -func (x *DataChangeRecord) GetIsSystemTransaction() bool { - if x != nil { - return x.IsSystemTransaction - } - return false -} - -// ChangeStream child partition record. -type ChildPartitionsRecord struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Data change records returned from child partitions in this child partitions - // record will have a commit timestamp greater than or equal to start_time. - StartTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` - // A monotonically increasing sequence number that can be used to define the - // ordering of the child partitions record when there are multiple child - // partitions records returned with the same start_time in a particular - // partition. - RecordSequence string `protobuf:"bytes,2,opt,name=record_sequence,json=recordSequence,proto3" json:"record_sequence,omitempty"` - // A set of child partitions and their associated information. - ChildPartitions []*ChildPartitionsRecord_ChildPartition `protobuf:"bytes,3,rep,name=child_partitions,json=childPartitions,proto3" json:"child_partitions,omitempty"` -} - -func (x *ChildPartitionsRecord) Reset() { - *x = ChildPartitionsRecord{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[66] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChildPartitionsRecord) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChildPartitionsRecord) ProtoMessage() {} - -func (x *ChildPartitionsRecord) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[66] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChildPartitionsRecord.ProtoReflect.Descriptor instead. -func (*ChildPartitionsRecord) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{66} -} - -func (x *ChildPartitionsRecord) GetStartTime() *timestamppb.Timestamp { - if x != nil { - return x.StartTime - } - return nil -} - -func (x *ChildPartitionsRecord) GetRecordSequence() string { - if x != nil { - return x.RecordSequence - } - return "" -} - -func (x *ChildPartitionsRecord) GetChildPartitions() []*ChildPartitionsRecord_ChildPartition { - if x != nil { - return x.ChildPartitions - } - return nil -} - -// ChangeStream heartbeat record. -type HeartbeatRecord struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Timestamp for this heartbeat check. - HeartbeatTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=heartbeat_time,json=heartbeatTime,proto3" json:"heartbeat_time,omitempty"` -} - -func (x *HeartbeatRecord) Reset() { - *x = HeartbeatRecord{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[67] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HeartbeatRecord) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HeartbeatRecord) ProtoMessage() {} - -func (x *HeartbeatRecord) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[67] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HeartbeatRecord.ProtoReflect.Descriptor instead. -func (*HeartbeatRecord) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{67} -} - -func (x *HeartbeatRecord) GetHeartbeatTime() *timestamppb.Timestamp { - if x != nil { - return x.HeartbeatTime - } - return nil -} - -// Parameter that bind to placeholders in the SQL string -type QueryAction_Parameter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name of the parameter (with no leading @). - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Type of the parameter. - Type *spannerpb.Type `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - // Value of the parameter. - Value *Value `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *QueryAction_Parameter) Reset() { - *x = QueryAction_Parameter{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[68] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *QueryAction_Parameter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*QueryAction_Parameter) ProtoMessage() {} - -func (x *QueryAction_Parameter) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[68] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use QueryAction_Parameter.ProtoReflect.Descriptor instead. -func (*QueryAction_Parameter) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{4, 0} -} - -func (x *QueryAction_Parameter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *QueryAction_Parameter) GetType() *spannerpb.Type { - if x != nil { - return x.Type - } - return nil -} - -func (x *QueryAction_Parameter) GetValue() *Value { - if x != nil { - return x.Value - } - return nil -} - -// Arguments to Insert, InsertOrUpdate, and Replace operations. -type MutationAction_InsertArgs struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The names of the columns to be written. - Column []string `protobuf:"bytes,1,rep,name=column,proto3" json:"column,omitempty"` - // Type information for the "values" entries below. - Type []*spannerpb.Type `protobuf:"bytes,2,rep,name=type,proto3" json:"type,omitempty"` - // The values to be written. - Values []*ValueList `protobuf:"bytes,3,rep,name=values,proto3" json:"values,omitempty"` -} - -func (x *MutationAction_InsertArgs) Reset() { - *x = MutationAction_InsertArgs{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[69] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MutationAction_InsertArgs) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MutationAction_InsertArgs) ProtoMessage() {} - -func (x *MutationAction_InsertArgs) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[69] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MutationAction_InsertArgs.ProtoReflect.Descriptor instead. -func (*MutationAction_InsertArgs) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{11, 0} -} - -func (x *MutationAction_InsertArgs) GetColumn() []string { - if x != nil { - return x.Column - } - return nil -} - -func (x *MutationAction_InsertArgs) GetType() []*spannerpb.Type { - if x != nil { - return x.Type - } - return nil -} - -func (x *MutationAction_InsertArgs) GetValues() []*ValueList { - if x != nil { - return x.Values - } - return nil -} - -// Arguments to Update. -type MutationAction_UpdateArgs struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The columns to be updated. Identical to InsertArgs.column. - Column []string `protobuf:"bytes,1,rep,name=column,proto3" json:"column,omitempty"` - // Type information for "values". Identical to InsertArgs.type. - Type []*spannerpb.Type `protobuf:"bytes,2,rep,name=type,proto3" json:"type,omitempty"` - // The values to be updated. Identical to InsertArgs.values. - Values []*ValueList `protobuf:"bytes,3,rep,name=values,proto3" json:"values,omitempty"` -} - -func (x *MutationAction_UpdateArgs) Reset() { - *x = MutationAction_UpdateArgs{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[70] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MutationAction_UpdateArgs) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MutationAction_UpdateArgs) ProtoMessage() {} - -func (x *MutationAction_UpdateArgs) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[70] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MutationAction_UpdateArgs.ProtoReflect.Descriptor instead. -func (*MutationAction_UpdateArgs) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{11, 1} -} - -func (x *MutationAction_UpdateArgs) GetColumn() []string { - if x != nil { - return x.Column - } - return nil -} - -func (x *MutationAction_UpdateArgs) GetType() []*spannerpb.Type { - if x != nil { - return x.Type - } - return nil -} - -func (x *MutationAction_UpdateArgs) GetValues() []*ValueList { - if x != nil { - return x.Values - } - return nil -} - -// Mod represents the write action that will be perform to a table. Each mod -// will specify exactly one action, from insert, update, insert_or_update, -// replace and delete. -type MutationAction_Mod struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The table to write. - Table string `protobuf:"bytes,1,opt,name=table,proto3" json:"table,omitempty"` - // Exactly one of the remaining elements may be present. - // Insert new rows into "table". - Insert *MutationAction_InsertArgs `protobuf:"bytes,2,opt,name=insert,proto3" json:"insert,omitempty"` - // Update columns stored in existing rows of "table". - Update *MutationAction_UpdateArgs `protobuf:"bytes,3,opt,name=update,proto3" json:"update,omitempty"` - // Insert or update existing rows of "table". - InsertOrUpdate *MutationAction_InsertArgs `protobuf:"bytes,4,opt,name=insert_or_update,json=insertOrUpdate,proto3" json:"insert_or_update,omitempty"` - // Replace existing rows of "table". - Replace *MutationAction_InsertArgs `protobuf:"bytes,5,opt,name=replace,proto3" json:"replace,omitempty"` - // Delete rows from "table". - DeleteKeys *KeySet `protobuf:"bytes,6,opt,name=delete_keys,json=deleteKeys,proto3" json:"delete_keys,omitempty"` -} - -func (x *MutationAction_Mod) Reset() { - *x = MutationAction_Mod{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[71] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MutationAction_Mod) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MutationAction_Mod) ProtoMessage() {} - -func (x *MutationAction_Mod) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[71] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MutationAction_Mod.ProtoReflect.Descriptor instead. -func (*MutationAction_Mod) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{11, 2} -} - -func (x *MutationAction_Mod) GetTable() string { - if x != nil { - return x.Table - } - return "" -} - -func (x *MutationAction_Mod) GetInsert() *MutationAction_InsertArgs { - if x != nil { - return x.Insert - } - return nil -} - -func (x *MutationAction_Mod) GetUpdate() *MutationAction_UpdateArgs { - if x != nil { - return x.Update - } - return nil -} - -func (x *MutationAction_Mod) GetInsertOrUpdate() *MutationAction_InsertArgs { - if x != nil { - return x.InsertOrUpdate - } - return nil -} - -func (x *MutationAction_Mod) GetReplace() *MutationAction_InsertArgs { - if x != nil { - return x.Replace - } - return nil -} - -func (x *MutationAction_Mod) GetDeleteKeys() *KeySet { - if x != nil { - return x.DeleteKeys - } - return nil -} - -type PartitionedUpdateAction_ExecutePartitionedUpdateOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // RPC Priority - RpcPriority *spannerpb.RequestOptions_Priority `protobuf:"varint,1,opt,name=rpc_priority,json=rpcPriority,proto3,enum=google.spanner.v1.RequestOptions_Priority,oneof" json:"rpc_priority,omitempty"` - // Transaction tag - Tag *string `protobuf:"bytes,2,opt,name=tag,proto3,oneof" json:"tag,omitempty"` -} - -func (x *PartitionedUpdateAction_ExecutePartitionedUpdateOptions) Reset() { - *x = PartitionedUpdateAction_ExecutePartitionedUpdateOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[72] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PartitionedUpdateAction_ExecutePartitionedUpdateOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PartitionedUpdateAction_ExecutePartitionedUpdateOptions) ProtoMessage() {} - -func (x *PartitionedUpdateAction_ExecutePartitionedUpdateOptions) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[72] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PartitionedUpdateAction_ExecutePartitionedUpdateOptions.ProtoReflect.Descriptor instead. -func (*PartitionedUpdateAction_ExecutePartitionedUpdateOptions) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{13, 0} -} - -func (x *PartitionedUpdateAction_ExecutePartitionedUpdateOptions) GetRpcPriority() spannerpb.RequestOptions_Priority { - if x != nil && x.RpcPriority != nil { - return *x.RpcPriority - } - return spannerpb.RequestOptions_PRIORITY_UNSPECIFIED -} - -func (x *PartitionedUpdateAction_ExecutePartitionedUpdateOptions) GetTag() string { - if x != nil && x.Tag != nil { - return *x.Tag - } - return "" -} - -// Column types. -type DataChangeRecord_ColumnType struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Column name. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Column type in JSON. - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - // Whether the column is a primary key column. - IsPrimaryKey bool `protobuf:"varint,3,opt,name=is_primary_key,json=isPrimaryKey,proto3" json:"is_primary_key,omitempty"` - // The position of the column as defined in the schema. - OrdinalPosition int64 `protobuf:"varint,4,opt,name=ordinal_position,json=ordinalPosition,proto3" json:"ordinal_position,omitempty"` -} - -func (x *DataChangeRecord_ColumnType) Reset() { - *x = DataChangeRecord_ColumnType{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[76] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DataChangeRecord_ColumnType) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DataChangeRecord_ColumnType) ProtoMessage() {} - -func (x *DataChangeRecord_ColumnType) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[76] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DataChangeRecord_ColumnType.ProtoReflect.Descriptor instead. -func (*DataChangeRecord_ColumnType) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{65, 0} -} - -func (x *DataChangeRecord_ColumnType) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *DataChangeRecord_ColumnType) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *DataChangeRecord_ColumnType) GetIsPrimaryKey() bool { - if x != nil { - return x.IsPrimaryKey - } - return false -} - -func (x *DataChangeRecord_ColumnType) GetOrdinalPosition() int64 { - if x != nil { - return x.OrdinalPosition - } - return 0 -} - -// Describes the changes that were made. -type DataChangeRecord_Mod struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The primary key values in JSON. - Keys string `protobuf:"bytes,1,opt,name=keys,proto3" json:"keys,omitempty"` - // The new values of the changed columns in JSON. Only contain the non-key - // columns. - NewValues string `protobuf:"bytes,2,opt,name=new_values,json=newValues,proto3" json:"new_values,omitempty"` - // The old values of the changed columns in JSON. Only contain the non-key - // columns. - OldValues string `protobuf:"bytes,3,opt,name=old_values,json=oldValues,proto3" json:"old_values,omitempty"` -} - -func (x *DataChangeRecord_Mod) Reset() { - *x = DataChangeRecord_Mod{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[77] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DataChangeRecord_Mod) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DataChangeRecord_Mod) ProtoMessage() {} - -func (x *DataChangeRecord_Mod) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[77] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DataChangeRecord_Mod.ProtoReflect.Descriptor instead. -func (*DataChangeRecord_Mod) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{65, 1} -} - -func (x *DataChangeRecord_Mod) GetKeys() string { - if x != nil { - return x.Keys - } - return "" -} - -func (x *DataChangeRecord_Mod) GetNewValues() string { - if x != nil { - return x.NewValues - } - return "" -} - -func (x *DataChangeRecord_Mod) GetOldValues() string { - if x != nil { - return x.OldValues - } - return "" -} - -// A single child partition. -type ChildPartitionsRecord_ChildPartition struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Partition token string used to identify the child partition in queries. - Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - // Parent partition tokens of this child partition. - ParentPartitionTokens []string `protobuf:"bytes,2,rep,name=parent_partition_tokens,json=parentPartitionTokens,proto3" json:"parent_partition_tokens,omitempty"` -} - -func (x *ChildPartitionsRecord_ChildPartition) Reset() { - *x = ChildPartitionsRecord_ChildPartition{} - if protoimpl.UnsafeEnabled { - mi := &file_cloud_executor_proto_msgTypes[78] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChildPartitionsRecord_ChildPartition) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChildPartitionsRecord_ChildPartition) ProtoMessage() {} - -func (x *ChildPartitionsRecord_ChildPartition) ProtoReflect() protoreflect.Message { - mi := &file_cloud_executor_proto_msgTypes[78] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChildPartitionsRecord_ChildPartition.ProtoReflect.Descriptor instead. -func (*ChildPartitionsRecord_ChildPartition) Descriptor() ([]byte, []int) { - return file_cloud_executor_proto_rawDescGZIP(), []int{66, 0} -} - -func (x *ChildPartitionsRecord_ChildPartition) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *ChildPartitionsRecord_ChildPartition) GetParentPartitionTokens() []string { - if x != nil { - return x.ParentPartitionTokens - } - return nil -} - -var File_cloud_executor_proto protoreflect.FileDescriptor - -var file_cloud_executor_proto_rawDesc = []byte{ - 0x0a, 0x14, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, - 0x76, 0x31, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, - 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, - 0x2f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, - 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x79, 0x70, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7b, 0x0a, 0x19, 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x41, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x70, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x85, 0x01, 0x0a, 0x1a, 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x41, - 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x4a, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x70, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x63, 0x6f, - 0x6d, 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x22, 0xbd, 0x0b, 0x0a, 0x0d, - 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, - 0x0d, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x50, 0x61, - 0x74, 0x68, 0x12, 0x4a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x4d, - 0x0a, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x69, - 0x73, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x12, 0x3c, 0x0a, - 0x04, 0x72, 0x65, 0x61, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x3f, 0x0a, 0x05, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x0a, 0x08, - 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x75, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x03, 0x64, 0x6d, 0x6c, 0x18, 0x17, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x6d, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x64, 0x6d, - 0x6c, 0x12, 0x49, 0x0a, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x6d, 0x6c, 0x18, 0x18, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x6d, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x08, 0x62, 0x61, 0x74, 0x63, 0x68, 0x44, 0x6d, 0x6c, 0x12, 0x48, 0x0a, 0x05, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x75, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x1b, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x05, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x61, 0x0a, - 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x78, 0x6e, - 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x78, 0x6e, - 0x12, 0x61, 0x0a, 0x0f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, - 0x74, 0x78, 0x6e, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x54, 0x78, 0x6e, 0x12, 0x7e, 0x0a, 0x1b, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, - 0x64, 0x62, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x72, 0x65, - 0x61, 0x64, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x44, 0x62, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x61, - 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x44, 0x62, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x61, 0x64, 0x12, 0x81, 0x01, 0x0a, 0x1c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x5f, 0x64, 0x62, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x44, 0x62, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x44, 0x62, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x61, 0x0a, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2c, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x75, 0x0a, 0x1b, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xad, 0x01, 0x0a, 0x0a, - 0x52, 0x65, 0x61, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x12, 0x19, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x12, 0x36, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4b, - 0x65, 0x79, 0x53, 0x65, 0x74, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xf2, 0x01, 0x0a, 0x0b, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x73, - 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x49, 0x0a, - 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x85, 0x01, 0x0a, 0x09, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x44, 0x6d, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, - 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, - 0x3b, 0x0a, 0x17, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x66, - 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x00, 0x52, 0x15, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x66, - 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18, - 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x66, 0x5f, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x22, 0x53, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x44, 0x6d, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x07, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x22, 0xe2, 0x04, - 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x19, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6e, 0x75, - 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x06, 0x69, 0x73, 0x4e, 0x75, - 0x6c, 0x6c, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0a, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x4a, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x48, 0x00, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0d, 0x64, - 0x61, 0x74, 0x65, 0x44, 0x61, 0x79, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x0a, 0x13, - 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x11, 0x69, 0x73, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x48, - 0x0a, 0x0b, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x72, - 0x72, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x01, 0x52, 0x09, 0x61, 0x72, 0x72, 0x61, 0x79, 0x54, 0x79, - 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, - 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x3b, 0x0a, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x42, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x54, 0x79, - 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x22, 0x60, 0x0a, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x43, - 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0f, - 0x0a, 0x0b, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x10, 0x02, 0x12, - 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, 0x03, - 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x50, 0x45, 0x4e, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x10, 0x04, 0x42, - 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x06, 0x4b, 0x65, 0x79, - 0x53, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x05, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x3a, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x44, - 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0xab, 0x06, 0x0a, 0x0e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x03, 0x6d, 0x6f, 0x64, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x4d, 0x6f, 0x64, 0x52, 0x03, 0x6d, 0x6f, 0x64, 0x1a, 0x90, 0x01, 0x0a, 0x0a, 0x49, 0x6e, - 0x73, 0x65, 0x72, 0x74, 0x41, 0x72, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, - 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x90, 0x01, 0x0a, - 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x3d, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, - 0xb0, 0x03, 0x0a, 0x03, 0x4d, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x4d, 0x0a, - 0x06, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, - 0x41, 0x72, 0x67, 0x73, 0x52, 0x06, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x12, 0x4d, 0x0a, 0x06, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, - 0x72, 0x67, 0x73, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x10, 0x69, - 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x72, 0x67, 0x73, 0x52, 0x0e, 0x69, 0x6e, - 0x73, 0x65, 0x72, 0x74, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x4f, 0x0a, 0x07, - 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, - 0x41, 0x72, 0x67, 0x73, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, 0x43, 0x0a, - 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, - 0x79, 0x73, 0x22, 0x5e, 0x0a, 0x14, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x75, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x08, 0x6d, 0x75, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x82, 0x03, 0x0a, 0x17, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x72, - 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x53, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x1a, 0xa5, 0x01, 0x0a, 0x1f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x52, 0x0a, 0x0c, 0x72, 0x70, 0x63, 0x5f, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x70, 0x63, - 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x74, - 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, - 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x70, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0a, 0x0a, 0x08, 0x5f, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe5, 0x02, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x88, - 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x65, 0x64, 0x12, 0x69, - 0x0a, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x48, 0x01, 0x52, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6f, - 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0xd7, 0x03, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, - 0x2d, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x10, 0x73, 0x74, - 0x61, 0x6c, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x3b, - 0x0a, 0x19, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x48, 0x00, 0x52, 0x16, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x6d, - 0x61, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x13, 0x6d, 0x61, - 0x78, 0x53, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x78, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x48, 0x00, 0x52, 0x14, 0x65, 0x78, 0x61, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x74, 0x72, - 0x6f, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, - 0x6f, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x00, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2e, 0x0a, 0x13, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x72, 0x65, - 0x61, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x72, 0x6f, - 0x6f, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x6f, 0x6f, - 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, - 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6d, - 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x62, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, - 0x69, 0x63, 0x72, 0x6f, 0x73, 0x42, 0x12, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0xb2, 0x01, 0x0a, 0x0d, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x42, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x12, 0x49, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0x51, - 0x0a, 0x0e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x22, 0x3d, 0x0a, 0x1b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x1e, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x74, 0x69, 0x63, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x73, 0x74, 0x69, 0x63, - 0x22, 0x9e, 0x01, 0x0a, 0x17, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x04, - 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x35, 0x0a, 0x04, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, - 0x49, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x42, 0x41, 0x4e, 0x44, 0x4f, 0x4e, 0x10, - 0x02, 0x22, 0x98, 0x17, 0x0a, 0x0b, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x7b, 0x0a, 0x1b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x18, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x7b, - 0x0a, 0x1b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x18, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x7b, 0x0a, 0x1b, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x18, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x75, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x5f, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x70, 0x0a, 0x15, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x6c, 0x69, - 0x73, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x12, 0x6b, 0x0a, 0x15, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x6b, - 0x0a, 0x15, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x15, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x13, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x68, 0x0a, 0x14, 0x6c, 0x69, 0x73, 0x74, - 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x12, - 0x6c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x73, 0x12, 0x62, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x15, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x19, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x64, 0x64, 0x6c, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x44, 0x64, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x16, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x44, 0x64, 0x6c, 0x12, 0x6b, 0x0a, 0x15, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x13, 0x64, 0x72, 0x6f, 0x70, 0x5f, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x64, 0x72, 0x6f, - 0x70, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x68, - 0x0a, 0x14, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x12, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x1e, 0x6c, 0x69, 0x73, - 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x1b, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x6e, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, - 0x62, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x10, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x5f, 0x0a, 0x11, 0x63, 0x6f, - 0x70, 0x79, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x6f, 0x70, 0x79, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x5c, 0x0a, 0x10, 0x67, - 0x65, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x65, 0x74, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x65, 0x0a, 0x13, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x12, 0x65, 0x0a, 0x13, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x62, 0x0a, 0x12, 0x6c, 0x69, 0x73, 0x74, 0x5f, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x17, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x12, 0x7e, 0x0a, 0x1c, 0x6c, - 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x19, 0x6c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x0d, 0x67, - 0x65, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x67, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x5e, 0x0a, 0x10, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x0f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd6, 0x01, 0x0a, - 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x24, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x61, - 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x26, 0x0a, - 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x5e, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x6b, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x65, - 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x24, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0xa2, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x08, 0x70, 0x61, - 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, - 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, - 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, - 0x0a, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, - 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x97, 0x03, 0x0a, 0x19, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x6f, - 0x64, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, - 0x6e, 0x67, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x59, 0x0a, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, - 0x13, 0x0a, 0x11, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x75, - 0x6e, 0x69, 0x74, 0x73, 0x22, 0xa2, 0x03, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x6e, 0x6f, - 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, - 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2e, - 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x6e, 0x69, - 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x48, 0x02, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x59, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x22, 0x5b, 0x0a, 0x19, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0xad, 0x02, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x64, 0x6c, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x64, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x5f, 0x0a, 0x11, 0x65, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x07, 0x64, - 0x69, 0x61, 0x6c, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, - 0x64, 0x69, 0x61, 0x6c, 0x65, 0x63, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x64, - 0x69, 0x61, 0x6c, 0x65, 0x63, 0x74, 0x22, 0xc7, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x44, 0x64, - 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x64, 0x6c, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0c, 0x73, 0x64, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, - 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x22, 0xb6, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, - 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x23, - 0x0a, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x72, - 0x6f, 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x14, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x72, 0x6f, 0x70, 0x50, - 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7a, 0x0a, 0x17, 0x44, 0x72, 0x6f, - 0x70, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x96, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xc4, - 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x06, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x08, 0x70, 0x61, - 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, - 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, - 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, - 0x07, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x70, 0x61, 0x67, - 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x58, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x22, - 0xb7, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, - 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xd9, 0x01, 0x0a, 0x1a, 0x52, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x79, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, - 0x22, 0xae, 0x02, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0b, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, - 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0c, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, - 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, - 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x22, 0xdb, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x40, 0x0a, - 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, - 0x73, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x49, 0x64, 0x22, 0xb8, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x40, 0x0a, - 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, - 0x76, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x22, 0xac, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, - 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, - 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xb5, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x32, - 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x35, 0x0a, 0x15, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xae, 0x01, 0x0a, 0x1b, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x0e, 0x62, 0x61, 0x74, - 0x63, 0x68, 0x5f, 0x74, 0x78, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, - 0x0c, 0x62, 0x61, 0x74, 0x63, 0x68, 0x54, 0x78, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, - 0x03, 0x74, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x74, 0x69, - 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x6f, 0x6c, - 0x65, 0x42, 0x07, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x22, 0x37, 0x0a, 0x1b, 0x43, 0x6c, - 0x6f, 0x73, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x65, - 0x61, 0x6e, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6c, 0x65, 0x61, - 0x6e, 0x75, 0x70, 0x22, 0xd1, 0x02, 0x0a, 0x21, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x44, 0x62, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x52, - 0x65, 0x61, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x04, 0x72, 0x65, 0x61, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x3f, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x42, 0x0a, 0x1b, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, - 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x18, 0x64, - 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x50, 0x65, 0x72, 0x50, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x13, 0x6d, 0x61, - 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x50, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, - 0x1e, 0x0a, 0x1c, 0x5f, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x16, 0x0a, 0x14, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xc7, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x44, 0x62, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x46, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, - 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x42, 0x0a, - 0x1b, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, - 0x65, 0x72, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x48, 0x00, 0x52, 0x18, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x42, 0x79, 0x74, - 0x65, 0x73, 0x50, 0x65, 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, - 0x01, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0xa1, 0x01, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x05, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x01, - 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x62, 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x48, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x80, 0x04, 0x0a, 0x18, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, - 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0e, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, - 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x16, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, - 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x48, 0x02, 0x52, 0x15, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x4d, - 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2e, - 0x0a, 0x10, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x0f, 0x64, 0x65, 0x61, 0x64, - 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x88, 0x01, 0x01, 0x12, 0x33, - 0x0a, 0x13, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x11, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x6f, 0x6c, 0x65, - 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, - 0x61, 0x74, 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x42, - 0x13, 0x0a, 0x11, 0x5f, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0xb1, 0x06, 0x0a, - 0x14, 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, - 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, - 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x02, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x88, 0x01, 0x01, 0x12, 0x4f, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x03, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x04, 0x52, 0x14, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x88, 0x01, - 0x01, 0x12, 0x25, 0x0a, 0x0c, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x78, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x05, 0x52, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, - 0x54, 0x78, 0x6e, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x4d, 0x0a, 0x0c, 0x64, 0x62, 0x5f, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x62, 0x50, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x06, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x6d, 0x6c, 0x5f, - 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x03, 0x52, 0x0f, 0x64, 0x6d, 0x6c, 0x52, 0x6f, 0x77, 0x73, 0x4d, 0x6f, 0x64, 0x69, - 0x66, 0x69, 0x65, 0x64, 0x12, 0x62, 0x0a, 0x15, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x0a, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x52, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x42, 0x0f, - 0x0a, 0x0d, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x78, 0x6e, 0x5f, 0x69, 0x64, 0x42, - 0x0f, 0x0a, 0x0d, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x22, 0xf8, 0x03, 0x0a, 0x0b, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x58, 0x0a, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0e, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x12, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x18, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x52, 0x16, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa9, 0x02, 0x0a, 0x13, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x73, 0x12, 0x57, 0x0a, 0x18, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x62, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, - 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x40, 0x0a, 0x06, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, - 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, - 0x06, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, - 0x11, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, - 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x3b, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, - 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xde, - 0x01, 0x0a, 0x15, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x6c, 0x69, 0x73, 0x74, - 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x0f, - 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, - 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, - 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x46, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, - 0x8a, 0x02, 0x0a, 0x1b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x68, 0x0a, 0x17, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x15, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, - 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x59, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xbb, 0x02, 0x0a, - 0x15, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x0f, 0x6c, 0x69, - 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x5b, 0x0a, - 0x1a, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, - 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x18, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, - 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x46, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x88, 0x02, 0x0a, 0x0a, 0x52, - 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, - 0x19, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x48, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x88, 0x01, 0x01, 0x12, 0x37, 0x0a, 0x03, 0x72, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x03, 0x72, 0x6f, 0x77, 0x12, 0x3d, 0x0a, - 0x08, 0x72, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x48, 0x02, - 0x52, 0x07, 0x72, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, - 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x72, 0x6f, 0x77, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x37, 0x0a, 0x03, 0x72, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x03, 0x72, 0x6f, 0x77, 0x12, 0x3d, - 0x0a, 0x08, 0x72, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x48, - 0x00, 0x52, 0x07, 0x72, 0x6f, 0x77, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, - 0x09, 0x5f, 0x72, 0x6f, 0x77, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x9a, 0x02, 0x0a, 0x12, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x12, 0x4f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x12, 0x5c, 0x0a, 0x0f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x48, 0x00, - 0x52, 0x0e, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4b, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x48, 0x00, 0x52, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x42, 0x08, 0x0a, - 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0xd0, 0x06, 0x0a, 0x10, 0x44, 0x61, 0x74, 0x61, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x3b, 0x0a, 0x0b, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, - 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x69, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x73, 0x12, 0x44, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x4d, 0x6f, - 0x64, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x6f, 0x64, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x74, - 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x61, 0x67, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x61, 0x67, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x73, 0x5f, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x73, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x85, 0x01, 0x0a, 0x0a, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x50, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, - 0x6c, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x1a, 0x57, 0x0a, 0x03, 0x4d, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x6e, 0x65, 0x77, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6e, 0x65, 0x77, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, - 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6f, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xc8, 0x02, 0x0a, 0x15, 0x43, - 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x10, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x5e, 0x0a, 0x0e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x36, 0x0a, - 0x17, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x54, 0x0a, 0x0f, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, - 0x61, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x41, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x72, - 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x68, 0x65, - 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x32, 0xcc, 0x01, 0x0a, 0x14, - 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x78, 0x79, 0x12, 0x89, 0x01, 0x0a, 0x12, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x35, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x41, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, - 0x1a, 0x28, 0xca, 0x41, 0x25, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2d, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x42, 0x78, 0x0a, 0x1e, 0x63, 0x6f, - 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x12, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x40, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x2f, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x70, 0x62, 0x3b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_cloud_executor_proto_rawDescOnce sync.Once - file_cloud_executor_proto_rawDescData = file_cloud_executor_proto_rawDesc -) - -func file_cloud_executor_proto_rawDescGZIP() []byte { - file_cloud_executor_proto_rawDescOnce.Do(func() { - file_cloud_executor_proto_rawDescData = protoimpl.X.CompressGZIP(file_cloud_executor_proto_rawDescData) - }) - return file_cloud_executor_proto_rawDescData -} - -var file_cloud_executor_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_cloud_executor_proto_msgTypes = make([]protoimpl.MessageInfo, 79) -var file_cloud_executor_proto_goTypes = []interface{}{ - (KeyRange_Type)(0), // 0: google.spanner.executor.v1.KeyRange.Type - (FinishTransactionAction_Mode)(0), // 1: google.spanner.executor.v1.FinishTransactionAction.Mode - (*SpannerAsyncActionRequest)(nil), // 2: google.spanner.executor.v1.SpannerAsyncActionRequest - (*SpannerAsyncActionResponse)(nil), // 3: google.spanner.executor.v1.SpannerAsyncActionResponse - (*SpannerAction)(nil), // 4: google.spanner.executor.v1.SpannerAction - (*ReadAction)(nil), // 5: google.spanner.executor.v1.ReadAction - (*QueryAction)(nil), // 6: google.spanner.executor.v1.QueryAction - (*DmlAction)(nil), // 7: google.spanner.executor.v1.DmlAction - (*BatchDmlAction)(nil), // 8: google.spanner.executor.v1.BatchDmlAction - (*Value)(nil), // 9: google.spanner.executor.v1.Value - (*KeyRange)(nil), // 10: google.spanner.executor.v1.KeyRange - (*KeySet)(nil), // 11: google.spanner.executor.v1.KeySet - (*ValueList)(nil), // 12: google.spanner.executor.v1.ValueList - (*MutationAction)(nil), // 13: google.spanner.executor.v1.MutationAction - (*WriteMutationsAction)(nil), // 14: google.spanner.executor.v1.WriteMutationsAction - (*PartitionedUpdateAction)(nil), // 15: google.spanner.executor.v1.PartitionedUpdateAction - (*StartTransactionAction)(nil), // 16: google.spanner.executor.v1.StartTransactionAction - (*Concurrency)(nil), // 17: google.spanner.executor.v1.Concurrency - (*TableMetadata)(nil), // 18: google.spanner.executor.v1.TableMetadata - (*ColumnMetadata)(nil), // 19: google.spanner.executor.v1.ColumnMetadata - (*TransactionExecutionOptions)(nil), // 20: google.spanner.executor.v1.TransactionExecutionOptions - (*FinishTransactionAction)(nil), // 21: google.spanner.executor.v1.FinishTransactionAction - (*AdminAction)(nil), // 22: google.spanner.executor.v1.AdminAction - (*CreateUserInstanceConfigAction)(nil), // 23: google.spanner.executor.v1.CreateUserInstanceConfigAction - (*UpdateUserInstanceConfigAction)(nil), // 24: google.spanner.executor.v1.UpdateUserInstanceConfigAction - (*GetCloudInstanceConfigAction)(nil), // 25: google.spanner.executor.v1.GetCloudInstanceConfigAction - (*DeleteUserInstanceConfigAction)(nil), // 26: google.spanner.executor.v1.DeleteUserInstanceConfigAction - (*ListCloudInstanceConfigsAction)(nil), // 27: google.spanner.executor.v1.ListCloudInstanceConfigsAction - (*CreateCloudInstanceAction)(nil), // 28: google.spanner.executor.v1.CreateCloudInstanceAction - (*UpdateCloudInstanceAction)(nil), // 29: google.spanner.executor.v1.UpdateCloudInstanceAction - (*DeleteCloudInstanceAction)(nil), // 30: google.spanner.executor.v1.DeleteCloudInstanceAction - (*CreateCloudDatabaseAction)(nil), // 31: google.spanner.executor.v1.CreateCloudDatabaseAction - (*UpdateCloudDatabaseDdlAction)(nil), // 32: google.spanner.executor.v1.UpdateCloudDatabaseDdlAction - (*UpdateCloudDatabaseAction)(nil), // 33: google.spanner.executor.v1.UpdateCloudDatabaseAction - (*DropCloudDatabaseAction)(nil), // 34: google.spanner.executor.v1.DropCloudDatabaseAction - (*ListCloudDatabasesAction)(nil), // 35: google.spanner.executor.v1.ListCloudDatabasesAction - (*ListCloudInstancesAction)(nil), // 36: google.spanner.executor.v1.ListCloudInstancesAction - (*GetCloudInstanceAction)(nil), // 37: google.spanner.executor.v1.GetCloudInstanceAction - (*ListCloudDatabaseOperationsAction)(nil), // 38: google.spanner.executor.v1.ListCloudDatabaseOperationsAction - (*RestoreCloudDatabaseAction)(nil), // 39: google.spanner.executor.v1.RestoreCloudDatabaseAction - (*GetCloudDatabaseAction)(nil), // 40: google.spanner.executor.v1.GetCloudDatabaseAction - (*CreateCloudBackupAction)(nil), // 41: google.spanner.executor.v1.CreateCloudBackupAction - (*CopyCloudBackupAction)(nil), // 42: google.spanner.executor.v1.CopyCloudBackupAction - (*GetCloudBackupAction)(nil), // 43: google.spanner.executor.v1.GetCloudBackupAction - (*UpdateCloudBackupAction)(nil), // 44: google.spanner.executor.v1.UpdateCloudBackupAction - (*DeleteCloudBackupAction)(nil), // 45: google.spanner.executor.v1.DeleteCloudBackupAction - (*ListCloudBackupsAction)(nil), // 46: google.spanner.executor.v1.ListCloudBackupsAction - (*ListCloudBackupOperationsAction)(nil), // 47: google.spanner.executor.v1.ListCloudBackupOperationsAction - (*GetOperationAction)(nil), // 48: google.spanner.executor.v1.GetOperationAction - (*CancelOperationAction)(nil), // 49: google.spanner.executor.v1.CancelOperationAction - (*StartBatchTransactionAction)(nil), // 50: google.spanner.executor.v1.StartBatchTransactionAction - (*CloseBatchTransactionAction)(nil), // 51: google.spanner.executor.v1.CloseBatchTransactionAction - (*GenerateDbPartitionsForReadAction)(nil), // 52: google.spanner.executor.v1.GenerateDbPartitionsForReadAction - (*GenerateDbPartitionsForQueryAction)(nil), // 53: google.spanner.executor.v1.GenerateDbPartitionsForQueryAction - (*BatchPartition)(nil), // 54: google.spanner.executor.v1.BatchPartition - (*ExecutePartitionAction)(nil), // 55: google.spanner.executor.v1.ExecutePartitionAction - (*ExecuteChangeStreamQuery)(nil), // 56: google.spanner.executor.v1.ExecuteChangeStreamQuery - (*SpannerActionOutcome)(nil), // 57: google.spanner.executor.v1.SpannerActionOutcome - (*AdminResult)(nil), // 58: google.spanner.executor.v1.AdminResult - (*CloudBackupResponse)(nil), // 59: google.spanner.executor.v1.CloudBackupResponse - (*OperationResponse)(nil), // 60: google.spanner.executor.v1.OperationResponse - (*CloudInstanceResponse)(nil), // 61: google.spanner.executor.v1.CloudInstanceResponse - (*CloudInstanceConfigResponse)(nil), // 62: google.spanner.executor.v1.CloudInstanceConfigResponse - (*CloudDatabaseResponse)(nil), // 63: google.spanner.executor.v1.CloudDatabaseResponse - (*ReadResult)(nil), // 64: google.spanner.executor.v1.ReadResult - (*QueryResult)(nil), // 65: google.spanner.executor.v1.QueryResult - (*ChangeStreamRecord)(nil), // 66: google.spanner.executor.v1.ChangeStreamRecord - (*DataChangeRecord)(nil), // 67: google.spanner.executor.v1.DataChangeRecord - (*ChildPartitionsRecord)(nil), // 68: google.spanner.executor.v1.ChildPartitionsRecord - (*HeartbeatRecord)(nil), // 69: google.spanner.executor.v1.HeartbeatRecord - (*QueryAction_Parameter)(nil), // 70: google.spanner.executor.v1.QueryAction.Parameter - (*MutationAction_InsertArgs)(nil), // 71: google.spanner.executor.v1.MutationAction.InsertArgs - (*MutationAction_UpdateArgs)(nil), // 72: google.spanner.executor.v1.MutationAction.UpdateArgs - (*MutationAction_Mod)(nil), // 73: google.spanner.executor.v1.MutationAction.Mod - (*PartitionedUpdateAction_ExecutePartitionedUpdateOptions)(nil), // 74: google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions - nil, // 75: google.spanner.executor.v1.UpdateUserInstanceConfigAction.LabelsEntry - nil, // 76: google.spanner.executor.v1.CreateCloudInstanceAction.LabelsEntry - nil, // 77: google.spanner.executor.v1.UpdateCloudInstanceAction.LabelsEntry - (*DataChangeRecord_ColumnType)(nil), // 78: google.spanner.executor.v1.DataChangeRecord.ColumnType - (*DataChangeRecord_Mod)(nil), // 79: google.spanner.executor.v1.DataChangeRecord.Mod - (*ChildPartitionsRecord_ChildPartition)(nil), // 80: google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition - (*timestamppb.Timestamp)(nil), // 81: google.protobuf.Timestamp - (*spannerpb.Type)(nil), // 82: google.spanner.v1.Type - (*instancepb.ReplicaInfo)(nil), // 83: google.spanner.admin.instance.v1.ReplicaInfo - (*databasepb.EncryptionConfig)(nil), // 84: google.spanner.admin.database.v1.EncryptionConfig - (*status.Status)(nil), // 85: google.rpc.Status - (*databasepb.Backup)(nil), // 86: google.spanner.admin.database.v1.Backup - (*longrunningpb.Operation)(nil), // 87: google.longrunning.Operation - (*instancepb.Instance)(nil), // 88: google.spanner.admin.instance.v1.Instance - (*instancepb.InstanceConfig)(nil), // 89: google.spanner.admin.instance.v1.InstanceConfig - (*databasepb.Database)(nil), // 90: google.spanner.admin.database.v1.Database - (*spannerpb.StructType)(nil), // 91: google.spanner.v1.StructType - (spannerpb.RequestOptions_Priority)(0), // 92: google.spanner.v1.RequestOptions.Priority -} -var file_cloud_executor_proto_depIdxs = []int32{ - 4, // 0: google.spanner.executor.v1.SpannerAsyncActionRequest.action:type_name -> google.spanner.executor.v1.SpannerAction - 57, // 1: google.spanner.executor.v1.SpannerAsyncActionResponse.outcome:type_name -> google.spanner.executor.v1.SpannerActionOutcome - 16, // 2: google.spanner.executor.v1.SpannerAction.start:type_name -> google.spanner.executor.v1.StartTransactionAction - 21, // 3: google.spanner.executor.v1.SpannerAction.finish:type_name -> google.spanner.executor.v1.FinishTransactionAction - 5, // 4: google.spanner.executor.v1.SpannerAction.read:type_name -> google.spanner.executor.v1.ReadAction - 6, // 5: google.spanner.executor.v1.SpannerAction.query:type_name -> google.spanner.executor.v1.QueryAction - 13, // 6: google.spanner.executor.v1.SpannerAction.mutation:type_name -> google.spanner.executor.v1.MutationAction - 7, // 7: google.spanner.executor.v1.SpannerAction.dml:type_name -> google.spanner.executor.v1.DmlAction - 8, // 8: google.spanner.executor.v1.SpannerAction.batch_dml:type_name -> google.spanner.executor.v1.BatchDmlAction - 14, // 9: google.spanner.executor.v1.SpannerAction.write:type_name -> google.spanner.executor.v1.WriteMutationsAction - 15, // 10: google.spanner.executor.v1.SpannerAction.partitioned_update:type_name -> google.spanner.executor.v1.PartitionedUpdateAction - 22, // 11: google.spanner.executor.v1.SpannerAction.admin:type_name -> google.spanner.executor.v1.AdminAction - 50, // 12: google.spanner.executor.v1.SpannerAction.start_batch_txn:type_name -> google.spanner.executor.v1.StartBatchTransactionAction - 51, // 13: google.spanner.executor.v1.SpannerAction.close_batch_txn:type_name -> google.spanner.executor.v1.CloseBatchTransactionAction - 52, // 14: google.spanner.executor.v1.SpannerAction.generate_db_partitions_read:type_name -> google.spanner.executor.v1.GenerateDbPartitionsForReadAction - 53, // 15: google.spanner.executor.v1.SpannerAction.generate_db_partitions_query:type_name -> google.spanner.executor.v1.GenerateDbPartitionsForQueryAction - 55, // 16: google.spanner.executor.v1.SpannerAction.execute_partition:type_name -> google.spanner.executor.v1.ExecutePartitionAction - 56, // 17: google.spanner.executor.v1.SpannerAction.execute_change_stream_query:type_name -> google.spanner.executor.v1.ExecuteChangeStreamQuery - 11, // 18: google.spanner.executor.v1.ReadAction.keys:type_name -> google.spanner.executor.v1.KeySet - 70, // 19: google.spanner.executor.v1.QueryAction.params:type_name -> google.spanner.executor.v1.QueryAction.Parameter - 6, // 20: google.spanner.executor.v1.DmlAction.update:type_name -> google.spanner.executor.v1.QueryAction - 6, // 21: google.spanner.executor.v1.BatchDmlAction.updates:type_name -> google.spanner.executor.v1.QueryAction - 12, // 22: google.spanner.executor.v1.Value.struct_value:type_name -> google.spanner.executor.v1.ValueList - 81, // 23: google.spanner.executor.v1.Value.timestamp_value:type_name -> google.protobuf.Timestamp - 12, // 24: google.spanner.executor.v1.Value.array_value:type_name -> google.spanner.executor.v1.ValueList - 82, // 25: google.spanner.executor.v1.Value.array_type:type_name -> google.spanner.v1.Type - 12, // 26: google.spanner.executor.v1.KeyRange.start:type_name -> google.spanner.executor.v1.ValueList - 12, // 27: google.spanner.executor.v1.KeyRange.limit:type_name -> google.spanner.executor.v1.ValueList - 0, // 28: google.spanner.executor.v1.KeyRange.type:type_name -> google.spanner.executor.v1.KeyRange.Type - 12, // 29: google.spanner.executor.v1.KeySet.point:type_name -> google.spanner.executor.v1.ValueList - 10, // 30: google.spanner.executor.v1.KeySet.range:type_name -> google.spanner.executor.v1.KeyRange - 9, // 31: google.spanner.executor.v1.ValueList.value:type_name -> google.spanner.executor.v1.Value - 73, // 32: google.spanner.executor.v1.MutationAction.mod:type_name -> google.spanner.executor.v1.MutationAction.Mod - 13, // 33: google.spanner.executor.v1.WriteMutationsAction.mutation:type_name -> google.spanner.executor.v1.MutationAction - 74, // 34: google.spanner.executor.v1.PartitionedUpdateAction.options:type_name -> google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions - 6, // 35: google.spanner.executor.v1.PartitionedUpdateAction.update:type_name -> google.spanner.executor.v1.QueryAction - 17, // 36: google.spanner.executor.v1.StartTransactionAction.concurrency:type_name -> google.spanner.executor.v1.Concurrency - 18, // 37: google.spanner.executor.v1.StartTransactionAction.table:type_name -> google.spanner.executor.v1.TableMetadata - 20, // 38: google.spanner.executor.v1.StartTransactionAction.execution_options:type_name -> google.spanner.executor.v1.TransactionExecutionOptions - 19, // 39: google.spanner.executor.v1.TableMetadata.column:type_name -> google.spanner.executor.v1.ColumnMetadata - 19, // 40: google.spanner.executor.v1.TableMetadata.key_column:type_name -> google.spanner.executor.v1.ColumnMetadata - 82, // 41: google.spanner.executor.v1.ColumnMetadata.type:type_name -> google.spanner.v1.Type - 1, // 42: google.spanner.executor.v1.FinishTransactionAction.mode:type_name -> google.spanner.executor.v1.FinishTransactionAction.Mode - 23, // 43: google.spanner.executor.v1.AdminAction.create_user_instance_config:type_name -> google.spanner.executor.v1.CreateUserInstanceConfigAction - 24, // 44: google.spanner.executor.v1.AdminAction.update_user_instance_config:type_name -> google.spanner.executor.v1.UpdateUserInstanceConfigAction - 26, // 45: google.spanner.executor.v1.AdminAction.delete_user_instance_config:type_name -> google.spanner.executor.v1.DeleteUserInstanceConfigAction - 25, // 46: google.spanner.executor.v1.AdminAction.get_cloud_instance_config:type_name -> google.spanner.executor.v1.GetCloudInstanceConfigAction - 27, // 47: google.spanner.executor.v1.AdminAction.list_instance_configs:type_name -> google.spanner.executor.v1.ListCloudInstanceConfigsAction - 28, // 48: google.spanner.executor.v1.AdminAction.create_cloud_instance:type_name -> google.spanner.executor.v1.CreateCloudInstanceAction - 29, // 49: google.spanner.executor.v1.AdminAction.update_cloud_instance:type_name -> google.spanner.executor.v1.UpdateCloudInstanceAction - 30, // 50: google.spanner.executor.v1.AdminAction.delete_cloud_instance:type_name -> google.spanner.executor.v1.DeleteCloudInstanceAction - 36, // 51: google.spanner.executor.v1.AdminAction.list_cloud_instances:type_name -> google.spanner.executor.v1.ListCloudInstancesAction - 37, // 52: google.spanner.executor.v1.AdminAction.get_cloud_instance:type_name -> google.spanner.executor.v1.GetCloudInstanceAction - 31, // 53: google.spanner.executor.v1.AdminAction.create_cloud_database:type_name -> google.spanner.executor.v1.CreateCloudDatabaseAction - 32, // 54: google.spanner.executor.v1.AdminAction.update_cloud_database_ddl:type_name -> google.spanner.executor.v1.UpdateCloudDatabaseDdlAction - 33, // 55: google.spanner.executor.v1.AdminAction.update_cloud_database:type_name -> google.spanner.executor.v1.UpdateCloudDatabaseAction - 34, // 56: google.spanner.executor.v1.AdminAction.drop_cloud_database:type_name -> google.spanner.executor.v1.DropCloudDatabaseAction - 35, // 57: google.spanner.executor.v1.AdminAction.list_cloud_databases:type_name -> google.spanner.executor.v1.ListCloudDatabasesAction - 38, // 58: google.spanner.executor.v1.AdminAction.list_cloud_database_operations:type_name -> google.spanner.executor.v1.ListCloudDatabaseOperationsAction - 39, // 59: google.spanner.executor.v1.AdminAction.restore_cloud_database:type_name -> google.spanner.executor.v1.RestoreCloudDatabaseAction - 40, // 60: google.spanner.executor.v1.AdminAction.get_cloud_database:type_name -> google.spanner.executor.v1.GetCloudDatabaseAction - 41, // 61: google.spanner.executor.v1.AdminAction.create_cloud_backup:type_name -> google.spanner.executor.v1.CreateCloudBackupAction - 42, // 62: google.spanner.executor.v1.AdminAction.copy_cloud_backup:type_name -> google.spanner.executor.v1.CopyCloudBackupAction - 43, // 63: google.spanner.executor.v1.AdminAction.get_cloud_backup:type_name -> google.spanner.executor.v1.GetCloudBackupAction - 44, // 64: google.spanner.executor.v1.AdminAction.update_cloud_backup:type_name -> google.spanner.executor.v1.UpdateCloudBackupAction - 45, // 65: google.spanner.executor.v1.AdminAction.delete_cloud_backup:type_name -> google.spanner.executor.v1.DeleteCloudBackupAction - 46, // 66: google.spanner.executor.v1.AdminAction.list_cloud_backups:type_name -> google.spanner.executor.v1.ListCloudBackupsAction - 47, // 67: google.spanner.executor.v1.AdminAction.list_cloud_backup_operations:type_name -> google.spanner.executor.v1.ListCloudBackupOperationsAction - 48, // 68: google.spanner.executor.v1.AdminAction.get_operation:type_name -> google.spanner.executor.v1.GetOperationAction - 49, // 69: google.spanner.executor.v1.AdminAction.cancel_operation:type_name -> google.spanner.executor.v1.CancelOperationAction - 83, // 70: google.spanner.executor.v1.CreateUserInstanceConfigAction.replicas:type_name -> google.spanner.admin.instance.v1.ReplicaInfo - 75, // 71: google.spanner.executor.v1.UpdateUserInstanceConfigAction.labels:type_name -> google.spanner.executor.v1.UpdateUserInstanceConfigAction.LabelsEntry - 76, // 72: google.spanner.executor.v1.CreateCloudInstanceAction.labels:type_name -> google.spanner.executor.v1.CreateCloudInstanceAction.LabelsEntry - 77, // 73: google.spanner.executor.v1.UpdateCloudInstanceAction.labels:type_name -> google.spanner.executor.v1.UpdateCloudInstanceAction.LabelsEntry - 84, // 74: google.spanner.executor.v1.CreateCloudDatabaseAction.encryption_config:type_name -> google.spanner.admin.database.v1.EncryptionConfig - 81, // 75: google.spanner.executor.v1.CreateCloudBackupAction.expire_time:type_name -> google.protobuf.Timestamp - 81, // 76: google.spanner.executor.v1.CreateCloudBackupAction.version_time:type_name -> google.protobuf.Timestamp - 81, // 77: google.spanner.executor.v1.CopyCloudBackupAction.expire_time:type_name -> google.protobuf.Timestamp - 81, // 78: google.spanner.executor.v1.UpdateCloudBackupAction.expire_time:type_name -> google.protobuf.Timestamp - 81, // 79: google.spanner.executor.v1.StartBatchTransactionAction.batch_txn_time:type_name -> google.protobuf.Timestamp - 5, // 80: google.spanner.executor.v1.GenerateDbPartitionsForReadAction.read:type_name -> google.spanner.executor.v1.ReadAction - 18, // 81: google.spanner.executor.v1.GenerateDbPartitionsForReadAction.table:type_name -> google.spanner.executor.v1.TableMetadata - 6, // 82: google.spanner.executor.v1.GenerateDbPartitionsForQueryAction.query:type_name -> google.spanner.executor.v1.QueryAction - 54, // 83: google.spanner.executor.v1.ExecutePartitionAction.partition:type_name -> google.spanner.executor.v1.BatchPartition - 81, // 84: google.spanner.executor.v1.ExecuteChangeStreamQuery.start_time:type_name -> google.protobuf.Timestamp - 81, // 85: google.spanner.executor.v1.ExecuteChangeStreamQuery.end_time:type_name -> google.protobuf.Timestamp - 85, // 86: google.spanner.executor.v1.SpannerActionOutcome.status:type_name -> google.rpc.Status - 81, // 87: google.spanner.executor.v1.SpannerActionOutcome.commit_time:type_name -> google.protobuf.Timestamp - 64, // 88: google.spanner.executor.v1.SpannerActionOutcome.read_result:type_name -> google.spanner.executor.v1.ReadResult - 65, // 89: google.spanner.executor.v1.SpannerActionOutcome.query_result:type_name -> google.spanner.executor.v1.QueryResult - 54, // 90: google.spanner.executor.v1.SpannerActionOutcome.db_partition:type_name -> google.spanner.executor.v1.BatchPartition - 58, // 91: google.spanner.executor.v1.SpannerActionOutcome.admin_result:type_name -> google.spanner.executor.v1.AdminResult - 66, // 92: google.spanner.executor.v1.SpannerActionOutcome.change_stream_records:type_name -> google.spanner.executor.v1.ChangeStreamRecord - 59, // 93: google.spanner.executor.v1.AdminResult.backup_response:type_name -> google.spanner.executor.v1.CloudBackupResponse - 60, // 94: google.spanner.executor.v1.AdminResult.operation_response:type_name -> google.spanner.executor.v1.OperationResponse - 63, // 95: google.spanner.executor.v1.AdminResult.database_response:type_name -> google.spanner.executor.v1.CloudDatabaseResponse - 61, // 96: google.spanner.executor.v1.AdminResult.instance_response:type_name -> google.spanner.executor.v1.CloudInstanceResponse - 62, // 97: google.spanner.executor.v1.AdminResult.instance_config_response:type_name -> google.spanner.executor.v1.CloudInstanceConfigResponse - 86, // 98: google.spanner.executor.v1.CloudBackupResponse.listed_backups:type_name -> google.spanner.admin.database.v1.Backup - 87, // 99: google.spanner.executor.v1.CloudBackupResponse.listed_backup_operations:type_name -> google.longrunning.Operation - 86, // 100: google.spanner.executor.v1.CloudBackupResponse.backup:type_name -> google.spanner.admin.database.v1.Backup - 87, // 101: google.spanner.executor.v1.OperationResponse.listed_operations:type_name -> google.longrunning.Operation - 87, // 102: google.spanner.executor.v1.OperationResponse.operation:type_name -> google.longrunning.Operation - 88, // 103: google.spanner.executor.v1.CloudInstanceResponse.listed_instances:type_name -> google.spanner.admin.instance.v1.Instance - 88, // 104: google.spanner.executor.v1.CloudInstanceResponse.instance:type_name -> google.spanner.admin.instance.v1.Instance - 89, // 105: google.spanner.executor.v1.CloudInstanceConfigResponse.listed_instance_configs:type_name -> google.spanner.admin.instance.v1.InstanceConfig - 89, // 106: google.spanner.executor.v1.CloudInstanceConfigResponse.instance_config:type_name -> google.spanner.admin.instance.v1.InstanceConfig - 90, // 107: google.spanner.executor.v1.CloudDatabaseResponse.listed_databases:type_name -> google.spanner.admin.database.v1.Database - 87, // 108: google.spanner.executor.v1.CloudDatabaseResponse.listed_database_operations:type_name -> google.longrunning.Operation - 90, // 109: google.spanner.executor.v1.CloudDatabaseResponse.database:type_name -> google.spanner.admin.database.v1.Database - 12, // 110: google.spanner.executor.v1.ReadResult.row:type_name -> google.spanner.executor.v1.ValueList - 91, // 111: google.spanner.executor.v1.ReadResult.row_type:type_name -> google.spanner.v1.StructType - 12, // 112: google.spanner.executor.v1.QueryResult.row:type_name -> google.spanner.executor.v1.ValueList - 91, // 113: google.spanner.executor.v1.QueryResult.row_type:type_name -> google.spanner.v1.StructType - 67, // 114: google.spanner.executor.v1.ChangeStreamRecord.data_change:type_name -> google.spanner.executor.v1.DataChangeRecord - 68, // 115: google.spanner.executor.v1.ChangeStreamRecord.child_partition:type_name -> google.spanner.executor.v1.ChildPartitionsRecord - 69, // 116: google.spanner.executor.v1.ChangeStreamRecord.heartbeat:type_name -> google.spanner.executor.v1.HeartbeatRecord - 81, // 117: google.spanner.executor.v1.DataChangeRecord.commit_time:type_name -> google.protobuf.Timestamp - 78, // 118: google.spanner.executor.v1.DataChangeRecord.column_types:type_name -> google.spanner.executor.v1.DataChangeRecord.ColumnType - 79, // 119: google.spanner.executor.v1.DataChangeRecord.mods:type_name -> google.spanner.executor.v1.DataChangeRecord.Mod - 81, // 120: google.spanner.executor.v1.ChildPartitionsRecord.start_time:type_name -> google.protobuf.Timestamp - 80, // 121: google.spanner.executor.v1.ChildPartitionsRecord.child_partitions:type_name -> google.spanner.executor.v1.ChildPartitionsRecord.ChildPartition - 81, // 122: google.spanner.executor.v1.HeartbeatRecord.heartbeat_time:type_name -> google.protobuf.Timestamp - 82, // 123: google.spanner.executor.v1.QueryAction.Parameter.type:type_name -> google.spanner.v1.Type - 9, // 124: google.spanner.executor.v1.QueryAction.Parameter.value:type_name -> google.spanner.executor.v1.Value - 82, // 125: google.spanner.executor.v1.MutationAction.InsertArgs.type:type_name -> google.spanner.v1.Type - 12, // 126: google.spanner.executor.v1.MutationAction.InsertArgs.values:type_name -> google.spanner.executor.v1.ValueList - 82, // 127: google.spanner.executor.v1.MutationAction.UpdateArgs.type:type_name -> google.spanner.v1.Type - 12, // 128: google.spanner.executor.v1.MutationAction.UpdateArgs.values:type_name -> google.spanner.executor.v1.ValueList - 71, // 129: google.spanner.executor.v1.MutationAction.Mod.insert:type_name -> google.spanner.executor.v1.MutationAction.InsertArgs - 72, // 130: google.spanner.executor.v1.MutationAction.Mod.update:type_name -> google.spanner.executor.v1.MutationAction.UpdateArgs - 71, // 131: google.spanner.executor.v1.MutationAction.Mod.insert_or_update:type_name -> google.spanner.executor.v1.MutationAction.InsertArgs - 71, // 132: google.spanner.executor.v1.MutationAction.Mod.replace:type_name -> google.spanner.executor.v1.MutationAction.InsertArgs - 11, // 133: google.spanner.executor.v1.MutationAction.Mod.delete_keys:type_name -> google.spanner.executor.v1.KeySet - 92, // 134: google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions.rpc_priority:type_name -> google.spanner.v1.RequestOptions.Priority - 2, // 135: google.spanner.executor.v1.SpannerExecutorProxy.ExecuteActionAsync:input_type -> google.spanner.executor.v1.SpannerAsyncActionRequest - 3, // 136: google.spanner.executor.v1.SpannerExecutorProxy.ExecuteActionAsync:output_type -> google.spanner.executor.v1.SpannerAsyncActionResponse - 136, // [136:137] is the sub-list for method output_type - 135, // [135:136] is the sub-list for method input_type - 135, // [135:135] is the sub-list for extension type_name - 135, // [135:135] is the sub-list for extension extendee - 0, // [0:135] is the sub-list for field type_name -} - -func init() { file_cloud_executor_proto_init() } -func file_cloud_executor_proto_init() { - if File_cloud_executor_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_cloud_executor_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SpannerAsyncActionRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SpannerAsyncActionResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SpannerAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DmlAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchDmlAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Value); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeySet); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValueList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MutationAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteMutationsAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PartitionedUpdateAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartTransactionAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Concurrency); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TableMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ColumnMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionExecutionOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FinishTransactionAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AdminAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateUserInstanceConfigAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateUserInstanceConfigAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCloudInstanceConfigAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteUserInstanceConfigAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCloudInstanceConfigsAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCloudInstanceAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCloudInstanceAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteCloudInstanceAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCloudDatabaseAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCloudDatabaseDdlAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCloudDatabaseAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DropCloudDatabaseAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCloudDatabasesAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCloudInstancesAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCloudInstanceAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCloudDatabaseOperationsAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RestoreCloudDatabaseAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCloudDatabaseAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCloudBackupAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CopyCloudBackupAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCloudBackupAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCloudBackupAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteCloudBackupAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCloudBackupsAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCloudBackupOperationsAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetOperationAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CancelOperationAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartBatchTransactionAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CloseBatchTransactionAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateDbPartitionsForReadAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateDbPartitionsForQueryAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchPartition); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecutePartitionAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecuteChangeStreamQuery); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SpannerActionOutcome); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AdminResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CloudBackupResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OperationResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CloudInstanceResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CloudInstanceConfigResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CloudDatabaseResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangeStreamRecord); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataChangeRecord); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChildPartitionsRecord); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HeartbeatRecord); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QueryAction_Parameter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MutationAction_InsertArgs); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MutationAction_UpdateArgs); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MutationAction_Mod); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PartitionedUpdateAction_ExecutePartitionedUpdateOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataChangeRecord_ColumnType); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataChangeRecord_Mod); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cloud_executor_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChildPartitionsRecord_ChildPartition); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_cloud_executor_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*SpannerAction_Start)(nil), - (*SpannerAction_Finish)(nil), - (*SpannerAction_Read)(nil), - (*SpannerAction_Query)(nil), - (*SpannerAction_Mutation)(nil), - (*SpannerAction_Dml)(nil), - (*SpannerAction_BatchDml)(nil), - (*SpannerAction_Write)(nil), - (*SpannerAction_PartitionedUpdate)(nil), - (*SpannerAction_Admin)(nil), - (*SpannerAction_StartBatchTxn)(nil), - (*SpannerAction_CloseBatchTxn)(nil), - (*SpannerAction_GenerateDbPartitionsRead)(nil), - (*SpannerAction_GenerateDbPartitionsQuery)(nil), - (*SpannerAction_ExecutePartition)(nil), - (*SpannerAction_ExecuteChangeStreamQuery)(nil), - } - file_cloud_executor_proto_msgTypes[3].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[5].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[7].OneofWrappers = []interface{}{ - (*Value_IsNull)(nil), - (*Value_IntValue)(nil), - (*Value_BoolValue)(nil), - (*Value_DoubleValue)(nil), - (*Value_BytesValue)(nil), - (*Value_StringValue)(nil), - (*Value_StructValue)(nil), - (*Value_TimestampValue)(nil), - (*Value_DateDaysValue)(nil), - (*Value_IsCommitTimestamp)(nil), - (*Value_ArrayValue)(nil), - } - file_cloud_executor_proto_msgTypes[8].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[13].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[14].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[15].OneofWrappers = []interface{}{ - (*Concurrency_StalenessSeconds)(nil), - (*Concurrency_MinReadTimestampMicros)(nil), - (*Concurrency_MaxStalenessSeconds)(nil), - (*Concurrency_ExactTimestampMicros)(nil), - (*Concurrency_Strong)(nil), - (*Concurrency_Batch)(nil), - } - file_cloud_executor_proto_msgTypes[20].OneofWrappers = []interface{}{ - (*AdminAction_CreateUserInstanceConfig)(nil), - (*AdminAction_UpdateUserInstanceConfig)(nil), - (*AdminAction_DeleteUserInstanceConfig)(nil), - (*AdminAction_GetCloudInstanceConfig)(nil), - (*AdminAction_ListInstanceConfigs)(nil), - (*AdminAction_CreateCloudInstance)(nil), - (*AdminAction_UpdateCloudInstance)(nil), - (*AdminAction_DeleteCloudInstance)(nil), - (*AdminAction_ListCloudInstances)(nil), - (*AdminAction_GetCloudInstance)(nil), - (*AdminAction_CreateCloudDatabase)(nil), - (*AdminAction_UpdateCloudDatabaseDdl)(nil), - (*AdminAction_UpdateCloudDatabase)(nil), - (*AdminAction_DropCloudDatabase)(nil), - (*AdminAction_ListCloudDatabases)(nil), - (*AdminAction_ListCloudDatabaseOperations)(nil), - (*AdminAction_RestoreCloudDatabase)(nil), - (*AdminAction_GetCloudDatabase)(nil), - (*AdminAction_CreateCloudBackup)(nil), - (*AdminAction_CopyCloudBackup)(nil), - (*AdminAction_GetCloudBackup)(nil), - (*AdminAction_UpdateCloudBackup)(nil), - (*AdminAction_DeleteCloudBackup)(nil), - (*AdminAction_ListCloudBackups)(nil), - (*AdminAction_ListCloudBackupOperations)(nil), - (*AdminAction_GetOperation)(nil), - (*AdminAction_CancelOperation)(nil), - } - file_cloud_executor_proto_msgTypes[22].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[25].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[26].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[27].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[29].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[34].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[39].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[48].OneofWrappers = []interface{}{ - (*StartBatchTransactionAction_BatchTxnTime)(nil), - (*StartBatchTransactionAction_Tid)(nil), - } - file_cloud_executor_proto_msgTypes[50].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[51].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[52].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[54].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[55].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[62].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[63].OneofWrappers = []interface{}{} - file_cloud_executor_proto_msgTypes[64].OneofWrappers = []interface{}{ - (*ChangeStreamRecord_DataChange)(nil), - (*ChangeStreamRecord_ChildPartition)(nil), - (*ChangeStreamRecord_Heartbeat)(nil), - } - file_cloud_executor_proto_msgTypes[72].OneofWrappers = []interface{}{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_cloud_executor_proto_rawDesc, - NumEnums: 2, - NumMessages: 79, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_cloud_executor_proto_goTypes, - DependencyIndexes: file_cloud_executor_proto_depIdxs, - EnumInfos: file_cloud_executor_proto_enumTypes, - MessageInfos: file_cloud_executor_proto_msgTypes, - }.Build() - File_cloud_executor_proto = out.File - file_cloud_executor_proto_rawDesc = nil - file_cloud_executor_proto_goTypes = nil - file_cloud_executor_proto_depIdxs = nil -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConnInterface - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion6 - -// SpannerExecutorProxyClient is the client API for SpannerExecutorProxy service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type SpannerExecutorProxyClient interface { - // ExecuteActionAsync is a streaming call that starts executing a new Spanner - // action. - // - // For each request, the server will reply with one or more responses, but - // only the last response will contain status in the outcome. - // - // Responses can be matched to requests by action_id. It is allowed to have - // multiple actions in flight--in that case, actions are be executed in - // parallel. - ExecuteActionAsync(ctx context.Context, opts ...grpc.CallOption) (SpannerExecutorProxy_ExecuteActionAsyncClient, error) -} - -type spannerExecutorProxyClient struct { - cc grpc.ClientConnInterface -} - -func NewSpannerExecutorProxyClient(cc grpc.ClientConnInterface) SpannerExecutorProxyClient { - return &spannerExecutorProxyClient{cc} -} - -func (c *spannerExecutorProxyClient) ExecuteActionAsync(ctx context.Context, opts ...grpc.CallOption) (SpannerExecutorProxy_ExecuteActionAsyncClient, error) { - stream, err := c.cc.NewStream(ctx, &_SpannerExecutorProxy_serviceDesc.Streams[0], "/google.spanner.executor.v1.SpannerExecutorProxy/ExecuteActionAsync", opts...) - if err != nil { - return nil, err - } - x := &spannerExecutorProxyExecuteActionAsyncClient{stream} - return x, nil -} - -type SpannerExecutorProxy_ExecuteActionAsyncClient interface { - Send(*SpannerAsyncActionRequest) error - Recv() (*SpannerAsyncActionResponse, error) - grpc.ClientStream -} - -type spannerExecutorProxyExecuteActionAsyncClient struct { - grpc.ClientStream -} - -func (x *spannerExecutorProxyExecuteActionAsyncClient) Send(m *SpannerAsyncActionRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *spannerExecutorProxyExecuteActionAsyncClient) Recv() (*SpannerAsyncActionResponse, error) { - m := new(SpannerAsyncActionResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// SpannerExecutorProxyServer is the server API for SpannerExecutorProxy service. -type SpannerExecutorProxyServer interface { - // ExecuteActionAsync is a streaming call that starts executing a new Spanner - // action. - // - // For each request, the server will reply with one or more responses, but - // only the last response will contain status in the outcome. - // - // Responses can be matched to requests by action_id. It is allowed to have - // multiple actions in flight--in that case, actions are be executed in - // parallel. - ExecuteActionAsync(SpannerExecutorProxy_ExecuteActionAsyncServer) error -} - -// UnimplementedSpannerExecutorProxyServer can be embedded to have forward compatible implementations. -type UnimplementedSpannerExecutorProxyServer struct { -} - -func (*UnimplementedSpannerExecutorProxyServer) ExecuteActionAsync(SpannerExecutorProxy_ExecuteActionAsyncServer) error { - return status1.Errorf(codes.Unimplemented, "method ExecuteActionAsync not implemented") -} - -func RegisterSpannerExecutorProxyServer(s *grpc.Server, srv SpannerExecutorProxyServer) { - s.RegisterService(&_SpannerExecutorProxy_serviceDesc, srv) -} - -func _SpannerExecutorProxy_ExecuteActionAsync_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(SpannerExecutorProxyServer).ExecuteActionAsync(&spannerExecutorProxyExecuteActionAsyncServer{stream}) -} - -type SpannerExecutorProxy_ExecuteActionAsyncServer interface { - Send(*SpannerAsyncActionResponse) error - Recv() (*SpannerAsyncActionRequest, error) - grpc.ServerStream -} - -type spannerExecutorProxyExecuteActionAsyncServer struct { - grpc.ServerStream -} - -func (x *spannerExecutorProxyExecuteActionAsyncServer) Send(m *SpannerAsyncActionResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *spannerExecutorProxyExecuteActionAsyncServer) Recv() (*SpannerAsyncActionRequest, error) { - m := new(SpannerAsyncActionRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -var _SpannerExecutorProxy_serviceDesc = grpc.ServiceDesc{ - ServiceName: "google.spanner.executor.v1.SpannerExecutorProxy", - HandlerType: (*SpannerExecutorProxyServer)(nil), - Methods: []grpc.MethodDesc{}, - Streams: []grpc.StreamDesc{ - { - StreamName: "ExecuteActionAsync", - Handler: _SpannerExecutorProxy_ExecuteActionAsync_Handler, - ServerStreams: true, - ClientStreams: true, - }, - }, - Metadata: "cloud_executor.proto", -} diff --git a/spanner/cloudexecutor/proto/cloud_executor.proto b/spanner/cloudexecutor/proto/cloud_executor.proto deleted file mode 100644 index f5d66fada0c7..000000000000 --- a/spanner/cloudexecutor/proto/cloud_executor.proto +++ /dev/null @@ -1,1455 +0,0 @@ -// Copyright 2023 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.spanner.executor.v1; - -import "google/api/client.proto"; -import "google/api/field_behavior.proto"; -import "google/longrunning/operations.proto"; -import "google/protobuf/timestamp.proto"; -import "google/rpc/status.proto"; -import "google/spanner/admin/database/v1/backup.proto"; -import "google/spanner/admin/database/v1/common.proto"; -import "google/spanner/admin/database/v1/spanner_database_admin.proto"; -import "google/spanner/admin/instance/v1/spanner_instance_admin.proto"; -import "google/spanner/v1/spanner.proto"; -import "google/spanner/v1/type.proto"; - -option go_package = "cloud.google.com/go/spanner/executor/apiv1/executorpb;executorpb"; -option java_multiple_files = true; -option java_outer_classname = "CloudExecutorProto"; -option java_package = "com.google.spanner.executor.v1"; - -// Service that executes SpannerActions asynchronously. -service SpannerExecutorProxy { - option (google.api.default_host) = "spanner-cloud-executor.googleapis.com"; - - // ExecuteActionAsync is a streaming call that starts executing a new Spanner - // action. - // - // For each request, the server will reply with one or more responses, but - // only the last response will contain status in the outcome. - // - // Responses can be matched to requests by action_id. It is allowed to have - // multiple actions in flight--in that case, actions are be executed in - // parallel. - rpc ExecuteActionAsync(stream SpannerAsyncActionRequest) - returns (stream SpannerAsyncActionResponse) {} -} - -// Request to executor service that start a new Spanner action. -message SpannerAsyncActionRequest { - // Action id to uniquely identify this action request. - int32 action_id = 1; - - // The actual SpannerAction to perform. - SpannerAction action = 2; -} - -// Response from executor service. -message SpannerAsyncActionResponse { - // Action id corresponds to the request. - int32 action_id = 1; - - // If action results are split into multiple responses, only the last response - // can and should contain status. - SpannerActionOutcome outcome = 2; -} - -// SpannerAction defines a primitive action that can be performed against -// Spanner, such as begin or commit a transaction, or perform a read or -// mutation. -message SpannerAction { - // Database against which to perform action. - // In a context where a series of actions take place, an action may omit - // database path if it applies to the same database as the previous action. - string database_path = 1; - - // Action represents a spanner action kind, there will only be one action kind - // per SpannerAction. - oneof action { - // Action to start a transaction. - StartTransactionAction start = 10; - - // Action to finish a transaction. - FinishTransactionAction finish = 11; - - // Action to do a normal read. - ReadAction read = 20; - - // Action to do a query. - QueryAction query = 21; - - // Action to buffer a mutation. - MutationAction mutation = 22; - - // Action to a DML. - DmlAction dml = 23; - - // Action to a batch DML. - BatchDmlAction batch_dml = 24; - - // Action to write a mutation. - WriteMutationsAction write = 25; - - // Action to a partitioned update. - PartitionedUpdateAction partitioned_update = 27; - - // Action that contains any administrative operation, like database, - // instance manipulation. - AdminAction admin = 30; - - // Action to start a batch transaction. - StartBatchTransactionAction start_batch_txn = 40; - - // Action to close a batch transaction. - CloseBatchTransactionAction close_batch_txn = 41; - - // Action to generate database partitions for batch read. - GenerateDbPartitionsForReadAction generate_db_partitions_read = 42; - - // Action to generate database partitions for batch query. - GenerateDbPartitionsForQueryAction generate_db_partitions_query = 43; - - // Action to execute batch actions on generated partitions. - ExecutePartitionAction execute_partition = 44; - - // Action to execute change stream query. - ExecuteChangeStreamQuery execute_change_stream_query = 50; - } -} - -// A single read request. -message ReadAction { - // The table to read at. - string table = 1; - - // The index to read at if it's an index read. - optional string index = 2; - - // List of columns must begin with the key columns used for the read. - repeated string column = 3; - - // Keys for performing this read. - KeySet keys = 4; - - // Limit on number of rows to read. If set, must be positive. - int32 limit = 5; -} - -// A SQL query request. -message QueryAction { - // Parameter that bind to placeholders in the SQL string - message Parameter { - // Name of the parameter (with no leading @). - string name = 1; - - // Type of the parameter. - google.spanner.v1.Type type = 2; - - // Value of the parameter. - Value value = 3; - } - - // The SQL string. - string sql = 1; - - // Parameters for the SQL string. - repeated Parameter params = 2; -} - -// A single DML statement. -message DmlAction { - // DML statement. - QueryAction update = 1; - - // Whether to autocommit the transaction after executing the DML statement, - // if the Executor supports autocommit. - optional bool autocommit_if_supported = 2; -} - -// Batch of DML statements invoked using batched execution. -message BatchDmlAction { - // DML statements. - repeated QueryAction updates = 1; -} - -// Value represents a single value that can be read or written to/from -// Spanner. -message Value { - // Exactly one of the following fields will be present. - oneof value_type { - // If is_null is set, then this value is null. - bool is_null = 1; - - // Int type value. It's used for all integer number types, like int32 and - // int64. - int64 int_value = 2; - - // Bool type value. - bool bool_value = 3; - - // Double type value. It's used for all float point types, like float and - // double. - double double_value = 4; - - // Bytes type value, stored in CORD. It's also used for PROTO type value. - bytes bytes_value = 5; - - // String type value, stored in CORD. - string string_value = 6; - - // Struct type value. It contains a ValueList representing the values in - // this struct. - ValueList struct_value = 7; - - // Timestamp type value. - google.protobuf.Timestamp timestamp_value = 8; - - // Date type value. Date is specified as a number of days since Unix epoch. - int32 date_days_value = 9; - - // If set, holds the sentinel value for the transaction CommitTimestamp. - bool is_commit_timestamp = 10; - - // Array type value. The underlying Valuelist should have values that have - // the same type. - ValueList array_value = 11; - } - - // Type of array element. Only set if value is an array. - optional google.spanner.v1.Type array_type = 12; -} - -// KeyRange represents a range of rows in a table or index. -// -// A range has a start key and an end key. These keys can be open or -// closed, indicating if the range includes rows with that key. -// -// Keys are represented by "ValueList", where the ith value in the list -// corresponds to the ith component of the table or index primary key. -message KeyRange { - // Type controls whether "start" and "limit" are open or closed. By default, - // "start" is closed, and "limit" is open. - enum Type { - // "TYPE_UNSPECIFIED" is equivalent to "CLOSED_OPEN". - TYPE_UNSPECIFIED = 0; - - // [start,limit] - CLOSED_CLOSED = 1; - - // [start,limit) - CLOSED_OPEN = 2; - - // (start,limit] - OPEN_CLOSED = 3; - - // (start,limit) - OPEN_OPEN = 4; - } - - // "start" and "limit" must have the same number of key parts, - // though they may name only a prefix of the table or index key. - // The start key of this KeyRange. - ValueList start = 1; - - // The end key of this KeyRange. - ValueList limit = 2; - - // "start" and "limit" type for this KeyRange. - optional Type type = 3; -} - -// KeySet defines a collection of Spanner keys and/or key ranges. All -// the keys are expected to be in the same table. The keys need not be -// sorted in any particular way. -message KeySet { - // A list of specific keys. Entries in "keys" should have exactly as - // many elements as there are columns in the primary or index key - // with which this "KeySet" is used. - repeated ValueList point = 1; - - // A list of key ranges. - repeated KeyRange range = 2; - - // For convenience "all" can be set to "true" to indicate that this - // "KeySet" matches all keys in the table or index. Note that any keys - // specified in "keys" or "ranges" are only yielded once. - bool all = 3; -} - -// List of values. -message ValueList { - // Values contained in this ValueList. - repeated Value value = 1; -} - -// A single mutation request. -message MutationAction { - // Arguments to Insert, InsertOrUpdate, and Replace operations. - message InsertArgs { - // The names of the columns to be written. - repeated string column = 1; - - // Type information for the "values" entries below. - repeated google.spanner.v1.Type type = 2; - - // The values to be written. - repeated ValueList values = 3; - } - - // Arguments to Update. - message UpdateArgs { - // The columns to be updated. Identical to InsertArgs.column. - repeated string column = 1; - - // Type information for "values". Identical to InsertArgs.type. - repeated google.spanner.v1.Type type = 2; - - // The values to be updated. Identical to InsertArgs.values. - repeated ValueList values = 3; - } - - // Mod represents the write action that will be perform to a table. Each mod - // will specify exactly one action, from insert, update, insert_or_update, - // replace and delete. - message Mod { - // The table to write. - string table = 1; - - // Exactly one of the remaining elements may be present. - // Insert new rows into "table". - InsertArgs insert = 2; - - // Update columns stored in existing rows of "table". - UpdateArgs update = 3; - - // Insert or update existing rows of "table". - InsertArgs insert_or_update = 4; - - // Replace existing rows of "table". - InsertArgs replace = 5; - - // Delete rows from "table". - KeySet delete_keys = 6; - } - - // Mods that contained in this mutation. - repeated Mod mod = 1; -} - -// WriteMutationAction defines an action of flushing the mutation so they -// are visible to subsequent operations in the transaction. -message WriteMutationsAction { - // The mutation to write. - MutationAction mutation = 1; -} - -// PartitionedUpdateAction defines an action to execute a partitioned DML -// which runs different partitions in parallel. -message PartitionedUpdateAction { - message ExecutePartitionedUpdateOptions { - // RPC Priority - optional google.spanner.v1.RequestOptions.Priority rpc_priority = 1; - - // Transaction tag - optional string tag = 2; - } - - // Options for partitioned update. - optional ExecutePartitionedUpdateOptions options = 1; - - // Partitioned dml query. - QueryAction update = 2; -} - -// StartTransactionAction defines an action of initializing a transaction. -message StartTransactionAction { - // Concurrency is for read-only transactions and must be omitted for - // read-write transactions. - optional Concurrency concurrency = 1; - - // Metadata about tables and columns that will be involved in this - // transaction. It is to convert values of key parts correctly. - repeated TableMetadata table = 2; - - // Transaction_seed contains workid and op pair for this transaction, used for - // testing. - string transaction_seed = 3; - - // Execution options (e.g., whether transaction is opaque, optimistic). - optional TransactionExecutionOptions execution_options = 4; -} - -// Concurrency for read-only transactions. -message Concurrency { - // Concurrency mode set for read-only transactions, exactly one mode below - // should be set. - oneof concurrency_mode { - // Indicates a read at a consistent timestamp that is specified relative to - // now. That is, if the caller has specified an exact staleness of s - // seconds, we will read at now - s. - double staleness_seconds = 1; - - // Indicates a boundedly stale read that reads at a timestamp >= T. - int64 min_read_timestamp_micros = 2; - - // Indicates a boundedly stale read that is at most N seconds stale. - double max_staleness_seconds = 3; - - // Indicates a read at a consistent timestamp. - int64 exact_timestamp_micros = 4; - - // Indicates a strong read, must only be set to true, or unset. - bool strong = 5; - - // Indicates a batch read, must only be set to true, or unset. - bool batch = 6; - } - - // True if exact_timestamp_micros is set, and the chosen timestamp is that of - // a snapshot epoch. - bool snapshot_epoch_read = 7; - - // If set, this is a snapshot epoch read constrained to read only the - // specified log scope root table, and its children. Will not be set for full - // database epochs. - string snapshot_epoch_root_table = 8; - - // Set only when batch is true. - int64 batch_read_timestamp_micros = 9; -} - -// TableMetadata contains metadata of a single table. -message TableMetadata { - // Table name. - string name = 1; - - // Columns, in the same order as in the schema. - repeated ColumnMetadata column = 2; - - // Keys, in order. Column name is currently not populated. - repeated ColumnMetadata key_column = 3; -} - -// ColumnMetadata represents metadata of a single column. -message ColumnMetadata { - // Column name. - string name = 1; - - // Column type. - google.spanner.v1.Type type = 2; -} - -// Options for executing the transaction. -message TransactionExecutionOptions { - // Whether optimistic concurrency should be used to execute this transaction. - bool optimistic = 1; -} - -// FinishTransactionAction defines an action of finishing a transaction. -message FinishTransactionAction { - // Mode indicates how the transaction should be finished. - enum Mode { - // "MODE_UNSPECIFIED" is equivalent to "COMMIT". - MODE_UNSPECIFIED = 0; - - // Commit the transaction. - COMMIT = 1; - - // Drop the transaction without committing it. - ABANDON = 2; - } - - // Defines how exactly the transaction should be completed, e.g. with - // commit or abortion. - Mode mode = 1; -} - -// AdminAction defines all the cloud spanner admin actions, including -// instance/database admin ops, backup ops and operation actions. -message AdminAction { - // Exactly one of the actions below will be performed in AdminAction. - oneof action { - // Action that creates a user instance config. - CreateUserInstanceConfigAction create_user_instance_config = 1; - - // Action that updates a user instance config. - UpdateUserInstanceConfigAction update_user_instance_config = 2; - - // Action that deletes a user instance config. - DeleteUserInstanceConfigAction delete_user_instance_config = 3; - - // Action that gets a user instance config. - GetCloudInstanceConfigAction get_cloud_instance_config = 4; - - // Action that lists user instance configs. - ListCloudInstanceConfigsAction list_instance_configs = 5; - - // Action that creates a Cloud Spanner instance. - CreateCloudInstanceAction create_cloud_instance = 6; - - // Action that updates a Cloud Spanner instance. - UpdateCloudInstanceAction update_cloud_instance = 7; - - // Action that deletes a Cloud Spanner instance. - DeleteCloudInstanceAction delete_cloud_instance = 8; - - // Action that lists Cloud Spanner instances. - ListCloudInstancesAction list_cloud_instances = 9; - - // Action that retrieves a Cloud Spanner instance. - GetCloudInstanceAction get_cloud_instance = 10; - - // Action that creates a Cloud Spanner database. - CreateCloudDatabaseAction create_cloud_database = 11; - - // Action that updates the schema of a Cloud Spanner database. - UpdateCloudDatabaseDdlAction update_cloud_database_ddl = 12; - - // Action that updates the schema of a Cloud Spanner database. - UpdateCloudDatabaseAction update_cloud_database = 27; - - // Action that drops a Cloud Spanner database. - DropCloudDatabaseAction drop_cloud_database = 13; - - // Action that lists Cloud Spanner databases. - ListCloudDatabasesAction list_cloud_databases = 14; - - // Action that lists Cloud Spanner database operations. - ListCloudDatabaseOperationsAction list_cloud_database_operations = 15; - - // Action that restores a Cloud Spanner database from a backup. - RestoreCloudDatabaseAction restore_cloud_database = 16; - - // Action that gets a Cloud Spanner database. - GetCloudDatabaseAction get_cloud_database = 17; - - // Action that creates a Cloud Spanner database backup. - CreateCloudBackupAction create_cloud_backup = 18; - - // Action that copies a Cloud Spanner database backup. - CopyCloudBackupAction copy_cloud_backup = 19; - - // Action that gets a Cloud Spanner database backup. - GetCloudBackupAction get_cloud_backup = 20; - - // Action that updates a Cloud Spanner database backup. - UpdateCloudBackupAction update_cloud_backup = 21; - - // Action that deletes a Cloud Spanner database backup. - DeleteCloudBackupAction delete_cloud_backup = 22; - - // Action that lists Cloud Spanner database backups. - ListCloudBackupsAction list_cloud_backups = 23; - - // Action that lists Cloud Spanner database backup operations. - ListCloudBackupOperationsAction list_cloud_backup_operations = 24; - - // Action that gets an operation. - GetOperationAction get_operation = 25; - - // Action that cancels an operation. - CancelOperationAction cancel_operation = 26; - } -} - -// Action that creates a user instance config. -message CreateUserInstanceConfigAction { - // User instance config ID (not path), e.g. "custom-config". - string user_config_id = 1; - - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 2; - - // Base config ID, e.g. "test-config". - string base_config_id = 3; - - // Replicas that should be included in the user config. - repeated google.spanner.admin.instance.v1.ReplicaInfo replicas = 4; -} - -// Action that updates a user instance config. -message UpdateUserInstanceConfigAction { - // User instance config ID (not path), e.g. "custom-config". - string user_config_id = 1; - - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 2; - - // The descriptive name for this instance config as it appears in UIs. - optional string display_name = 3; - - // labels. - map labels = 4; -} - -// Action that gets a user instance config. -message GetCloudInstanceConfigAction { - // Instance config ID (not path), e.g. "custom-config". - string instance_config_id = 1; - - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 2; -} - -// Action that deletes a user instance configs. -message DeleteUserInstanceConfigAction { - // User instance config ID (not path), e.g. "custom-config". - string user_config_id = 1; - - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 2; -} - -// Action that lists user instance configs. -message ListCloudInstanceConfigsAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Number of instance configs to be returned in the response. If 0 or - // less, defaults to the server's maximum allowed page size. - optional int32 page_size = 2; - - // If non-empty, "page_token" should contain a next_page_token - // from a previous ListInstanceConfigsResponse to the same "parent". - optional string page_token = 3; -} - -// Action that creates a Cloud Spanner instance. -message CreateCloudInstanceAction { - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 1; - - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 2; - - // Instance config ID, e.g. "test-config". - string instance_config_id = 3; - - // Number of nodes (processing_units should not be set or set to 0 if used). - optional int32 node_count = 4; - - // Number of processing units (node_count should be set to 0 if used). - optional int32 processing_units = 6; - - // labels. - map labels = 5; -} - -// Action that updates a Cloud Spanner instance. -message UpdateCloudInstanceAction { - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 1; - - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 2; - - // The descriptive name for this instance as it appears in UIs. - // Must be unique per project and between 4 and 30 characters in length. - optional string display_name = 3; - - // The number of nodes allocated to this instance. At most one of either - // node_count or processing_units should be present in the message. - optional int32 node_count = 4; - - // The number of processing units allocated to this instance. At most one of - // processing_units or node_count should be present in the message. - optional int32 processing_units = 5; - - // labels. - map labels = 6; -} - -// Action that deletes a Cloud Spanner instance. -message DeleteCloudInstanceAction { - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 1; - - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 2; -} - -// Action that creates a Cloud Spanner database. -message CreateCloudDatabaseAction { - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 1; - - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 2; - - // Cloud database ID (not full path), e.g. "db0". - string database_id = 3; - - // SDL statements to apply to the new database. - repeated string sdl_statement = 4; - - // The KMS key used to encrypt the database to be created if the database - // should be CMEK protected. - google.spanner.admin.database.v1.EncryptionConfig encryption_config = 5; - - // Optional SQL dialect (GOOGLESQL or POSTGRESQL). Default: GOOGLESQL. - optional string dialect = 6; -} - -// Action that updates the schema of a Cloud Spanner database. -message UpdateCloudDatabaseDdlAction { - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 1; - - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 2; - - // Cloud database ID (not full path), e.g. "db0". - string database_id = 3; - - // SDL statements to apply to the database. - repeated string sdl_statement = 4; - - // Op ID can be used to track progress of the update. If set, it must be - // unique per database. If not set, Cloud Spanner will generate operation ID - // automatically. - string operation_id = 5; -} - -// Action that updates a Cloud Spanner database. -message UpdateCloudDatabaseAction { - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 1; - - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 2; - - // Cloud database name (not full path), e.g. "db0". - string database_name = 3; - - // Updated value of enable_drop_protection, this is the only field that has - // supported to be updated. - bool enable_drop_protection = 4; -} - -// Action that drops a Cloud Spanner database. -message DropCloudDatabaseAction { - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 1; - - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 2; - - // Cloud database ID (not full path), e.g. "db0". - string database_id = 3; -} - -// Action that lists Cloud Spanner databases. -message ListCloudDatabasesAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Cloud instance ID (not path) to list databases from, e.g. "test-instance". - string instance_id = 2; - - // Number of databases to be returned in the response. If 0 or - // less, defaults to the server's maximum allowed page size. - int32 page_size = 3; - - // If non-empty, "page_token" should contain a next_page_token - // from a previous ListDatabasesResponse to the same "parent" - // and with the same "filter". - string page_token = 4; -} - -// Action that lists Cloud Spanner databases. -message ListCloudInstancesAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // A filter expression that filters what operations are returned in the - // response. - // The expression must specify the field name, a comparison operator, - // and the value that you want to use for filtering. - // Refer spanner_instance_admin.proto.ListInstancesRequest for - // detail. - optional string filter = 2; - - // Number of instances to be returned in the response. If 0 or - // less, defaults to the server's maximum allowed page size. - optional int32 page_size = 3; - - // If non-empty, "page_token" should contain a next_page_token - // from a previous ListInstancesResponse to the same "parent" - // and with the same "filter". - optional string page_token = 4; -} - -// Action that retrieves a Cloud Spanner instance. -message GetCloudInstanceAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Cloud instance ID (not path) to retrieve the instance from, - // e.g. "test-instance". - string instance_id = 2; -} - -// Action that lists Cloud Spanner database operations. -message ListCloudDatabaseOperationsAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Cloud instance ID (not path) to list database operations from, - // e.g. "test-instance". - string instance_id = 2; - - // A filter expression that filters what operations are returned in the - // response. - // The expression must specify the field name, a comparison operator, - // and the value that you want to use for filtering. - // Refer spanner_database_admin.proto.ListDatabaseOperationsRequest for - // detail. - string filter = 3; - - // Number of databases to be returned in the response. If 0 or - // less, defaults to the server's maximum allowed page size. - int32 page_size = 4; - - // If non-empty, "page_token" should contain a next_page_token - // from a previous ListDatabaseOperationsResponse to the same "parent" - // and with the same "filter". - string page_token = 5; -} - -// Action that restores a Cloud Spanner database from a backup. -message RestoreCloudDatabaseAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Cloud instance ID (not path) containing the backup, e.g. "backup-instance". - string backup_instance_id = 2; - - // The id of the backup from which to restore, e.g. "test-backup". - string backup_id = 3; - - // Cloud instance ID (not path) containing the database, e.g. - // "database-instance". - string database_instance_id = 4; - - // The id of the database to create and restore to, e.g. "db0". Note that this - // database must not already exist. - string database_id = 5; -} - -// Action that gets a Cloud Spanner database. -message GetCloudDatabaseAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 2; - - // The id of the database to get, e.g. "db0". - string database_id = 3; -} - -// Action that creates a Cloud Spanner database backup. -message CreateCloudBackupAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 2; - - // The id of the backup to be created, e.g. "test-backup". - string backup_id = 3; - - // The id of the database from which this backup was - // created, e.g. "db0". Note that this needs to be in the - // same instance as the backup. - string database_id = 4; - - // Output only. The expiration time of the backup, which must be at least 6 - // hours and at most 366 days from the time the request is received. - google.protobuf.Timestamp expire_time = 5 - [(google.api.field_behavior) = OUTPUT_ONLY]; - - // The version time of the backup, which must be within the time range of - // [earliest_version_time, NOW], where earliest_version_time is retrieved by - // cloud spanner frontend API (See details: go/cs-pitr-lite-design). - optional google.protobuf.Timestamp version_time = 6; -} - -// Action that copies a Cloud Spanner database backup. -message CopyCloudBackupAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 2; - - // The id of the backup to be created, e.g. "test-backup". - string backup_id = 3; - - // The fully qualified uri of the source backup from which this - // backup was copied. eg. - // "projects//instances//backups/". - string source_backup = 4; - - // Output only. The expiration time of the backup, which must be at least 6 - // hours and at most 366 days from the time the request is received. - google.protobuf.Timestamp expire_time = 5 - [(google.api.field_behavior) = OUTPUT_ONLY]; -} - -// Action that gets a Cloud Spanner database backup. -message GetCloudBackupAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 2; - - // The id of the backup to get, e.g. "test-backup". - string backup_id = 3; -} - -// Action that updates a Cloud Spanner database backup. -message UpdateCloudBackupAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 2; - - // The id of the backup to update, e.g. "test-backup". - string backup_id = 3; - - // Output only. Updated value of expire_time, this is the only field - // that supported to be updated. - google.protobuf.Timestamp expire_time = 4 - [(google.api.field_behavior) = OUTPUT_ONLY]; -} - -// Action that deletes a Cloud Spanner database backup. -message DeleteCloudBackupAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Cloud instance ID (not path), e.g. "test-instance". - string instance_id = 2; - - // The id of the backup to delete, e.g. "test-backup". - string backup_id = 3; -} - -// Action that lists Cloud Spanner database backups. -message ListCloudBackupsAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Cloud instance ID (not path) to list backups from, e.g. "test-instance". - string instance_id = 2; - - // A filter expression that filters backups listed in the response. - // The expression must specify the field name, a comparison operator, - // and the value that you want to use for filtering. - // Refer backup.proto.ListBackupsRequest for detail. - string filter = 3; - - // Number of backups to be returned in the response. If 0 or - // less, defaults to the server's maximum allowed page size. - int32 page_size = 4; - - // If non-empty, "page_token" should contain a next_page_token - // from a previous ListBackupsResponse to the same "parent" - // and with the same "filter". - string page_token = 5; -} - -// Action that lists Cloud Spanner database backup operations. -message ListCloudBackupOperationsAction { - // Cloud project ID, e.g. "spanner-cloud-systest". - string project_id = 1; - - // Cloud instance ID (not path) to list backup operations from, - // e.g. "test-instance". - string instance_id = 2; - - // A filter expression that filters what operations are returned in the - // response. - // The expression must specify the field name, a comparison operator, - // and the value that you want to use for filtering. - // Refer backup.proto.ListBackupOperationsRequest for detail. - string filter = 3; - - // Number of backups to be returned in the response. If 0 or - // less, defaults to the server's maximum allowed page size. - int32 page_size = 4; - - // If non-empty, "page_token" should contain a next_page_token - // from a previous ListBackupOperationsResponse to the same "parent" - // and with the same "filter". - string page_token = 5; -} - -// Action that gets an operation. -message GetOperationAction { - // The name of the operation resource. - string operation = 1; -} - -// Action that cancels an operation. -message CancelOperationAction { - // The name of the operation resource to be cancelled. - string operation = 1; -} - -// Starts a batch read-only transaction in executor. Successful outcomes of this -// action will contain batch_txn_id--the identificator that can be used to start -// the same transaction in other Executors to parallelize partition processing. -// -// Example of a batch read flow: -// 1. Start batch transaction with a timestamp (StartBatchTransactionAction) -// 2. Generate database partitions for a read or query -// (GenerateDbPartitionsForReadAction/GenerateDbPartitionsForQueryAction) -// 3. Call ExecutePartitionAction for some or all partitions, process rows -// 4. Clean up the transaction (CloseBatchTransactionAction). -// -// More sophisticated example, with parallel processing: -// 1. Start batch transaction with a timestamp (StartBatchTransactionAction), -// note the returned BatchTransactionId -// 2. Generate database partitions for a read or query -// (GenerateDbPartitionsForReadAction/GenerateDbPartitionsForQueryAction) -// 3. Distribute the partitions over a pool of workers, along with the -// transaction ID. -// -// In each worker: -// 4-1. StartBatchTransactionAction with the given transaction ID -// 4-2. ExecutePartitionAction for each partition it got, process read results -// 4-3. Close (not cleanup) the transaction (CloseBatchTransactionAction). -// -// When all workers are done: -// 5. Cleanup the transaction (CloseBatchTransactionAction). This can be done -// either by the last worker to finish the job, or by the main Executor that -// initialized this transaction in the first place. It is also possible to clean -// it up with a brand new Executor -- just execute StartBatchTransactionAction -// with the ID, then clean it up right away. -// -// Cleaning up is optional, but recommended. -message StartBatchTransactionAction { - // To start a new transaction, specify an exact timestamp. Alternatively, an - // existing batch transaction ID can be used. Either one of two must be - // set. - oneof param { - // The exact timestamp to start the batch transaction. - google.protobuf.Timestamp batch_txn_time = 1; - - // ID of a batch read-only transaction. It can be used to start the same - // batch transaction on multiple executors and parallelize partition - // processing. - bytes tid = 2; - } - - // Database role to assume while performing this action. Setting the - // database_role will enforce additional role-based access checks on this - // action. - string cloud_database_role = 3; -} - -// Closes or cleans up the currently opened batch read-only transaction. -// -// Once a transaction is closed, the Executor can be disposed of or used to -// start start another transaction. Closing a batch transaction in one Executor -// doesn't affect the transaction's state in other Executors that also read from -// it. -// -// When a transaction is cleaned up, it becomes globally invalid. Cleaning up is -// optional, but recommended. -message CloseBatchTransactionAction { - // Indicates whether the transaction needs to be cleaned up. - bool cleanup = 1; -} - -// Generate database partitions for the given read. Successful outcomes will -// contain database partitions in the db_partition field. -message GenerateDbPartitionsForReadAction { - // Read to generate partitions for. - ReadAction read = 1; - - // Metadata related to the tables involved in the read. - repeated TableMetadata table = 2; - - // Desired size of data in each partition. Spanner doesn't guarantee to - // respect this value. - optional int64 desired_bytes_per_partition = 3; - - // If set, the desired max number of partitions. Spanner doesn't guarantee to - // respect this value. - optional int64 max_partition_count = 4; -} - -// Generate database partitions for the given query. Successful outcomes will -// contain database partitions in the db_partition field. -message GenerateDbPartitionsForQueryAction { - // Query to generate partitions for. - QueryAction query = 1; - - // Desired size of data in each partition. Spanner doesn't guarantee to - // respect this value. - optional int64 desired_bytes_per_partition = 2; -} - -// Identifies a database partition generated for a particular read or query. To -// read rows from the partition, use ExecutePartitionAction. -message BatchPartition { - // Serialized Partition instance. - bytes partition = 1; - - // The partition token decrypted from partition. - bytes partition_token = 2; - - // Table name is set iff the partition was generated for a read (as opposed to - // a query). - optional string table = 3; - - // Index name if the partition was generated for an index read. - optional string index = 4; -} - -// Performs a read or query for the given partitions. This action must be -// executed in the context of the same transaction that was used to generate -// given partitions. -message ExecutePartitionAction { - // Batch partition to execute on. - BatchPartition partition = 1; -} - -// Execute a change stream TVF query. -message ExecuteChangeStreamQuery { - // Name for this change stream. - string name = 1; - - // Specifies that records with commit_timestamp greater than or equal to - // start_time should be returned. - google.protobuf.Timestamp start_time = 2; - - // Specifies that records with commit_timestamp less than or equal to - // end_time should be returned. - optional google.protobuf.Timestamp end_time = 3; - - // Specifies which change stream partition to query, based on the content of - // child partitions records. - optional string partition_token = 4; - - // Read options for this change stream query. - repeated string read_options = 5; - - // Determines how frequently a heartbeat ChangeRecord will be returned in case - // there are no transactions committed in this partition, in milliseconds. - optional int32 heartbeat_milliseconds = 6; - - // Deadline for this change stream query, in seconds. - optional int64 deadline_seconds = 7; - - // Database role to assume while performing this action. This should only be - // set for cloud requests. Setting the database role will enforce additional - // role-based access checks on this action. - optional string cloud_database_role = 8; -} - -// SpannerActionOutcome defines a result of execution of a single SpannerAction. -message SpannerActionOutcome { - // If an outcome is split into multiple parts, status will be set only in the - // last part. - optional google.rpc.Status status = 1; - - // Transaction timestamp. It must be set for successful committed actions. - optional google.protobuf.Timestamp commit_time = 2; - - // Result of a ReadAction. This field must be set for ReadActions even if - // no rows were read. - optional ReadResult read_result = 3; - - // Result of a Query. This field must be set for Queries even if no rows were - // read. - optional QueryResult query_result = 4; - - // This bit indicates that Spanner has restarted the current transaction. It - // means that the client should replay all the reads and writes. - // Setting it to true is only valid in the context of a read-write - // transaction, as an outcome of a committing FinishTransactionAction. - optional bool transaction_restarted = 5; - - // In successful StartBatchTransactionAction outcomes, this contains the ID of - // the transaction. - optional bytes batch_txn_id = 6; - - // Generated database partitions (result of a - // GenetageDbPartitionsForReadAction/GenerateDbPartitionsForQueryAction). - repeated BatchPartition db_partition = 7; - - // Result of admin related actions. - optional AdminResult admin_result = 8; - - // Stores rows modified by query in single DML or batch DML action. - // In case of batch DML action, stores 0 as row count of errored DML query. - repeated int64 dml_rows_modified = 9; - - // Change stream records returned by a change stream query. - repeated ChangeStreamRecord change_stream_records = 10; -} - -// AdminResult contains admin action results, for database/backup/operation. -message AdminResult { - // Results of cloud backup related actions. - CloudBackupResponse backup_response = 1; - - // Results of operation related actions. - OperationResponse operation_response = 2; - - // Results of database related actions. - CloudDatabaseResponse database_response = 3; - - // Results of instance related actions. - CloudInstanceResponse instance_response = 4; - - // Results of instance config related actions. - CloudInstanceConfigResponse instance_config_response = 5; -} - -// CloudBackupResponse contains results returned by cloud backup related -// actions. -message CloudBackupResponse { - // List of backups returned by ListCloudBackupsAction. - repeated google.spanner.admin.database.v1.Backup listed_backups = 1; - - // List of operations returned by ListCloudBackupOperationsAction. - repeated google.longrunning.Operation listed_backup_operations = 2; - - // "next_page_token" can be sent in a subsequent list action - // to fetch more of the matching data. - string next_page_token = 3; - - // Backup returned by GetCloudBackupAction/UpdateCloudBackupAction. - google.spanner.admin.database.v1.Backup backup = 4; -} - -// OperationResponse contains results returned by operation related actions. -message OperationResponse { - // List of operations returned by ListOperationsAction. - repeated google.longrunning.Operation listed_operations = 1; - - // "next_page_token" can be sent in a subsequent list action - // to fetch more of the matching data. - string next_page_token = 2; - - // Operation returned by GetOperationAction. - google.longrunning.Operation operation = 3; -} - -// CloudInstanceResponse contains results returned by cloud instance related -// actions. -message CloudInstanceResponse { - // List of instances returned by ListCloudInstancesAction. - repeated google.spanner.admin.instance.v1.Instance listed_instances = 1; - - // "next_page_token" can be sent in a subsequent list action - // to fetch more of the matching data. - string next_page_token = 2; - - // Instance returned by GetCloudInstanceAction - google.spanner.admin.instance.v1.Instance instance = 3; -} - -// CloudInstanceConfigResponse contains results returned by cloud instance -// config related actions. -message CloudInstanceConfigResponse { - // List of instance configs returned by ListCloudInstanceConfigsAction. - repeated google.spanner.admin.instance.v1.InstanceConfig - listed_instance_configs = 1; - - // "next_page_token" can be sent in a subsequent list action - // to fetch more of the matching data. - string next_page_token = 2; - - // Instance config returned by GetCloudInstanceConfigAction. - google.spanner.admin.instance.v1.InstanceConfig instance_config = 3; -} - -// CloudDatabaseResponse contains results returned by cloud database related -// actions. -message CloudDatabaseResponse { - // List of databases returned by ListCloudDatabasesAction. - repeated google.spanner.admin.database.v1.Database listed_databases = 1; - - // List of operations returned by ListCloudDatabaseOperationsAction. - repeated google.longrunning.Operation listed_database_operations = 2; - - // "next_page_token" can be sent in a subsequent list action - // to fetch more of the matching data. - string next_page_token = 3; - - // Database returned by GetCloudDatabaseAction - google.spanner.admin.database.v1.Database database = 4; -} - -// ReadResult contains rows read. -message ReadResult { - // Table name. - string table = 1; - - // Index name, if read from an index. - optional string index = 2; - - // Request index (multiread only). - optional int32 request_index = 3; - - // Rows read. Each row is a struct with multiple fields, one for each column - // in read result. All rows have the same type. - repeated ValueList row = 4; - - // The type of rows read. It must be set if at least one row was read. - optional google.spanner.v1.StructType row_type = 5; -} - -// QueryResult contains result of a Query. -message QueryResult { - // Rows read. Each row is a struct with multiple fields, one for each column - // in read result. All rows have the same type. - repeated ValueList row = 1; - - // The type of rows read. It must be set if at least one row was read. - optional google.spanner.v1.StructType row_type = 2; -} - -// Raw ChangeStream records. -// Encodes one of: DataChangeRecord, HeartbeatRecord, ChildPartitionsRecord -// returned from the ChangeStream API. -message ChangeStreamRecord { - // Record represents one type of the change stream record. - oneof record { - // Data change record. - DataChangeRecord data_change = 1; - - // Child partitions record. - ChildPartitionsRecord child_partition = 2; - - // Heartbeat record. - HeartbeatRecord heartbeat = 3; - } -} - -// ChangeStream data change record. -message DataChangeRecord { - // Column types. - message ColumnType { - // Column name. - string name = 1; - - // Column type in JSON. - string type = 2; - - // Whether the column is a primary key column. - bool is_primary_key = 3; - - // The position of the column as defined in the schema. - int64 ordinal_position = 4; - } - - // Describes the changes that were made. - message Mod { - // The primary key values in JSON. - string keys = 1; - - // The new values of the changed columns in JSON. Only contain the non-key - // columns. - string new_values = 2; - - // The old values of the changed columns in JSON. Only contain the non-key - // columns. - string old_values = 3; - } - - // The timestamp in which the change was committed. - google.protobuf.Timestamp commit_time = 1; - - // The sequence number for the record within the transaction. - string record_sequence = 2; - - // A globally unique string that represents the transaction in which the - // change was committed. - string transaction_id = 3; - - // Indicates whether this is the last record for a transaction in the current - // partition. - bool is_last_record = 4; - - // Name of the table affected by the change. - string table = 5; - - // Column types defined in the schema. - repeated ColumnType column_types = 6; - - // Changes made in the transaction. - repeated Mod mods = 7; - - // Describes the type of change. One of INSERT, UPDATE or DELETE. - string mod_type = 8; - - // One of value capture type: NEW_VALUES, OLD_VALUES, OLD_AND_NEW_VALUES. - string value_capture_type = 9; - - // Number of records in transactions. - int64 record_count = 10; - - // Number of partitions in transactions. - int64 partition_count = 11; - - // Transaction tag info. - string transaction_tag = 12; - - // Whether the transaction is a system transactionn. - bool is_system_transaction = 13; -} - -// ChangeStream child partition record. -message ChildPartitionsRecord { - // A single child partition. - message ChildPartition { - // Partition token string used to identify the child partition in queries. - string token = 1; - - // Parent partition tokens of this child partition. - repeated string parent_partition_tokens = 2; - } - - // Data change records returned from child partitions in this child partitions - // record will have a commit timestamp greater than or equal to start_time. - google.protobuf.Timestamp start_time = 1; - - // A monotonically increasing sequence number that can be used to define the - // ordering of the child partitions record when there are multiple child - // partitions records returned with the same start_time in a particular - // partition. - string record_sequence = 2; - - // A set of child partitions and their associated information. - repeated ChildPartition child_partitions = 3; -} - -// ChangeStream heartbeat record. -message HeartbeatRecord { - // Timestamp for this heartbeat check. - google.protobuf.Timestamp heartbeat_time = 1; -} From 89adfa31de8ae07177c974886c7474974b6ed716 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Fri, 20 Oct 2023 07:09:34 +0000 Subject: [PATCH 07/15] feat(spanner): rename file --- .../executor/{cloud_executor.go => cloud_executor_util.go} | 1 + 1 file changed, 1 insertion(+) rename spanner/cloudexecutor/executor/{cloud_executor.go => cloud_executor_util.go} (99%) diff --git a/spanner/cloudexecutor/executor/cloud_executor.go b/spanner/cloudexecutor/executor/cloud_executor_util.go similarity index 99% rename from spanner/cloudexecutor/executor/cloud_executor.go rename to spanner/cloudexecutor/executor/cloud_executor_util.go index eb7a06d0ed0b..6bf71556f769 100644 --- a/spanner/cloudexecutor/executor/cloud_executor.go +++ b/spanner/cloudexecutor/executor/cloud_executor_util.go @@ -14,6 +14,7 @@ package executor +// cloud_executor_util.go file contains utility methods that can be reused across executor actions. import ( "fmt" "log" From 3e235ed10a59c4372c011e2be5cac2739d5998e2 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Fri, 20 Oct 2023 07:17:07 +0000 Subject: [PATCH 08/15] feat(spanner): rename --- ...{cloud_client_executor.go => cloud_client_executor_mapping.go} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spanner/cloudexecutor/executor/{cloud_client_executor.go => cloud_client_executor_mapping.go} (100%) diff --git a/spanner/cloudexecutor/executor/cloud_client_executor.go b/spanner/cloudexecutor/executor/cloud_client_executor_mapping.go similarity index 100% rename from spanner/cloudexecutor/executor/cloud_client_executor.go rename to spanner/cloudexecutor/executor/cloud_client_executor_mapping.go From 01a321598d03cedac629b12b2201ba2a5d6d0f53 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Fri, 20 Oct 2023 07:26:52 +0000 Subject: [PATCH 09/15] feat(spanner): use string.join --- spanner/cloudexecutor/worker_proxy.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spanner/cloudexecutor/worker_proxy.go b/spanner/cloudexecutor/worker_proxy.go index 320c066bf586..468bdfaf58b2 100644 --- a/spanner/cloudexecutor/worker_proxy.go +++ b/spanner/cloudexecutor/worker_proxy.go @@ -21,6 +21,7 @@ import ( "log" "net" "os" + "strings" "cloud.google.com/go/spanner/cloudexecutor/executor" executorpb "cloud.google.com/go/spanner/cloudexecutor/proto" @@ -38,7 +39,7 @@ var ( spannerPort = flag.String("spanner_port", "", "Port of Spanner Frontend to which to send requests.") cert = flag.String("cert", "", "Certificate used to connect to Spanner GFE.") serviceKeyFile = flag.String("service_key_file", "", "Service key file used to set authentication.") - ipAddress = "127.0.0.1:" + ipAddress = "127.0.0.1" ) func main() { @@ -129,7 +130,7 @@ func getClientOptionsForUnitTests() []option.ClientOption { } func getEndPoint() string { - endpoint := ipAddress + *spannerPort + endpoint := strings.Join([]string{ipAddress, *spannerPort}, ":") log.Printf("endpoint for grpc dial: %s", endpoint) return endpoint } From cf0ee5f51aafe7cf4e697770d49d8b1820af7c32 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Fri, 20 Oct 2023 07:35:32 +0000 Subject: [PATCH 10/15] feat(spanner): add file responsibility --- .../cloudexecutor/executor/cloud_client_executor_mapping.go | 2 ++ spanner/cloudexecutor/executor/cloud_executor_impl.go | 3 +++ spanner/cloudexecutor/worker_proxy.go | 3 +++ 3 files changed, 8 insertions(+) diff --git a/spanner/cloudexecutor/executor/cloud_client_executor_mapping.go b/spanner/cloudexecutor/executor/cloud_client_executor_mapping.go index 31f2b79acf2e..5186810717f8 100644 --- a/spanner/cloudexecutor/executor/cloud_client_executor_mapping.go +++ b/spanner/cloudexecutor/executor/cloud_client_executor_mapping.go @@ -14,6 +14,8 @@ package executor +// cloud_client_executor_mapping.go handles mapping from executor actions to client library structure. + import ( executorpb "cloud.google.com/go/spanner/cloudexecutor/proto" ) diff --git a/spanner/cloudexecutor/executor/cloud_executor_impl.go b/spanner/cloudexecutor/executor/cloud_executor_impl.go index 1ae28e3e9ee5..85a74613bf65 100644 --- a/spanner/cloudexecutor/executor/cloud_executor_impl.go +++ b/spanner/cloudexecutor/executor/cloud_executor_impl.go @@ -14,6 +14,9 @@ package executor +// cloud_executor_impl.go contains the implementation of the executor proxy RPC. +// This RPC gets invoked through the gRPC stream exposed via proxy port by worker_proxy.go file. + import ( "context" diff --git a/spanner/cloudexecutor/worker_proxy.go b/spanner/cloudexecutor/worker_proxy.go index 468bdfaf58b2..91bb6bae33cf 100644 --- a/spanner/cloudexecutor/worker_proxy.go +++ b/spanner/cloudexecutor/worker_proxy.go @@ -14,6 +14,9 @@ package main +// worker_proxy.go handles creation of the gRPC stream, and registering needed services. +// This file is responsible for spinning up the server for receiving requests from the client through gRPC stream. + import ( "context" "flag" From 030cae88459bddfbdb411d12200ce74023e7b9fe Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Sun, 29 Oct 2023 07:43:48 +0000 Subject: [PATCH 11/15] feat(spanner): coder refactoring --- .../executor/cloud_client_executor_mapping.go | 30 -- .../executor/cloud_executor_util.go | 332 ------------------ .../executor/executor_proxy_server_impl.go} | 16 +- .../executor/internal/input_stream/handler.go | 41 +++ .../internal/output_stream/output_handler.go | 212 +++++++++++ .../internal/utility/error_code_mapper.go | 79 +++++ .../internal/utility/table_metadata_helper.go | 98 ++++++ .../{ => test}/cloudexecutor/worker_proxy.go | 6 +- 8 files changed, 442 insertions(+), 372 deletions(-) delete mode 100644 spanner/cloudexecutor/executor/cloud_client_executor_mapping.go delete mode 100644 spanner/cloudexecutor/executor/cloud_executor_util.go rename spanner/{cloudexecutor/executor/cloud_executor_impl.go => test/cloudexecutor/executor/executor_proxy_server_impl.go} (72%) create mode 100644 spanner/test/cloudexecutor/executor/internal/input_stream/handler.go create mode 100644 spanner/test/cloudexecutor/executor/internal/output_stream/output_handler.go create mode 100644 spanner/test/cloudexecutor/executor/internal/utility/error_code_mapper.go create mode 100644 spanner/test/cloudexecutor/executor/internal/utility/table_metadata_helper.go rename spanner/{ => test}/cloudexecutor/worker_proxy.go (95%) diff --git a/spanner/cloudexecutor/executor/cloud_client_executor_mapping.go b/spanner/cloudexecutor/executor/cloud_client_executor_mapping.go deleted file mode 100644 index 5186810717f8..000000000000 --- a/spanner/cloudexecutor/executor/cloud_client_executor_mapping.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2023 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -// cloud_client_executor_mapping.go handles mapping from executor actions to client library structure. - -import ( - executorpb "cloud.google.com/go/spanner/cloudexecutor/proto" -) - -type cloudStreamHandler struct { - cloudProxyServer *CloudProxyServer - stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer -} - -func (h *cloudStreamHandler) execute() error { - return nil -} diff --git a/spanner/cloudexecutor/executor/cloud_executor_util.go b/spanner/cloudexecutor/executor/cloud_executor_util.go deleted file mode 100644 index 6bf71556f769..000000000000 --- a/spanner/cloudexecutor/executor/cloud_executor_util.go +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright 2023 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package executor - -// cloud_executor_util.go file contains utility methods that can be reused across executor actions. -import ( - "fmt" - "log" - "strings" - - "cloud.google.com/go/spanner" - "cloud.google.com/go/spanner/apiv1/spannerpb" - executorpb "cloud.google.com/go/spanner/cloudexecutor/proto" - spb "google.golang.org/genproto/googleapis/rpc/status" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/reflect/protoreflect" - "google.golang.org/protobuf/types/known/timestamppb" -) - -// tableMetadataHelper is used to hold and retrieve metadata of tables and columns involved -// in a transaction. -type tableMetadataHelper struct { - tableColumnsInOrder map[string][]*executorpb.ColumnMetadata - tableColumnsByName map[string]map[string]*executorpb.ColumnMetadata - tableKeyColumnsInOrder map[string][]*executorpb.ColumnMetadata -} - -// initFrom reads table metadata from the given StartTransactionAction. -func (t *tableMetadataHelper) initFrom(a *executorpb.StartTransactionAction) { - t.initFromTableMetadata(a.GetTable()) -} - -// initFromTableMetadata extracts table metadata and make maps to store them. -func (t *tableMetadataHelper) initFromTableMetadata(tables []*executorpb.TableMetadata) { - t.tableColumnsInOrder = make(map[string][]*executorpb.ColumnMetadata) - t.tableColumnsByName = make(map[string]map[string]*executorpb.ColumnMetadata) - t.tableKeyColumnsInOrder = make(map[string][]*executorpb.ColumnMetadata) - for _, table := range tables { - tableName := table.GetName() - t.tableColumnsInOrder[tableName] = table.GetColumn() - t.tableKeyColumnsInOrder[tableName] = table.GetKeyColumn() - t.tableColumnsByName[tableName] = make(map[string]*executorpb.ColumnMetadata) - for _, col := range table.GetColumn() { - t.tableColumnsByName[tableName][col.GetName()] = col - } - } -} - -// getColumnType returns the column type of the given table and column. -func (t *tableMetadataHelper) getColumnType(tableName string, colName string) (*spannerpb.Type, error) { - cols, ok := t.tableColumnsByName[tableName] - if !ok { - log.Printf("There is no metadata for table %s. Make sure that StartTransactionAction has TableMetadata correctly populated.", tableName) - return nil, spanner.ToSpannerError(status.Errorf(codes.InvalidArgument, "there is no metadata for table %s", tableName)) - } - colMetadata, ok := cols[colName] - if !ok { - log.Printf("Metadata for table %s contains no column named %s", tableName, colName) - return nil, spanner.ToSpannerError(status.Errorf(codes.InvalidArgument, "metadata for table %s contains no column named %s", tableName, colName)) - } - return colMetadata.GetType(), nil -} - -// getColumnTypes returns a list of column types of the given table. -func (t *tableMetadataHelper) getColumnTypes(tableName string) ([]*spannerpb.Type, error) { - cols, ok := t.tableColumnsInOrder[tableName] - if !ok { - log.Printf("There is no metadata for table %s. Make sure that StartTransactionAction has TableMetadata correctly populated.", tableName) - return nil, spanner.ToSpannerError(status.Errorf(codes.InvalidArgument, "there is no metadata for table %s", tableName)) - } - var colTypes []*spannerpb.Type - for _, col := range cols { - colTypes = append(colTypes, col.GetType()) - } - return colTypes, nil -} - -// getKeyColumnTypes returns a list of key column types of the given table. -func (t *tableMetadataHelper) getKeyColumnTypes(tableName string) ([]*spannerpb.Type, error) { - cols, ok := t.tableKeyColumnsInOrder[tableName] - if !ok { - log.Printf("There is no metadata for table %s. Make sure that StartTxnAction has TableMetadata correctly populated.", tableName) - return nil, fmt.Errorf("there is no metadata for table %s", tableName) - } - var colTypes []*spannerpb.Type - for _, col := range cols { - colTypes = append(colTypes, col.GetType()) - } - return colTypes, nil -} - -// outcomeSender is a utility class used for sending action outcomes back to the client. For read -// actions, it buffers rows and sends partial read results in batches. -type outcomeSender struct { - actionID int32 - stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer - - // partialOutcome accumulates rows and other relevant information - partialOutcome *executorpb.SpannerActionOutcome - readResult *executorpb.ReadResult - queryResult *executorpb.QueryResult - - // All the relevant variables below should be set before first outcome is sent back, - // and unused variables should leave null. - timestamp *timestamppb.Timestamp - hasReadResult bool - hasQueryResult bool - hasChangeStreamRecords bool - table string // name of the table being read - index *string // name of the secondary index used for read - requestIndex *int32 // request index (for multireads) - rowType *spannerpb.StructType - - // Current row count in read/query result - rowCount int64 - // modified row count in dml result - rowsModified []int64 -} - -// if rowCount exceed this value, we should send rows back in batch. -const maxRowsPerBatch = 100 - -// setTimestamp sets the timestamp for commit. -func (s *outcomeSender) setTimestamp(timestamp *timestamppb.Timestamp) { - s.timestamp = timestamp -} - -// setRowType sets the rowType for appending row. -func (s *outcomeSender) setRowType(rowType *spannerpb.StructType) { - s.rowType = rowType -} - -// initForRead init the sender for read action, then set the table and index if there exists. -func (s *outcomeSender) initForRead(table string, index *string) { - s.hasReadResult = true - s.table = table - if index != nil { - s.index = index - } -} - -// initForQuery init the sender for query action -func (s *outcomeSender) initForQuery() { - s.hasQueryResult = true -} - -// initForBatchRead init the sender for batch read action, then set the table and index if there exists. -func (s *outcomeSender) initForBatchRead(table string, index *string) { - s.initForRead(table, index) - // Cloud API supports only simple batch reads (not multi reads), so request index is always 0. - requestIndex := int32(0) - s.requestIndex = &requestIndex -} - -// Add rows modified in dml to result -func (s *outcomeSender) appendDmlRowsModified(rowsModified int64) { - // s.buildOutcome() - s.rowsModified = append(s.rowsModified, rowsModified) -} - -// finishSuccessfully sends the last outcome with OK status. -func (s *outcomeSender) finishSuccessfully() error { - s.buildOutcome() - s.partialOutcome.Status = &spb.Status{Code: int32(codes.OK)} - return s.flush() -} - -// finishWithTransactionRestarted sends the last outcome with aborted error, -// this will set the TransactionRestarted to true -func (s *outcomeSender) finishWithTransactionRestarted() error { - s.buildOutcome() - transactionRestarted := true - s.partialOutcome.TransactionRestarted = &transactionRestarted - s.partialOutcome.Status = &spb.Status{Code: int32(codes.OK)} - return s.flush() -} - -// finishWithError sends the last outcome with given error status. -func (s *outcomeSender) finishWithError(err error) error { - s.buildOutcome() - //s.partialOutcome.Status = &status.Status{Code: int32(gstatus.Code(err)), Message: err.Error()} - s.partialOutcome.Status = errToStatus(err) - return s.flush() -} - -// appendRow adds another row to buffer. If buffer hits its size limit, the buffered rows will be sent back. -func (s *outcomeSender) appendRow(row *executorpb.ValueList) error { - if !s.hasReadResult && !s.hasQueryResult { - return spanner.ToSpannerError(status.Error(codes.InvalidArgument, "either hasReadResult or hasQueryResult should be true")) - } - if s.rowType == nil { - return spanner.ToSpannerError(status.Error(codes.InvalidArgument, "rowType should be set first")) - } - s.buildOutcome() - if s.hasReadResult { - s.readResult.Row = append(s.readResult.Row, row) - s.rowCount++ - } else if s.hasQueryResult { - s.queryResult.Row = append(s.queryResult.Row, row) - s.rowCount++ - } - if s.rowCount >= maxRowsPerBatch { - return s.flush() - } - return nil -} - -// buildOutcome will build the partialOutcome if not exists using relevant variables. -func (s *outcomeSender) buildOutcome() { - if s.partialOutcome != nil { - return - } - s.partialOutcome = &executorpb.SpannerActionOutcome{ - CommitTime: s.timestamp, - } - if s.hasReadResult { - s.readResult = &executorpb.ReadResult{ - Table: s.table, - Index: s.index, - RowType: s.rowType, - RequestIndex: s.requestIndex, - } - } else if s.hasQueryResult { - s.queryResult = &executorpb.QueryResult{ - RowType: s.rowType, - } - } -} - -// flush sends partialOutcome to stream and clear the internal state -func (s *outcomeSender) flush() error { - if s == nil || s.partialOutcome == nil { - log.Println("outcomeSender.flush() is called when there is no partial outcome to send. This is an internal error that should never happen") - return spanner.ToSpannerError(status.Error(codes.InvalidArgument, "either outcome sender or partial outcome is nil")) - } - s.partialOutcome.DmlRowsModified = s.rowsModified - if s.hasReadResult { - s.partialOutcome.ReadResult = s.readResult - } else if s.hasQueryResult { - s.partialOutcome.QueryResult = s.queryResult - } - err := s.sendOutcome(s.partialOutcome) - s.partialOutcome = nil - s.readResult = nil - s.queryResult = nil - s.rowCount = 0 - s.rowsModified = []int64{} - return err -} - -// sendOutcome sends the given SpannerActionOutcome. -func (s *outcomeSender) sendOutcome(outcome *executorpb.SpannerActionOutcome) error { - log.Printf("sending result %v actionId %d", outcome, s.actionID) - resp := &executorpb.SpannerAsyncActionResponse{ - ActionId: s.actionID, - Outcome: outcome, - } - err := s.stream.Send(resp) - if err != nil { - log.Printf("Failed to send outcome with error: %s", err.Error()) - } else { - log.Printf("Sent result %v actionId %d", outcome, s.actionID) - } - return err -} - -// errToStatus maps cloud error to Status -func errToStatus(e error) *spb.Status { - log.Print(e.Error()) - if strings.Contains(e.Error(), "Transaction outcome unknown") { - return &spb.Status{Code: int32(codes.DeadlineExceeded), Message: e.Error()} - } - if status.Code(e) == codes.InvalidArgument { - return &spb.Status{Code: int32(codes.InvalidArgument), Message: e.Error()} - } - if status.Code(e) == codes.PermissionDenied { - return &spb.Status{Code: int32(codes.PermissionDenied), Message: e.Error()} - } - if status.Code(e) == codes.Aborted { - return &spb.Status{Code: int32(codes.Aborted), Message: e.Error()} - } - if status.Code(e) == codes.AlreadyExists { - return &spb.Status{Code: int32(codes.AlreadyExists), Message: e.Error()} - } - if status.Code(e) == codes.Canceled { - return &spb.Status{Code: int32(codes.Canceled), Message: e.Error()} - } - if status.Code(e) == codes.Internal { - return &spb.Status{Code: int32(codes.Internal), Message: e.Error()} - } - if status.Code(e) == codes.FailedPrecondition { - return &spb.Status{Code: int32(codes.FailedPrecondition), Message: e.Error()} - } - if status.Code(e) == codes.NotFound { - return &spb.Status{Code: int32(codes.NotFound), Message: e.Error()} - } - if status.Code(e) == codes.DeadlineExceeded { - return &spb.Status{Code: int32(codes.DeadlineExceeded), Message: e.Error()} - } - if status.Code(e) == codes.ResourceExhausted { - return &spb.Status{Code: int32(codes.ResourceExhausted), Message: e.Error()} - } - if status.Code(e) == codes.OutOfRange { - return &spb.Status{Code: int32(codes.OutOfRange), Message: e.Error()} - } - if status.Code(e) == codes.Unauthenticated { - return &spb.Status{Code: int32(codes.Unauthenticated), Message: e.Error()} - } - if status.Code(e) == codes.Unimplemented { - return &spb.Status{Code: int32(codes.Unimplemented), Message: e.Error()} - } - if status.Code(e) == codes.Unavailable { - return &spb.Status{Code: int32(codes.Unavailable), Message: e.Error()} - } - if status.Code(e) == codes.Unknown { - return &spb.Status{Code: int32(codes.Unknown), Message: e.Error()} - } - return &spb.Status{Code: int32(codes.Unknown), Message: fmt.Sprintf("Error: %v, Unsupported Spanner error code: %v", e.Error(), status.Code(e))} -} diff --git a/spanner/cloudexecutor/executor/cloud_executor_impl.go b/spanner/test/cloudexecutor/executor/executor_proxy_server_impl.go similarity index 72% rename from spanner/cloudexecutor/executor/cloud_executor_impl.go rename to spanner/test/cloudexecutor/executor/executor_proxy_server_impl.go index 85a74613bf65..05b018cea205 100644 --- a/spanner/cloudexecutor/executor/cloud_executor_impl.go +++ b/spanner/test/cloudexecutor/executor/executor_proxy_server_impl.go @@ -14,13 +14,14 @@ package executor -// cloud_executor_impl.go contains the implementation of the executor proxy RPC. +// executor_proxy_server_impl.go contains the implementation of the executor proxy RPC. // This RPC gets invoked through the gRPC stream exposed via proxy port by worker_proxy.go file. import ( "context" - executorpb "cloud.google.com/go/spanner/cloudexecutor/proto" + "cloud.google.com/go/spanner/test/cloudexecutor/executor/internal/input_stream" + executorpb "cloud.google.com/go/spanner/test/cloudexecutor/proto" "google.golang.org/api/option" ) @@ -37,10 +38,11 @@ func NewCloudProxyServer(ctx context.Context, opts []option.ClientOption) (*Clou // ExecuteActionAsync is implementation of ExecuteActionAsync in SpannerExecutorProxyServer. It's a // streaming method in which client and server exchange SpannerActions and SpannerActionOutcomes. -func (s *CloudProxyServer) ExecuteActionAsync(stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer) error { - handler := &cloudStreamHandler{ - cloudProxyServer: s, - stream: stream, +func (s *CloudProxyServer) ExecuteActionAsync(inputStream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer) error { + handler := &input_stream.CloudStreamHandler{ + Stream: inputStream, + ServerContext: s.serverContext, + Options: s.options, } - return handler.execute() + return handler.Execute() } diff --git a/spanner/test/cloudexecutor/executor/internal/input_stream/handler.go b/spanner/test/cloudexecutor/executor/internal/input_stream/handler.go new file mode 100644 index 000000000000..fc054fa85876 --- /dev/null +++ b/spanner/test/cloudexecutor/executor/internal/input_stream/handler.go @@ -0,0 +1,41 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package input_stream + +// input_stream_handler.go is responsible for handling input requests to the server and +// handles mapping from executor actions (SpannerAsyncActionRequest) to client library code. + +import ( + "context" + "sync" + + executorpb "cloud.google.com/go/spanner/test/cloudexecutor/proto" + "google.golang.org/api/option" +) + +type CloudStreamHandler struct { + // members below should be set by the caller + Stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer + ServerContext context.Context + Options []option.ClientOption + // members below represent internal state + mu sync.Mutex // protects mutable internal state +} + +// Execute executes the given ExecuteActions request, blocking until it's done. It takes care of +// properly closing the request stream in the end. +func (h *CloudStreamHandler) Execute() error { + return nil +} diff --git a/spanner/test/cloudexecutor/executor/internal/output_stream/output_handler.go b/spanner/test/cloudexecutor/executor/internal/output_stream/output_handler.go new file mode 100644 index 000000000000..c35837d35914 --- /dev/null +++ b/spanner/test/cloudexecutor/executor/internal/output_stream/output_handler.go @@ -0,0 +1,212 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package output_stream + +import ( + "log" + + "cloud.google.com/go/spanner" + "cloud.google.com/go/spanner/apiv1/spannerpb" + "cloud.google.com/go/spanner/test/cloudexecutor/executor/internal/utility" + executorpb "cloud.google.com/go/spanner/test/cloudexecutor/proto" + spb "google.golang.org/genproto/googleapis/rpc/status" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/timestamppb" +) + +// OutcomeSender is a utility class used for sending action outcomes back to the client. For read +// actions, it buffers rows and sends partial read results in batches. +type OutcomeSender struct { + actionID int32 + stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer + + // partialOutcome accumulates rows and other relevant information + partialOutcome *executorpb.SpannerActionOutcome + readResult *executorpb.ReadResult + queryResult *executorpb.QueryResult + + // All the relevant variables below should be set before first outcome is sent back, + // and unused variables should leave null. + timestamp *timestamppb.Timestamp + hasReadResult bool + hasQueryResult bool + hasChangeStreamRecords bool + table string // name of the table being read + index *string // name of the secondary index used for read + requestIndex *int32 // request index (for multireads) + rowType *spannerpb.StructType + + // Current row count in read/query result + rowCount int64 + // modified row count in dml result + rowsModified []int64 +} + +// if rowCount exceed this value, we should send rows back in batch. +const maxRowsPerBatch = 100 + +func NewOutcomeSender(actionId int32, stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer) *OutcomeSender { + return &OutcomeSender{ + actionID: actionId, + stream: stream, + hasReadResult: false, + hasQueryResult: false, + } +} + +// SetTimestamp sets the timestamp for commit. +func (s *OutcomeSender) SetTimestamp(timestamp *timestamppb.Timestamp) { + s.timestamp = timestamp +} + +// SetRowType sets the rowType for appending row. +func (s *OutcomeSender) SetRowType(rowType *spannerpb.StructType) { + s.rowType = rowType +} + +// InitForRead init the sender for read action, then set the table and index if there exists. +func (s *OutcomeSender) InitForRead(table string, index *string) { + s.hasReadResult = true + s.table = table + if index != nil { + s.index = index + } +} + +// InitForQuery init the sender for query action +func (s *OutcomeSender) InitForQuery() { + s.hasQueryResult = true +} + +// InitForBatchRead init the sender for batch read action, then set the table and index if there exists. +func (s *OutcomeSender) InitForBatchRead(table string, index *string) { + s.InitForRead(table, index) + // Cloud API supports only simple batch reads (not multi reads), so request index is always 0. + requestIndex := int32(0) + s.requestIndex = &requestIndex +} + +// AppendDmlRowsModified add rows modified in dml to result +func (s *OutcomeSender) AppendDmlRowsModified(rowsModified int64) { + s.rowsModified = append(s.rowsModified, rowsModified) +} + +// FinishSuccessfully sends the last outcome with OK status. +func (s *OutcomeSender) FinishSuccessfully() error { + s.buildOutcome() + s.partialOutcome.Status = &spb.Status{Code: int32(codes.OK)} + return s.flush() +} + +// FinishWithTransactionRestarted sends the last outcome with aborted error, +// this will set the TransactionRestarted to true +func (s *OutcomeSender) FinishWithTransactionRestarted() error { + s.buildOutcome() + transactionRestarted := true + s.partialOutcome.TransactionRestarted = &transactionRestarted + s.partialOutcome.Status = &spb.Status{Code: int32(codes.OK)} + return s.flush() +} + +// FinishWithError sends the last outcome with given error status. +func (s *OutcomeSender) FinishWithError(err error) error { + s.buildOutcome() + //TODO(harsha:oct10) uncomment below line and comment s.partialOutcome.Status = errToStatus(err) + //s.partialOutcome.Status = &status.Status{Code: int32(gstatus.Code(err)), Message: err.Error()} + s.partialOutcome.Status = utility.ErrToStatus(err) + return s.flush() +} + +// AppendRow adds another row to buffer. If buffer hits its size limit, the buffered rows will be sent back. +func (s *OutcomeSender) AppendRow(row *executorpb.ValueList) error { + if !s.hasReadResult && !s.hasQueryResult { + return spanner.ToSpannerError(status.Error(codes.InvalidArgument, "either hasReadResult or hasQueryResult should be true")) + } + if s.rowType == nil { + return spanner.ToSpannerError(status.Error(codes.InvalidArgument, "rowType should be set first")) + } + s.buildOutcome() + if s.hasReadResult { + s.readResult.Row = append(s.readResult.Row, row) + s.rowCount++ + } else if s.hasQueryResult { + s.queryResult.Row = append(s.queryResult.Row, row) + s.rowCount++ + } + if s.rowCount >= maxRowsPerBatch { + return s.flush() + } + return nil +} + +// buildOutcome will build the partialOutcome if not exists using relevant variables. +func (s *OutcomeSender) buildOutcome() { + if s.partialOutcome != nil { + return + } + s.partialOutcome = &executorpb.SpannerActionOutcome{ + CommitTime: s.timestamp, + } + if s.hasReadResult { + s.readResult = &executorpb.ReadResult{ + Table: s.table, + Index: s.index, + RowType: s.rowType, + RequestIndex: s.requestIndex, + } + } else if s.hasQueryResult { + s.queryResult = &executorpb.QueryResult{ + RowType: s.rowType, + } + } +} + +// flush sends partialOutcome to stream and clear the internal state +func (s *OutcomeSender) flush() error { + if s == nil || s.partialOutcome == nil { + log.Println("outcomeSender.flush() is called when there is no partial outcome to send. This is an internal error that should never happen") + return spanner.ToSpannerError(status.Error(codes.InvalidArgument, "either outcome sender or partial outcome is nil")) + } + s.partialOutcome.DmlRowsModified = s.rowsModified + if s.hasReadResult { + s.partialOutcome.ReadResult = s.readResult + } else if s.hasQueryResult { + s.partialOutcome.QueryResult = s.queryResult + } + err := s.SendOutcome(s.partialOutcome) + s.partialOutcome = nil + s.readResult = nil + s.queryResult = nil + s.rowCount = 0 + s.rowsModified = []int64{} + return err +} + +// SendOutcome sends the given SpannerActionOutcome. +func (s *OutcomeSender) SendOutcome(outcome *executorpb.SpannerActionOutcome) error { + log.Printf("sending result %v actionId %d", outcome, s.actionID) + resp := &executorpb.SpannerAsyncActionResponse{ + ActionId: s.actionID, + Outcome: outcome, + } + err := s.stream.Send(resp) + if err != nil { + log.Printf("Failed to send outcome with error: %s", err.Error()) + } else { + log.Printf("Sent result %v actionId %d", outcome, s.actionID) + } + return err +} diff --git a/spanner/test/cloudexecutor/executor/internal/utility/error_code_mapper.go b/spanner/test/cloudexecutor/executor/internal/utility/error_code_mapper.go new file mode 100644 index 000000000000..eea990848786 --- /dev/null +++ b/spanner/test/cloudexecutor/executor/internal/utility/error_code_mapper.go @@ -0,0 +1,79 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package utility + +import ( + "fmt" + "log" + "strings" + + spb "google.golang.org/genproto/googleapis/rpc/status" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +// ErrToStatus maps cloud error to Status +func ErrToStatus(e error) *spb.Status { + log.Print(e.Error()) + if strings.Contains(e.Error(), "Transaction outcome unknown") { + return &spb.Status{Code: int32(codes.DeadlineExceeded), Message: e.Error()} + } + if status.Code(e) == codes.InvalidArgument { + return &spb.Status{Code: int32(codes.InvalidArgument), Message: e.Error()} + } + if status.Code(e) == codes.PermissionDenied { + return &spb.Status{Code: int32(codes.PermissionDenied), Message: e.Error()} + } + if status.Code(e) == codes.Aborted { + return &spb.Status{Code: int32(codes.Aborted), Message: e.Error()} + } + if status.Code(e) == codes.AlreadyExists { + return &spb.Status{Code: int32(codes.AlreadyExists), Message: e.Error()} + } + if status.Code(e) == codes.Canceled { + return &spb.Status{Code: int32(codes.Canceled), Message: e.Error()} + } + if status.Code(e) == codes.Internal { + return &spb.Status{Code: int32(codes.Internal), Message: e.Error()} + } + if status.Code(e) == codes.FailedPrecondition { + return &spb.Status{Code: int32(codes.FailedPrecondition), Message: e.Error()} + } + if status.Code(e) == codes.NotFound { + return &spb.Status{Code: int32(codes.NotFound), Message: e.Error()} + } + if status.Code(e) == codes.DeadlineExceeded { + return &spb.Status{Code: int32(codes.DeadlineExceeded), Message: e.Error()} + } + if status.Code(e) == codes.ResourceExhausted { + return &spb.Status{Code: int32(codes.ResourceExhausted), Message: e.Error()} + } + if status.Code(e) == codes.OutOfRange { + return &spb.Status{Code: int32(codes.OutOfRange), Message: e.Error()} + } + if status.Code(e) == codes.Unauthenticated { + return &spb.Status{Code: int32(codes.Unauthenticated), Message: e.Error()} + } + if status.Code(e) == codes.Unimplemented { + return &spb.Status{Code: int32(codes.Unimplemented), Message: e.Error()} + } + if status.Code(e) == codes.Unavailable { + return &spb.Status{Code: int32(codes.Unavailable), Message: e.Error()} + } + if status.Code(e) == codes.Unknown { + return &spb.Status{Code: int32(codes.Unknown), Message: e.Error()} + } + return &spb.Status{Code: int32(codes.Unknown), Message: fmt.Sprintf("Error: %v, Unsupported Spanner error code: %v", e.Error(), status.Code(e))} +} diff --git a/spanner/test/cloudexecutor/executor/internal/utility/table_metadata_helper.go b/spanner/test/cloudexecutor/executor/internal/utility/table_metadata_helper.go new file mode 100644 index 000000000000..03993407182b --- /dev/null +++ b/spanner/test/cloudexecutor/executor/internal/utility/table_metadata_helper.go @@ -0,0 +1,98 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package utility + +import ( + "fmt" + "log" + + "cloud.google.com/go/spanner" + "cloud.google.com/go/spanner/apiv1/spannerpb" + executorpb "cloud.google.com/go/spanner/test/cloudexecutor/proto" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +// TableMetadataHelper is used to hold and retrieve metadata of tables and columns involved +// in a transaction. +type TableMetadataHelper struct { + tableColumnsInOrder map[string][]*executorpb.ColumnMetadata + tableColumnsByName map[string]map[string]*executorpb.ColumnMetadata + tableKeyColumnsInOrder map[string][]*executorpb.ColumnMetadata +} + +// InitFrom reads table metadata from the given StartTransactionAction. +func (t *TableMetadataHelper) InitFrom(a *executorpb.StartTransactionAction) { + t.InitFromTableMetadata(a.GetTable()) +} + +// InitFromTableMetadata extracts table metadata and make maps to store them. +func (t *TableMetadataHelper) InitFromTableMetadata(tables []*executorpb.TableMetadata) { + t.tableColumnsInOrder = make(map[string][]*executorpb.ColumnMetadata) + t.tableColumnsByName = make(map[string]map[string]*executorpb.ColumnMetadata) + t.tableKeyColumnsInOrder = make(map[string][]*executorpb.ColumnMetadata) + for _, table := range tables { + tableName := table.GetName() + t.tableColumnsInOrder[tableName] = table.GetColumn() + t.tableKeyColumnsInOrder[tableName] = table.GetKeyColumn() + t.tableColumnsByName[tableName] = make(map[string]*executorpb.ColumnMetadata) + for _, col := range table.GetColumn() { + t.tableColumnsByName[tableName][col.GetName()] = col + } + } +} + +// GetColumnType returns the column type of the given table and column. +func (t *TableMetadataHelper) GetColumnType(tableName string, colName string) (*spannerpb.Type, error) { + cols, ok := t.tableColumnsByName[tableName] + if !ok { + log.Printf("There is no metadata for table %s. Make sure that StartTransactionAction has TableMetadata correctly populated.", tableName) + return nil, spanner.ToSpannerError(status.Errorf(codes.InvalidArgument, "there is no metadata for table %s", tableName)) + } + colMetadata, ok := cols[colName] + if !ok { + log.Printf("Metadata for table %s contains no column named %s", tableName, colName) + return nil, spanner.ToSpannerError(status.Errorf(codes.InvalidArgument, "metadata for table %s contains no column named %s", tableName, colName)) + } + return colMetadata.GetType(), nil +} + +// getColumnTypes returns a list of column types of the given table. +func (t *TableMetadataHelper) getColumnTypes(tableName string) ([]*spannerpb.Type, error) { + cols, ok := t.tableColumnsInOrder[tableName] + if !ok { + log.Printf("There is no metadata for table %s. Make sure that StartTransactionAction has TableMetadata correctly populated.", tableName) + return nil, spanner.ToSpannerError(status.Errorf(codes.InvalidArgument, "there is no metadata for table %s", tableName)) + } + var colTypes []*spannerpb.Type + for _, col := range cols { + colTypes = append(colTypes, col.GetType()) + } + return colTypes, nil +} + +// GetKeyColumnTypes returns a list of key column types of the given table. +func (t *TableMetadataHelper) GetKeyColumnTypes(tableName string) ([]*spannerpb.Type, error) { + cols, ok := t.tableKeyColumnsInOrder[tableName] + if !ok { + log.Printf("There is no metadata for table %s. Make sure that StartTxnAction has TableMetadata correctly populated.", tableName) + return nil, fmt.Errorf("there is no metadata for table %s", tableName) + } + var colTypes []*spannerpb.Type + for _, col := range cols { + colTypes = append(colTypes, col.GetType()) + } + return colTypes, nil +} diff --git a/spanner/cloudexecutor/worker_proxy.go b/spanner/test/cloudexecutor/worker_proxy.go similarity index 95% rename from spanner/cloudexecutor/worker_proxy.go rename to spanner/test/cloudexecutor/worker_proxy.go index 91bb6bae33cf..4ac022195e20 100644 --- a/spanner/cloudexecutor/worker_proxy.go +++ b/spanner/test/cloudexecutor/worker_proxy.go @@ -15,7 +15,7 @@ package main // worker_proxy.go handles creation of the gRPC stream, and registering needed services. -// This file is responsible for spinning up the server for receiving requests from the client through gRPC stream. +// This file is responsible for spinning up the server for client to make requests to ExecuteActionAsync RPC. import ( "context" @@ -26,8 +26,8 @@ import ( "os" "strings" - "cloud.google.com/go/spanner/cloudexecutor/executor" - executorpb "cloud.google.com/go/spanner/cloudexecutor/proto" + "cloud.google.com/go/spanner/test/cloudexecutor/executor" + executorpb "cloud.google.com/go/spanner/test/cloudexecutor/proto" "golang.org/x/oauth2" "golang.org/x/oauth2/google" "google.golang.org/api/option" From 038b16589c8068d244bf26ba88518ce04bdacd1e Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Sun, 29 Oct 2023 07:55:05 +0000 Subject: [PATCH 12/15] feat(spanner): coder refactoring --- .../output_stream/{output_handler.go => handler.go} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename spanner/test/cloudexecutor/executor/internal/output_stream/{output_handler.go => handler.go} (98%) diff --git a/spanner/test/cloudexecutor/executor/internal/output_stream/output_handler.go b/spanner/test/cloudexecutor/executor/internal/output_stream/handler.go similarity index 98% rename from spanner/test/cloudexecutor/executor/internal/output_stream/output_handler.go rename to spanner/test/cloudexecutor/executor/internal/output_stream/handler.go index c35837d35914..a60a6a655550 100644 --- a/spanner/test/cloudexecutor/executor/internal/output_stream/output_handler.go +++ b/spanner/test/cloudexecutor/executor/internal/output_stream/handler.go @@ -27,6 +27,9 @@ import ( "google.golang.org/protobuf/types/known/timestamppb" ) +// if OutcomeSender.rowCount exceed maxRowsPerBatch value, we should send rows back to the client in batch. +const maxRowsPerBatch = 100 + // OutcomeSender is a utility class used for sending action outcomes back to the client. For read // actions, it buffers rows and sends partial read results in batches. type OutcomeSender struct { @@ -55,9 +58,6 @@ type OutcomeSender struct { rowsModified []int64 } -// if rowCount exceed this value, we should send rows back in batch. -const maxRowsPerBatch = 100 - func NewOutcomeSender(actionId int32, stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer) *OutcomeSender { return &OutcomeSender{ actionID: actionId, From d654ce1dc5523df8feb650612f2804d9bb8e7aa1 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Wed, 1 Nov 2023 07:55:14 +0000 Subject: [PATCH 13/15] feat(spanner): update go.mod --- spanner/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spanner/go.mod b/spanner/go.mod index 4c71e702b9bb..4a362bf7f646 100644 --- a/spanner/go.mod +++ b/spanner/go.mod @@ -10,6 +10,7 @@ require ( github.com/google/go-cmp v0.5.9 github.com/googleapis/gax-go/v2 v2.12.0 go.opencensus.io v0.24.0 + golang.org/x/oauth2 v0.11.0 golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 google.golang.org/api v0.128.0 google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d @@ -33,7 +34,6 @@ require ( github.com/googleapis/enterprise-certificate-proxy v0.2.4 // indirect golang.org/x/crypto v0.14.0 // indirect golang.org/x/net v0.17.0 // indirect - golang.org/x/oauth2 v0.11.0 // indirect golang.org/x/sync v0.3.0 // indirect golang.org/x/sys v0.13.0 // indirect golang.org/x/text v0.13.0 // indirect From e74d650f453371eda99612894ce6029121b90106 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Wed, 1 Nov 2023 08:07:04 +0000 Subject: [PATCH 14/15] feat(spanner): lint fixes --- .../executor/executor_proxy_server_impl.go | 4 ++-- .../{input_stream => inputstream}/handler.go | 14 +++++++++++++- .../{output_stream => outputstream}/handler.go | 7 ++++--- 3 files changed, 19 insertions(+), 6 deletions(-) rename spanner/test/cloudexecutor/executor/internal/{input_stream => inputstream}/handler.go (65%) rename spanner/test/cloudexecutor/executor/internal/{output_stream => outputstream}/handler.go (97%) diff --git a/spanner/test/cloudexecutor/executor/executor_proxy_server_impl.go b/spanner/test/cloudexecutor/executor/executor_proxy_server_impl.go index 05b018cea205..575e85e19e6d 100644 --- a/spanner/test/cloudexecutor/executor/executor_proxy_server_impl.go +++ b/spanner/test/cloudexecutor/executor/executor_proxy_server_impl.go @@ -20,7 +20,7 @@ package executor import ( "context" - "cloud.google.com/go/spanner/test/cloudexecutor/executor/internal/input_stream" + "cloud.google.com/go/spanner/test/cloudexecutor/executor/internal/inputstream" executorpb "cloud.google.com/go/spanner/test/cloudexecutor/proto" "google.golang.org/api/option" ) @@ -39,7 +39,7 @@ func NewCloudProxyServer(ctx context.Context, opts []option.ClientOption) (*Clou // ExecuteActionAsync is implementation of ExecuteActionAsync in SpannerExecutorProxyServer. It's a // streaming method in which client and server exchange SpannerActions and SpannerActionOutcomes. func (s *CloudProxyServer) ExecuteActionAsync(inputStream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer) error { - handler := &input_stream.CloudStreamHandler{ + handler := &inputstream.CloudStreamHandler{ Stream: inputStream, ServerContext: s.serverContext, Options: s.options, diff --git a/spanner/test/cloudexecutor/executor/internal/input_stream/handler.go b/spanner/test/cloudexecutor/executor/internal/inputstream/handler.go similarity index 65% rename from spanner/test/cloudexecutor/executor/internal/input_stream/handler.go rename to spanner/test/cloudexecutor/executor/internal/inputstream/handler.go index fc054fa85876..fd639d193c4a 100644 --- a/spanner/test/cloudexecutor/executor/internal/input_stream/handler.go +++ b/spanner/test/cloudexecutor/executor/internal/inputstream/handler.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package input_stream +package inputstream // input_stream_handler.go is responsible for handling input requests to the server and // handles mapping from executor actions (SpannerAsyncActionRequest) to client library code. @@ -25,6 +25,18 @@ import ( "google.golang.org/api/option" ) +// CloudStreamHandler handles a single streaming ExecuteActions request by performing incoming +// actions. It maintains a state associated with the request, such as current transaction. +// +// CloudStreamHandler uses contexts (context.Context) to coordinate execution of asynchronous +// actions. The Stubby stream's context becomes a parent for all individual actions' contexts. This +// is done so that we don't leak anything when the stream is closed. +// +// startTxnHandler is a bit different from other actions. Read-write transactions that it +// starts outlive the action itself, so the Stubby stream's context is used for transactions +// instead of the action's context. +// +// For more info about contexts in Go, read golang.org/pkg/context type CloudStreamHandler struct { // members below should be set by the caller Stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer diff --git a/spanner/test/cloudexecutor/executor/internal/output_stream/handler.go b/spanner/test/cloudexecutor/executor/internal/outputstream/handler.go similarity index 97% rename from spanner/test/cloudexecutor/executor/internal/output_stream/handler.go rename to spanner/test/cloudexecutor/executor/internal/outputstream/handler.go index a60a6a655550..86f0f0207643 100644 --- a/spanner/test/cloudexecutor/executor/internal/output_stream/handler.go +++ b/spanner/test/cloudexecutor/executor/internal/outputstream/handler.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package output_stream +package outputstream import ( "log" @@ -58,9 +58,10 @@ type OutcomeSender struct { rowsModified []int64 } -func NewOutcomeSender(actionId int32, stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer) *OutcomeSender { +// NewOutcomeSender returns an OutcomeSender with default fields set. +func NewOutcomeSender(actionID int32, stream executorpb.SpannerExecutorProxy_ExecuteActionAsyncServer) *OutcomeSender { return &OutcomeSender{ - actionID: actionId, + actionID: actionID, stream: stream, hasReadResult: false, hasQueryResult: false, From 16149aa49e29483cc4dba9aade55e71e04acbccb Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Wed, 1 Nov 2023 08:07:37 +0000 Subject: [PATCH 15/15] feat(spanner): lint fixes --- spanner/test/cloudexecutor/worker_proxy.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spanner/test/cloudexecutor/worker_proxy.go b/spanner/test/cloudexecutor/worker_proxy.go index 4ac022195e20..bad33fbf9768 100644 --- a/spanner/test/cloudexecutor/worker_proxy.go +++ b/spanner/test/cloudexecutor/worker_proxy.go @@ -102,11 +102,11 @@ func getClientOptionsForSysTests() []option.ClientOption { ) log.Println("Reading service key file in executor code") - cloudSystestCredentialsJson, err := os.ReadFile(*serviceKeyFile) + cloudSystestCredentialsJSON, err := os.ReadFile(*serviceKeyFile) if err != nil { log.Fatal(err) } - config, err := google.JWTConfigFromJSON([]byte(cloudSystestCredentialsJson), spannerAdminScope, spannerDataScope) + config, err := google.JWTConfigFromJSON([]byte(cloudSystestCredentialsJSON), spannerAdminScope, spannerDataScope) if err != nil { log.Println(err) }