xref: /aosp_15_r20/external/googleapis/google/spanner/admin/instance/v1/spanner_instance_admin.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1// Copyright 2024 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15syntax = "proto3";
16
17package google.spanner.admin.instance.v1;
18
19import "google/api/annotations.proto";
20import "google/api/client.proto";
21import "google/api/field_behavior.proto";
22import "google/api/resource.proto";
23import "google/iam/v1/iam_policy.proto";
24import "google/iam/v1/policy.proto";
25import "google/longrunning/operations.proto";
26import "google/protobuf/empty.proto";
27import "google/protobuf/field_mask.proto";
28import "google/protobuf/timestamp.proto";
29import "google/spanner/admin/instance/v1/common.proto";
30
31option csharp_namespace = "Google.Cloud.Spanner.Admin.Instance.V1";
32option go_package = "cloud.google.com/go/spanner/admin/instance/apiv1/instancepb;instancepb";
33option java_multiple_files = true;
34option java_outer_classname = "SpannerInstanceAdminProto";
35option java_package = "com.google.spanner.admin.instance.v1";
36option php_namespace = "Google\\Cloud\\Spanner\\Admin\\Instance\\V1";
37option ruby_package = "Google::Cloud::Spanner::Admin::Instance::V1";
38
39// Cloud Spanner Instance Admin API
40//
41// The Cloud Spanner Instance Admin API can be used to create, delete,
42// modify and list instances. Instances are dedicated Cloud Spanner serving
43// and storage resources to be used by Cloud Spanner databases.
44//
45// Each instance has a "configuration", which dictates where the
46// serving resources for the Cloud Spanner instance are located (e.g.,
47// US-central, Europe). Configurations are created by Google based on
48// resource availability.
49//
50// Cloud Spanner billing is based on the instances that exist and their
51// sizes. After an instance exists, there are no additional
52// per-database or per-operation charges for use of the instance
53// (though there may be additional network bandwidth charges).
54// Instances offer isolation: problems with databases in one instance
55// will not affect other instances. However, within an instance
56// databases can affect each other. For example, if one database in an
57// instance receives a lot of requests and consumes most of the
58// instance resources, fewer resources are available for other
59// databases in that instance, and their performance may suffer.
60service InstanceAdmin {
61  option (google.api.default_host) = "spanner.googleapis.com";
62  option (google.api.oauth_scopes) =
63      "https://www.googleapis.com/auth/cloud-platform,"
64      "https://www.googleapis.com/auth/spanner.admin";
65
66  // Lists the supported instance configurations for a given project.
67  rpc ListInstanceConfigs(ListInstanceConfigsRequest)
68      returns (ListInstanceConfigsResponse) {
69    option (google.api.http) = {
70      get: "/v1/{parent=projects/*}/instanceConfigs"
71    };
72    option (google.api.method_signature) = "parent";
73  }
74
75  // Gets information about a particular instance configuration.
76  rpc GetInstanceConfig(GetInstanceConfigRequest) returns (InstanceConfig) {
77    option (google.api.http) = {
78      get: "/v1/{name=projects/*/instanceConfigs/*}"
79    };
80    option (google.api.method_signature) = "name";
81  }
82
83  // Creates an instance config and begins preparing it to be used. The
84  // returned [long-running operation][google.longrunning.Operation]
85  // can be used to track the progress of preparing the new
86  // instance config. The instance config name is assigned by the caller. If the
87  // named instance config already exists, `CreateInstanceConfig` returns
88  // `ALREADY_EXISTS`.
89  //
90  // Immediately after the request returns:
91  //
92  //   * The instance config is readable via the API, with all requested
93  //     attributes. The instance config's
94  //     [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
95  //     field is set to true. Its state is `CREATING`.
96  //
97  // While the operation is pending:
98  //
99  //   * Cancelling the operation renders the instance config immediately
100  //     unreadable via the API.
101  //   * Except for deleting the creating resource, all other attempts to modify
102  //     the instance config are rejected.
103  //
104  // Upon completion of the returned operation:
105  //
106  //   * Instances can be created using the instance configuration.
107  //   * The instance config's
108  //   [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
109  //   field becomes false. Its state becomes `READY`.
110  //
111  // The returned [long-running operation][google.longrunning.Operation] will
112  // have a name of the format
113  // `<instance_config_name>/operations/<operation_id>` and can be used to track
114  // creation of the instance config. The
115  // [metadata][google.longrunning.Operation.metadata] field type is
116  // [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata].
117  // The [response][google.longrunning.Operation.response] field type is
118  // [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if
119  // successful.
120  //
121  // Authorization requires `spanner.instanceConfigs.create` permission on
122  // the resource
123  // [parent][google.spanner.admin.instance.v1.CreateInstanceConfigRequest.parent].
124  rpc CreateInstanceConfig(CreateInstanceConfigRequest)
125      returns (google.longrunning.Operation) {
126    option (google.api.http) = {
127      post: "/v1/{parent=projects/*}/instanceConfigs"
128      body: "*"
129    };
130    option (google.api.method_signature) =
131        "parent,instance_config,instance_config_id";
132    option (google.longrunning.operation_info) = {
133      response_type: "google.spanner.admin.instance.v1.InstanceConfig"
134      metadata_type: "google.spanner.admin.instance.v1.CreateInstanceConfigMetadata"
135    };
136  }
137
138  // Updates an instance config. The returned
139  // [long-running operation][google.longrunning.Operation] can be used to track
140  // the progress of updating the instance. If the named instance config does
141  // not exist, returns `NOT_FOUND`.
142  //
143  // Only user managed configurations can be updated.
144  //
145  // Immediately after the request returns:
146  //
147  //   * The instance config's
148  //     [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
149  //     field is set to true.
150  //
151  // While the operation is pending:
152  //
153  //   * Cancelling the operation sets its metadata's
154  //     [cancel_time][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata.cancel_time].
155  //     The operation is guaranteed to succeed at undoing all changes, after
156  //     which point it terminates with a `CANCELLED` status.
157  //   * All other attempts to modify the instance config are rejected.
158  //   * Reading the instance config via the API continues to give the
159  //     pre-request values.
160  //
161  // Upon completion of the returned operation:
162  //
163  //   * Creating instances using the instance configuration uses the new
164  //     values.
165  //   * The instance config's new values are readable via the API.
166  //   * The instance config's
167  //   [reconciling][google.spanner.admin.instance.v1.InstanceConfig.reconciling]
168  //   field becomes false.
169  //
170  // The returned [long-running operation][google.longrunning.Operation] will
171  // have a name of the format
172  // `<instance_config_name>/operations/<operation_id>` and can be used to track
173  // the instance config modification.  The
174  // [metadata][google.longrunning.Operation.metadata] field type is
175  // [UpdateInstanceConfigMetadata][google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata].
176  // The [response][google.longrunning.Operation.response] field type is
177  // [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig], if
178  // successful.
179  //
180  // Authorization requires `spanner.instanceConfigs.update` permission on
181  // the resource [name][google.spanner.admin.instance.v1.InstanceConfig.name].
182  rpc UpdateInstanceConfig(UpdateInstanceConfigRequest)
183      returns (google.longrunning.Operation) {
184    option (google.api.http) = {
185      patch: "/v1/{instance_config.name=projects/*/instanceConfigs/*}"
186      body: "*"
187    };
188    option (google.api.method_signature) = "instance_config,update_mask";
189    option (google.longrunning.operation_info) = {
190      response_type: "google.spanner.admin.instance.v1.InstanceConfig"
191      metadata_type: "google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata"
192    };
193  }
194
195  // Deletes the instance config. Deletion is only allowed when no
196  // instances are using the configuration. If any instances are using
197  // the config, returns `FAILED_PRECONDITION`.
198  //
199  // Only user managed configurations can be deleted.
200  //
201  // Authorization requires `spanner.instanceConfigs.delete` permission on
202  // the resource [name][google.spanner.admin.instance.v1.InstanceConfig.name].
203  rpc DeleteInstanceConfig(DeleteInstanceConfigRequest)
204      returns (google.protobuf.Empty) {
205    option (google.api.http) = {
206      delete: "/v1/{name=projects/*/instanceConfigs/*}"
207    };
208    option (google.api.method_signature) = "name";
209  }
210
211  // Lists the user-managed instance config [long-running
212  // operations][google.longrunning.Operation] in the given project. An instance
213  // config operation has a name of the form
214  // `projects/<project>/instanceConfigs/<instance_config>/operations/<operation>`.
215  // The long-running operation
216  // [metadata][google.longrunning.Operation.metadata] field type
217  // `metadata.type_url` describes the type of the metadata. Operations returned
218  // include those that have completed/failed/canceled within the last 7 days,
219  // and pending operations. Operations returned are ordered by
220  // `operation.metadata.value.start_time` in descending order starting
221  // from the most recently started operation.
222  rpc ListInstanceConfigOperations(ListInstanceConfigOperationsRequest)
223      returns (ListInstanceConfigOperationsResponse) {
224    option (google.api.http) = {
225      get: "/v1/{parent=projects/*}/instanceConfigOperations"
226    };
227    option (google.api.method_signature) = "parent";
228  }
229
230  // Lists all instances in the given project.
231  rpc ListInstances(ListInstancesRequest) returns (ListInstancesResponse) {
232    option (google.api.http) = {
233      get: "/v1/{parent=projects/*}/instances"
234    };
235    option (google.api.method_signature) = "parent";
236  }
237
238  // Lists all instance partitions for the given instance.
239  rpc ListInstancePartitions(ListInstancePartitionsRequest)
240      returns (ListInstancePartitionsResponse) {
241    option (google.api.http) = {
242      get: "/v1/{parent=projects/*/instances/*}/instancePartitions"
243    };
244    option (google.api.method_signature) = "parent";
245  }
246
247  // Gets information about a particular instance.
248  rpc GetInstance(GetInstanceRequest) returns (Instance) {
249    option (google.api.http) = {
250      get: "/v1/{name=projects/*/instances/*}"
251    };
252    option (google.api.method_signature) = "name";
253  }
254
255  // Creates an instance and begins preparing it to begin serving. The
256  // returned [long-running operation][google.longrunning.Operation]
257  // can be used to track the progress of preparing the new
258  // instance. The instance name is assigned by the caller. If the
259  // named instance already exists, `CreateInstance` returns
260  // `ALREADY_EXISTS`.
261  //
262  // Immediately upon completion of this request:
263  //
264  //   * The instance is readable via the API, with all requested attributes
265  //     but no allocated resources. Its state is `CREATING`.
266  //
267  // Until completion of the returned operation:
268  //
269  //   * Cancelling the operation renders the instance immediately unreadable
270  //     via the API.
271  //   * The instance can be deleted.
272  //   * All other attempts to modify the instance are rejected.
273  //
274  // Upon completion of the returned operation:
275  //
276  //   * Billing for all successfully-allocated resources begins (some types
277  //     may have lower than the requested levels).
278  //   * Databases can be created in the instance.
279  //   * The instance's allocated resource levels are readable via the API.
280  //   * The instance's state becomes `READY`.
281  //
282  // The returned [long-running operation][google.longrunning.Operation] will
283  // have a name of the format `<instance_name>/operations/<operation_id>` and
284  // can be used to track creation of the instance.  The
285  // [metadata][google.longrunning.Operation.metadata] field type is
286  // [CreateInstanceMetadata][google.spanner.admin.instance.v1.CreateInstanceMetadata].
287  // The [response][google.longrunning.Operation.response] field type is
288  // [Instance][google.spanner.admin.instance.v1.Instance], if successful.
289  rpc CreateInstance(CreateInstanceRequest)
290      returns (google.longrunning.Operation) {
291    option (google.api.http) = {
292      post: "/v1/{parent=projects/*}/instances"
293      body: "*"
294    };
295    option (google.api.method_signature) = "parent,instance_id,instance";
296    option (google.longrunning.operation_info) = {
297      response_type: "google.spanner.admin.instance.v1.Instance"
298      metadata_type: "google.spanner.admin.instance.v1.CreateInstanceMetadata"
299    };
300  }
301
302  // Updates an instance, and begins allocating or releasing resources
303  // as requested. The returned [long-running
304  // operation][google.longrunning.Operation] can be used to track the
305  // progress of updating the instance. If the named instance does not
306  // exist, returns `NOT_FOUND`.
307  //
308  // Immediately upon completion of this request:
309  //
310  //   * For resource types for which a decrease in the instance's allocation
311  //     has been requested, billing is based on the newly-requested level.
312  //
313  // Until completion of the returned operation:
314  //
315  //   * Cancelling the operation sets its metadata's
316  //     [cancel_time][google.spanner.admin.instance.v1.UpdateInstanceMetadata.cancel_time],
317  //     and begins restoring resources to their pre-request values. The
318  //     operation is guaranteed to succeed at undoing all resource changes,
319  //     after which point it terminates with a `CANCELLED` status.
320  //   * All other attempts to modify the instance are rejected.
321  //   * Reading the instance via the API continues to give the pre-request
322  //     resource levels.
323  //
324  // Upon completion of the returned operation:
325  //
326  //   * Billing begins for all successfully-allocated resources (some types
327  //     may have lower than the requested levels).
328  //   * All newly-reserved resources are available for serving the instance's
329  //     tables.
330  //   * The instance's new resource levels are readable via the API.
331  //
332  // The returned [long-running operation][google.longrunning.Operation] will
333  // have a name of the format `<instance_name>/operations/<operation_id>` and
334  // can be used to track the instance modification.  The
335  // [metadata][google.longrunning.Operation.metadata] field type is
336  // [UpdateInstanceMetadata][google.spanner.admin.instance.v1.UpdateInstanceMetadata].
337  // The [response][google.longrunning.Operation.response] field type is
338  // [Instance][google.spanner.admin.instance.v1.Instance], if successful.
339  //
340  // Authorization requires `spanner.instances.update` permission on
341  // the resource [name][google.spanner.admin.instance.v1.Instance.name].
342  rpc UpdateInstance(UpdateInstanceRequest)
343      returns (google.longrunning.Operation) {
344    option (google.api.http) = {
345      patch: "/v1/{instance.name=projects/*/instances/*}"
346      body: "*"
347    };
348    option (google.api.method_signature) = "instance,field_mask";
349    option (google.longrunning.operation_info) = {
350      response_type: "google.spanner.admin.instance.v1.Instance"
351      metadata_type: "google.spanner.admin.instance.v1.UpdateInstanceMetadata"
352    };
353  }
354
355  // Deletes an instance.
356  //
357  // Immediately upon completion of the request:
358  //
359  //   * Billing ceases for all of the instance's reserved resources.
360  //
361  // Soon afterward:
362  //
363  //   * The instance and *all of its databases* immediately and
364  //     irrevocably disappear from the API. All data in the databases
365  //     is permanently deleted.
366  rpc DeleteInstance(DeleteInstanceRequest) returns (google.protobuf.Empty) {
367    option (google.api.http) = {
368      delete: "/v1/{name=projects/*/instances/*}"
369    };
370    option (google.api.method_signature) = "name";
371  }
372
373  // Sets the access control policy on an instance resource. Replaces any
374  // existing policy.
375  //
376  // Authorization requires `spanner.instances.setIamPolicy` on
377  // [resource][google.iam.v1.SetIamPolicyRequest.resource].
378  rpc SetIamPolicy(google.iam.v1.SetIamPolicyRequest)
379      returns (google.iam.v1.Policy) {
380    option (google.api.http) = {
381      post: "/v1/{resource=projects/*/instances/*}:setIamPolicy"
382      body: "*"
383    };
384    option (google.api.method_signature) = "resource,policy";
385  }
386
387  // Gets the access control policy for an instance resource. Returns an empty
388  // policy if an instance exists but does not have a policy set.
389  //
390  // Authorization requires `spanner.instances.getIamPolicy` on
391  // [resource][google.iam.v1.GetIamPolicyRequest.resource].
392  rpc GetIamPolicy(google.iam.v1.GetIamPolicyRequest)
393      returns (google.iam.v1.Policy) {
394    option (google.api.http) = {
395      post: "/v1/{resource=projects/*/instances/*}:getIamPolicy"
396      body: "*"
397    };
398    option (google.api.method_signature) = "resource";
399  }
400
401  // Returns permissions that the caller has on the specified instance resource.
402  //
403  // Attempting this RPC on a non-existent Cloud Spanner instance resource will
404  // result in a NOT_FOUND error if the user has `spanner.instances.list`
405  // permission on the containing Google Cloud Project. Otherwise returns an
406  // empty set of permissions.
407  rpc TestIamPermissions(google.iam.v1.TestIamPermissionsRequest)
408      returns (google.iam.v1.TestIamPermissionsResponse) {
409    option (google.api.http) = {
410      post: "/v1/{resource=projects/*/instances/*}:testIamPermissions"
411      body: "*"
412    };
413    option (google.api.method_signature) = "resource,permissions";
414  }
415
416  // Gets information about a particular instance partition.
417  rpc GetInstancePartition(GetInstancePartitionRequest)
418      returns (InstancePartition) {
419    option (google.api.http) = {
420      get: "/v1/{name=projects/*/instances/*/instancePartitions/*}"
421    };
422    option (google.api.method_signature) = "name";
423  }
424
425  // Creates an instance partition and begins preparing it to be used. The
426  // returned [long-running operation][google.longrunning.Operation]
427  // can be used to track the progress of preparing the new instance partition.
428  // The instance partition name is assigned by the caller. If the named
429  // instance partition already exists, `CreateInstancePartition` returns
430  // `ALREADY_EXISTS`.
431  //
432  // Immediately upon completion of this request:
433  //
434  //   * The instance partition is readable via the API, with all requested
435  //     attributes but no allocated resources. Its state is `CREATING`.
436  //
437  // Until completion of the returned operation:
438  //
439  //   * Cancelling the operation renders the instance partition immediately
440  //     unreadable via the API.
441  //   * The instance partition can be deleted.
442  //   * All other attempts to modify the instance partition are rejected.
443  //
444  // Upon completion of the returned operation:
445  //
446  //   * Billing for all successfully-allocated resources begins (some types
447  //     may have lower than the requested levels).
448  //   * Databases can start using this instance partition.
449  //   * The instance partition's allocated resource levels are readable via the
450  //     API.
451  //   * The instance partition's state becomes `READY`.
452  //
453  // The returned [long-running operation][google.longrunning.Operation] will
454  // have a name of the format
455  // `<instance_partition_name>/operations/<operation_id>` and can be used to
456  // track creation of the instance partition.  The
457  // [metadata][google.longrunning.Operation.metadata] field type is
458  // [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata].
459  // The [response][google.longrunning.Operation.response] field type is
460  // [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if
461  // successful.
462  rpc CreateInstancePartition(CreateInstancePartitionRequest)
463      returns (google.longrunning.Operation) {
464    option (google.api.http) = {
465      post: "/v1/{parent=projects/*/instances/*}/instancePartitions"
466      body: "*"
467    };
468    option (google.api.method_signature) =
469        "parent,instance_partition,instance_partition_id";
470    option (google.longrunning.operation_info) = {
471      response_type: "google.spanner.admin.instance.v1.InstancePartition"
472      metadata_type: "google.spanner.admin.instance.v1.CreateInstancePartitionMetadata"
473    };
474  }
475
476  // Deletes an existing instance partition. Requires that the
477  // instance partition is not used by any database or backup and is not the
478  // default instance partition of an instance.
479  //
480  // Authorization requires `spanner.instancePartitions.delete` permission on
481  // the resource
482  // [name][google.spanner.admin.instance.v1.InstancePartition.name].
483  rpc DeleteInstancePartition(DeleteInstancePartitionRequest)
484      returns (google.protobuf.Empty) {
485    option (google.api.http) = {
486      delete: "/v1/{name=projects/*/instances/*/instancePartitions/*}"
487    };
488    option (google.api.method_signature) = "name";
489  }
490
491  // Updates an instance partition, and begins allocating or releasing resources
492  // as requested. The returned [long-running
493  // operation][google.longrunning.Operation] can be used to track the
494  // progress of updating the instance partition. If the named instance
495  // partition does not exist, returns `NOT_FOUND`.
496  //
497  // Immediately upon completion of this request:
498  //
499  //   * For resource types for which a decrease in the instance partition's
500  //   allocation has been requested, billing is based on the newly-requested
501  //   level.
502  //
503  // Until completion of the returned operation:
504  //
505  //   * Cancelling the operation sets its metadata's
506  //     [cancel_time][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata.cancel_time],
507  //     and begins restoring resources to their pre-request values. The
508  //     operation is guaranteed to succeed at undoing all resource changes,
509  //     after which point it terminates with a `CANCELLED` status.
510  //   * All other attempts to modify the instance partition are rejected.
511  //   * Reading the instance partition via the API continues to give the
512  //     pre-request resource levels.
513  //
514  // Upon completion of the returned operation:
515  //
516  //   * Billing begins for all successfully-allocated resources (some types
517  //     may have lower than the requested levels).
518  //   * All newly-reserved resources are available for serving the instance
519  //     partition's tables.
520  //   * The instance partition's new resource levels are readable via the API.
521  //
522  // The returned [long-running operation][google.longrunning.Operation] will
523  // have a name of the format
524  // `<instance_partition_name>/operations/<operation_id>` and can be used to
525  // track the instance partition modification. The
526  // [metadata][google.longrunning.Operation.metadata] field type is
527  // [UpdateInstancePartitionMetadata][google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata].
528  // The [response][google.longrunning.Operation.response] field type is
529  // [InstancePartition][google.spanner.admin.instance.v1.InstancePartition], if
530  // successful.
531  //
532  // Authorization requires `spanner.instancePartitions.update` permission on
533  // the resource
534  // [name][google.spanner.admin.instance.v1.InstancePartition.name].
535  rpc UpdateInstancePartition(UpdateInstancePartitionRequest)
536      returns (google.longrunning.Operation) {
537    option (google.api.http) = {
538      patch: "/v1/{instance_partition.name=projects/*/instances/*/instancePartitions/*}"
539      body: "*"
540    };
541    option (google.api.method_signature) = "instance_partition,field_mask";
542    option (google.longrunning.operation_info) = {
543      response_type: "google.spanner.admin.instance.v1.InstancePartition"
544      metadata_type: "google.spanner.admin.instance.v1.UpdateInstancePartitionMetadata"
545    };
546  }
547
548  // Lists instance partition [long-running
549  // operations][google.longrunning.Operation] in the given instance.
550  // An instance partition operation has a name of the form
551  // `projects/<project>/instances/<instance>/instancePartitions/<instance_partition>/operations/<operation>`.
552  // The long-running operation
553  // [metadata][google.longrunning.Operation.metadata] field type
554  // `metadata.type_url` describes the type of the metadata. Operations returned
555  // include those that have completed/failed/canceled within the last 7 days,
556  // and pending operations. Operations returned are ordered by
557  // `operation.metadata.value.start_time` in descending order starting from the
558  // most recently started operation.
559  //
560  // Authorization requires `spanner.instancePartitionOperations.list`
561  // permission on the resource
562  // [parent][google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest.parent].
563  rpc ListInstancePartitionOperations(ListInstancePartitionOperationsRequest)
564      returns (ListInstancePartitionOperationsResponse) {
565    option (google.api.http) = {
566      get: "/v1/{parent=projects/*/instances/*}/instancePartitionOperations"
567    };
568    option (google.api.method_signature) = "parent";
569  }
570}
571
572message ReplicaInfo {
573  // Indicates the type of replica.  See the [replica types
574  // documentation](https://cloud.google.com/spanner/docs/replication#replica_types)
575  // for more details.
576  enum ReplicaType {
577    // Not specified.
578    TYPE_UNSPECIFIED = 0;
579
580    // Read-write replicas support both reads and writes. These replicas:
581    //
582    // * Maintain a full copy of your data.
583    // * Serve reads.
584    // * Can vote whether to commit a write.
585    // * Participate in leadership election.
586    // * Are eligible to become a leader.
587    READ_WRITE = 1;
588
589    // Read-only replicas only support reads (not writes). Read-only replicas:
590    //
591    // * Maintain a full copy of your data.
592    // * Serve reads.
593    // * Do not participate in voting to commit writes.
594    // * Are not eligible to become a leader.
595    READ_ONLY = 2;
596
597    // Witness replicas don't support reads but do participate in voting to
598    // commit writes. Witness replicas:
599    //
600    // * Do not maintain a full copy of data.
601    // * Do not serve reads.
602    // * Vote whether to commit writes.
603    // * Participate in leader election but are not eligible to become leader.
604    WITNESS = 3;
605  }
606
607  // The location of the serving resources, e.g. "us-central1".
608  string location = 1;
609
610  // The type of replica.
611  ReplicaType type = 2;
612
613  // If true, this location is designated as the default leader location where
614  // leader replicas are placed. See the [region types
615  // documentation](https://cloud.google.com/spanner/docs/instances#region_types)
616  // for more details.
617  bool default_leader_location = 3;
618}
619
620// A possible configuration for a Cloud Spanner instance. Configurations
621// define the geographic placement of nodes and their replication.
622message InstanceConfig {
623  option (google.api.resource) = {
624    type: "spanner.googleapis.com/InstanceConfig"
625    pattern: "projects/{project}/instanceConfigs/{instance_config}"
626  };
627
628  // The type of this configuration.
629  enum Type {
630    // Unspecified.
631    TYPE_UNSPECIFIED = 0;
632
633    // Google managed configuration.
634    GOOGLE_MANAGED = 1;
635
636    // User managed configuration.
637    USER_MANAGED = 2;
638  }
639
640  // Indicates the current state of the instance config.
641  enum State {
642    // Not specified.
643    STATE_UNSPECIFIED = 0;
644
645    // The instance config is still being created.
646    CREATING = 1;
647
648    // The instance config is fully created and ready to be used to create
649    // instances.
650    READY = 2;
651  }
652
653  // A unique identifier for the instance configuration.  Values
654  // are of the form
655  // `projects/<project>/instanceConfigs/[a-z][-a-z0-9]*`.
656  string name = 1;
657
658  // The name of this instance configuration as it appears in UIs.
659  string display_name = 2;
660
661  // Output only. Whether this instance config is a Google or User Managed
662  // Configuration.
663  Type config_type = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
664
665  // The geographic placement of nodes in this instance configuration and their
666  // replication properties.
667  repeated ReplicaInfo replicas = 3;
668
669  // Output only. The available optional replicas to choose from for user
670  // managed configurations. Populated for Google managed configurations.
671  repeated ReplicaInfo optional_replicas = 6
672      [(google.api.field_behavior) = OUTPUT_ONLY];
673
674  // Base configuration name, e.g. projects/<project_name>/instanceConfigs/nam3,
675  // based on which this configuration is created. Only set for user managed
676  // configurations. `base_config` must refer to a configuration of type
677  // GOOGLE_MANAGED in the same project as this configuration.
678  string base_config = 7 [(google.api.resource_reference) = {
679    type: "spanner.googleapis.com/InstanceConfig"
680  }];
681
682  // Cloud Labels are a flexible and lightweight mechanism for organizing cloud
683  // resources into groups that reflect a customer's organizational needs and
684  // deployment strategies. Cloud Labels can be used to filter collections of
685  // resources. They can be used to control how resource metrics are aggregated.
686  // And they can be used as arguments to policy management rules (e.g. route,
687  // firewall, load balancing, etc.).
688  //
689  //  * Label keys must be between 1 and 63 characters long and must conform to
690  //    the following regular expression: `[a-z][a-z0-9_-]{0,62}`.
691  //  * Label values must be between 0 and 63 characters long and must conform
692  //    to the regular expression `[a-z0-9_-]{0,63}`.
693  //  * No more than 64 labels can be associated with a given resource.
694  //
695  // See https://goo.gl/xmQnxf for more information on and examples of labels.
696  //
697  // If you plan to use labels in your own code, please note that additional
698  // characters may be allowed in the future. Therefore, you are advised to use
699  // an internal label representation, such as JSON, which doesn't rely upon
700  // specific characters being disallowed.  For example, representing labels
701  // as the string:  name + "_" + value  would prove problematic if we were to
702  // allow "_" in a future release.
703  map<string, string> labels = 8;
704
705  // etag is used for optimistic concurrency control as a way
706  // to help prevent simultaneous updates of a instance config from overwriting
707  // each other. It is strongly suggested that systems make use of the etag in
708  // the read-modify-write cycle to perform instance config updates in order to
709  // avoid race conditions: An etag is returned in the response which contains
710  // instance configs, and systems are expected to put that etag in the request
711  // to update instance config to ensure that their change will be applied to
712  // the same version of the instance config.
713  // If no etag is provided in the call to update instance config, then the
714  // existing instance config is overwritten blindly.
715  string etag = 9;
716
717  // Allowed values of the "default_leader" schema option for databases in
718  // instances that use this instance configuration.
719  repeated string leader_options = 4;
720
721  // Output only. If true, the instance config is being created or updated. If
722  // false, there are no ongoing operations for the instance config.
723  bool reconciling = 10 [(google.api.field_behavior) = OUTPUT_ONLY];
724
725  // Output only. The current instance config state.
726  State state = 11 [(google.api.field_behavior) = OUTPUT_ONLY];
727}
728
729// Autoscaling config for an instance.
730message AutoscalingConfig {
731  // The autoscaling limits for the instance. Users can define the minimum and
732  // maximum compute capacity allocated to the instance, and the autoscaler will
733  // only scale within that range. Users can either use nodes or processing
734  // units to specify the limits, but should use the same unit to set both the
735  // min_limit and max_limit.
736  message AutoscalingLimits {
737    // The minimum compute capacity for the instance.
738    oneof min_limit {
739      // Minimum number of nodes allocated to the instance. If set, this number
740      // should be greater than or equal to 1.
741      int32 min_nodes = 1;
742
743      // Minimum number of processing units allocated to the instance. If set,
744      // this number should be multiples of 1000.
745      int32 min_processing_units = 2;
746    }
747
748    // The maximum compute capacity for the instance. The maximum compute
749    // capacity should be less than or equal to 10X the minimum compute
750    // capacity.
751    oneof max_limit {
752      // Maximum number of nodes allocated to the instance. If set, this number
753      // should be greater than or equal to min_nodes.
754      int32 max_nodes = 3;
755
756      // Maximum number of processing units allocated to the instance. If set,
757      // this number should be multiples of 1000 and be greater than or equal to
758      // min_processing_units.
759      int32 max_processing_units = 4;
760    }
761  }
762
763  // The autoscaling targets for an instance.
764  message AutoscalingTargets {
765    // Required. The target high priority cpu utilization percentage that the
766    // autoscaler should be trying to achieve for the instance. This number is
767    // on a scale from 0 (no utilization) to 100 (full utilization). The valid
768    // range is [10, 90] inclusive.
769    int32 high_priority_cpu_utilization_percent = 1
770        [(google.api.field_behavior) = REQUIRED];
771
772    // Required. The target storage utilization percentage that the autoscaler
773    // should be trying to achieve for the instance. This number is on a scale
774    // from 0 (no utilization) to 100 (full utilization). The valid range is
775    // [10, 100] inclusive.
776    int32 storage_utilization_percent = 2
777        [(google.api.field_behavior) = REQUIRED];
778  }
779
780  // Required. Autoscaling limits for an instance.
781  AutoscalingLimits autoscaling_limits = 1
782      [(google.api.field_behavior) = REQUIRED];
783
784  // Required. The autoscaling targets for an instance.
785  AutoscalingTargets autoscaling_targets = 2
786      [(google.api.field_behavior) = REQUIRED];
787}
788
789// An isolated set of Cloud Spanner resources on which databases can be hosted.
790message Instance {
791  option (google.api.resource) = {
792    type: "spanner.googleapis.com/Instance"
793    pattern: "projects/{project}/instances/{instance}"
794  };
795
796  // Indicates the current state of the instance.
797  enum State {
798    // Not specified.
799    STATE_UNSPECIFIED = 0;
800
801    // The instance is still being created. Resources may not be
802    // available yet, and operations such as database creation may not
803    // work.
804    CREATING = 1;
805
806    // The instance is fully created and ready to do work such as
807    // creating databases.
808    READY = 2;
809  }
810
811  // Required. A unique identifier for the instance, which cannot be changed
812  // after the instance is created. Values are of the form
813  // `projects/<project>/instances/[a-z][-a-z0-9]*[a-z0-9]`. The final
814  // segment of the name must be between 2 and 64 characters in length.
815  string name = 1 [(google.api.field_behavior) = REQUIRED];
816
817  // Required. The name of the instance's configuration. Values are of the form
818  // `projects/<project>/instanceConfigs/<configuration>`. See
819  // also [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig] and
820  // [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs].
821  string config = 2 [
822    (google.api.field_behavior) = REQUIRED,
823    (google.api.resource_reference) = {
824      type: "spanner.googleapis.com/InstanceConfig"
825    }
826  ];
827
828  // Required. The descriptive name for this instance as it appears in UIs.
829  // Must be unique per project and between 4 and 30 characters in length.
830  string display_name = 3 [(google.api.field_behavior) = REQUIRED];
831
832  // The number of nodes allocated to this instance. At most one of either
833  // node_count or processing_units should be present in the message.
834  //
835  // Users can set the node_count field to specify the target number of nodes
836  // allocated to the instance.
837  //
838  // This may be zero in API responses for instances that are not yet in state
839  // `READY`.
840  //
841  // See [the
842  // documentation](https://cloud.google.com/spanner/docs/compute-capacity)
843  // for more information about nodes and processing units.
844  int32 node_count = 5;
845
846  // The number of processing units allocated to this instance. At most one of
847  // processing_units or node_count should be present in the message.
848  //
849  // Users can set the processing_units field to specify the target number of
850  // processing units allocated to the instance.
851  //
852  // This may be zero in API responses for instances that are not yet in state
853  // `READY`.
854  //
855  // See [the
856  // documentation](https://cloud.google.com/spanner/docs/compute-capacity)
857  // for more information about nodes and processing units.
858  int32 processing_units = 9;
859
860  // Optional. The autoscaling configuration. Autoscaling is enabled if this
861  // field is set. When autoscaling is enabled, node_count and processing_units
862  // are treated as OUTPUT_ONLY fields and reflect the current compute capacity
863  // allocated to the instance.
864  AutoscalingConfig autoscaling_config = 17
865      [(google.api.field_behavior) = OPTIONAL];
866
867  // Output only. The current instance state. For
868  // [CreateInstance][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstance],
869  // the state must be either omitted or set to `CREATING`. For
870  // [UpdateInstance][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstance],
871  // the state must be either omitted or set to `READY`.
872  State state = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
873
874  // Cloud Labels are a flexible and lightweight mechanism for organizing cloud
875  // resources into groups that reflect a customer's organizational needs and
876  // deployment strategies. Cloud Labels can be used to filter collections of
877  // resources. They can be used to control how resource metrics are aggregated.
878  // And they can be used as arguments to policy management rules (e.g. route,
879  // firewall, load balancing, etc.).
880  //
881  //  * Label keys must be between 1 and 63 characters long and must conform to
882  //    the following regular expression: `[a-z][a-z0-9_-]{0,62}`.
883  //  * Label values must be between 0 and 63 characters long and must conform
884  //    to the regular expression `[a-z0-9_-]{0,63}`.
885  //  * No more than 64 labels can be associated with a given resource.
886  //
887  // See https://goo.gl/xmQnxf for more information on and examples of labels.
888  //
889  // If you plan to use labels in your own code, please note that additional
890  // characters may be allowed in the future. And so you are advised to use an
891  // internal label representation, such as JSON, which doesn't rely upon
892  // specific characters being disallowed.  For example, representing labels
893  // as the string:  name + "_" + value  would prove problematic if we were to
894  // allow "_" in a future release.
895  map<string, string> labels = 7;
896
897  // Deprecated. This field is not populated.
898  repeated string endpoint_uris = 8;
899
900  // Output only. The time at which the instance was created.
901  google.protobuf.Timestamp create_time = 11
902      [(google.api.field_behavior) = OUTPUT_ONLY];
903
904  // Output only. The time at which the instance was most recently updated.
905  google.protobuf.Timestamp update_time = 12
906      [(google.api.field_behavior) = OUTPUT_ONLY];
907}
908
909// The request for
910// [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs].
911message ListInstanceConfigsRequest {
912  // Required. The name of the project for which a list of supported instance
913  // configurations is requested. Values are of the form
914  // `projects/<project>`.
915  string parent = 1 [
916    (google.api.field_behavior) = REQUIRED,
917    (google.api.resource_reference) = {
918      type: "cloudresourcemanager.googleapis.com/Project"
919    }
920  ];
921
922  // Number of instance configurations to be returned in the response. If 0 or
923  // less, defaults to the server's maximum allowed page size.
924  int32 page_size = 2;
925
926  // If non-empty, `page_token` should contain a
927  // [next_page_token][google.spanner.admin.instance.v1.ListInstanceConfigsResponse.next_page_token]
928  // from a previous
929  // [ListInstanceConfigsResponse][google.spanner.admin.instance.v1.ListInstanceConfigsResponse].
930  string page_token = 3;
931}
932
933// The response for
934// [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs].
935message ListInstanceConfigsResponse {
936  // The list of requested instance configurations.
937  repeated InstanceConfig instance_configs = 1;
938
939  // `next_page_token` can be sent in a subsequent
940  // [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs]
941  // call to fetch more of the matching instance configurations.
942  string next_page_token = 2;
943}
944
945// The request for
946// [GetInstanceConfigRequest][google.spanner.admin.instance.v1.InstanceAdmin.GetInstanceConfig].
947message GetInstanceConfigRequest {
948  // Required. The name of the requested instance configuration. Values are of
949  // the form `projects/<project>/instanceConfigs/<config>`.
950  string name = 1 [
951    (google.api.field_behavior) = REQUIRED,
952    (google.api.resource_reference) = {
953      type: "spanner.googleapis.com/InstanceConfig"
954    }
955  ];
956}
957
958// The request for
959// [CreateInstanceConfigRequest][InstanceAdmin.CreateInstanceConfigRequest].
960message CreateInstanceConfigRequest {
961  // Required. The name of the project in which to create the instance config.
962  // Values are of the form `projects/<project>`.
963  string parent = 1 [
964    (google.api.field_behavior) = REQUIRED,
965    (google.api.resource_reference) = {
966      type: "cloudresourcemanager.googleapis.com/Project"
967    }
968  ];
969
970  // Required. The ID of the instance config to create.  Valid identifiers are
971  // of the form `custom-[-a-z0-9]*[a-z0-9]` and must be between 2 and 64
972  // characters in length. The `custom-` prefix is required to avoid name
973  // conflicts with Google managed configurations.
974  string instance_config_id = 2 [(google.api.field_behavior) = REQUIRED];
975
976  // Required. The InstanceConfig proto of the configuration to create.
977  // instance_config.name must be
978  // `<parent>/instanceConfigs/<instance_config_id>`.
979  // instance_config.base_config must be a Google managed configuration name,
980  // e.g. <parent>/instanceConfigs/us-east1, <parent>/instanceConfigs/nam3.
981  InstanceConfig instance_config = 3 [(google.api.field_behavior) = REQUIRED];
982
983  // An option to validate, but not actually execute, a request,
984  // and provide the same response.
985  bool validate_only = 4;
986}
987
988// The request for
989// [UpdateInstanceConfigRequest][InstanceAdmin.UpdateInstanceConfigRequest].
990message UpdateInstanceConfigRequest {
991  // Required. The user instance config to update, which must always include the
992  // instance config name. Otherwise, only fields mentioned in
993  // [update_mask][google.spanner.admin.instance.v1.UpdateInstanceConfigRequest.update_mask]
994  // need be included. To prevent conflicts of concurrent updates,
995  // [etag][google.spanner.admin.instance.v1.InstanceConfig.reconciling] can
996  // be used.
997  InstanceConfig instance_config = 1 [(google.api.field_behavior) = REQUIRED];
998
999  // Required. A mask specifying which fields in
1000  // [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig] should be
1001  // updated. The field mask must always be specified; this prevents any future
1002  // fields in [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig]
1003  // from being erased accidentally by clients that do not know about them. Only
1004  // display_name and labels can be updated.
1005  google.protobuf.FieldMask update_mask = 2
1006      [(google.api.field_behavior) = REQUIRED];
1007
1008  // An option to validate, but not actually execute, a request,
1009  // and provide the same response.
1010  bool validate_only = 3;
1011}
1012
1013// The request for
1014// [DeleteInstanceConfigRequest][InstanceAdmin.DeleteInstanceConfigRequest].
1015message DeleteInstanceConfigRequest {
1016  // Required. The name of the instance configuration to be deleted.
1017  // Values are of the form
1018  // `projects/<project>/instanceConfigs/<instance_config>`
1019  string name = 1 [
1020    (google.api.field_behavior) = REQUIRED,
1021    (google.api.resource_reference) = {
1022      type: "spanner.googleapis.com/InstanceConfig"
1023    }
1024  ];
1025
1026  // Used for optimistic concurrency control as a way to help prevent
1027  // simultaneous deletes of an instance config from overwriting each
1028  // other. If not empty, the API
1029  // only deletes the instance config when the etag provided matches the current
1030  // status of the requested instance config. Otherwise, deletes the instance
1031  // config without checking the current status of the requested instance
1032  // config.
1033  string etag = 2;
1034
1035  // An option to validate, but not actually execute, a request,
1036  // and provide the same response.
1037  bool validate_only = 3;
1038}
1039
1040// The request for
1041// [ListInstanceConfigOperations][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigOperations].
1042message ListInstanceConfigOperationsRequest {
1043  // Required. The project of the instance config operations.
1044  // Values are of the form `projects/<project>`.
1045  string parent = 1 [
1046    (google.api.field_behavior) = REQUIRED,
1047    (google.api.resource_reference) = {
1048      type: "cloudresourcemanager.googleapis.com/Project"
1049    }
1050  ];
1051
1052  // An expression that filters the list of returned operations.
1053  //
1054  // A filter expression consists of a field name, a
1055  // comparison operator, and a value for filtering.
1056  // The value must be a string, a number, or a boolean. The comparison operator
1057  // must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
1058  // Colon `:` is the contains operator. Filter rules are not case sensitive.
1059  //
1060  // The following fields in the [Operation][google.longrunning.Operation]
1061  // are eligible for filtering:
1062  //
1063  //   * `name` - The name of the long-running operation
1064  //   * `done` - False if the operation is in progress, else true.
1065  //   * `metadata.@type` - the type of metadata. For example, the type string
1066  //      for
1067  //      [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata]
1068  //      is
1069  //      `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata`.
1070  //   * `metadata.<field_name>` - any field in metadata.value.
1071  //      `metadata.@type` must be specified first, if filtering on metadata
1072  //      fields.
1073  //   * `error` - Error associated with the long-running operation.
1074  //   * `response.@type` - the type of response.
1075  //   * `response.<field_name>` - any field in response.value.
1076  //
1077  // You can combine multiple expressions by enclosing each expression in
1078  // parentheses. By default, expressions are combined with AND logic. However,
1079  // you can specify AND, OR, and NOT logic explicitly.
1080  //
1081  // Here are a few examples:
1082  //
1083  //   * `done:true` - The operation is complete.
1084  //   * `(metadata.@type=` \
1085  //     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
1086  //     AND` \
1087  //     `(metadata.instance_config.name:custom-config) AND` \
1088  //     `(metadata.progress.start_time < \"2021-03-28T14:50:00Z\") AND` \
1089  //     `(error:*)` - Return operations where:
1090  //     * The operation's metadata type is
1091  //     [CreateInstanceConfigMetadata][google.spanner.admin.instance.v1.CreateInstanceConfigMetadata].
1092  //     * The instance config name contains "custom-config".
1093  //     * The operation started before 2021-03-28T14:50:00Z.
1094  //     * The operation resulted in an error.
1095  string filter = 2;
1096
1097  // Number of operations to be returned in the response. If 0 or
1098  // less, defaults to the server's maximum allowed page size.
1099  int32 page_size = 3;
1100
1101  // If non-empty, `page_token` should contain a
1102  // [next_page_token][google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse.next_page_token]
1103  // from a previous
1104  // [ListInstanceConfigOperationsResponse][google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse]
1105  // to the same `parent` and with the same `filter`.
1106  string page_token = 4;
1107}
1108
1109// The response for
1110// [ListInstanceConfigOperations][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigOperations].
1111message ListInstanceConfigOperationsResponse {
1112  // The list of matching instance config [long-running
1113  // operations][google.longrunning.Operation]. Each operation's name will be
1114  // prefixed by the instance config's name. The operation's
1115  // [metadata][google.longrunning.Operation.metadata] field type
1116  // `metadata.type_url` describes the type of the metadata.
1117  repeated google.longrunning.Operation operations = 1;
1118
1119  // `next_page_token` can be sent in a subsequent
1120  // [ListInstanceConfigOperations][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigOperations]
1121  // call to fetch more of the matching metadata.
1122  string next_page_token = 2;
1123}
1124
1125// The request for
1126// [GetInstance][google.spanner.admin.instance.v1.InstanceAdmin.GetInstance].
1127message GetInstanceRequest {
1128  // Required. The name of the requested instance. Values are of the form
1129  // `projects/<project>/instances/<instance>`.
1130  string name = 1 [
1131    (google.api.field_behavior) = REQUIRED,
1132    (google.api.resource_reference) = {
1133      type: "spanner.googleapis.com/Instance"
1134    }
1135  ];
1136
1137  // If field_mask is present, specifies the subset of
1138  // [Instance][google.spanner.admin.instance.v1.Instance] fields that should be
1139  // returned. If absent, all
1140  // [Instance][google.spanner.admin.instance.v1.Instance] fields are returned.
1141  google.protobuf.FieldMask field_mask = 2;
1142}
1143
1144// The request for
1145// [CreateInstance][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstance].
1146message CreateInstanceRequest {
1147  // Required. The name of the project in which to create the instance. Values
1148  // are of the form `projects/<project>`.
1149  string parent = 1 [
1150    (google.api.field_behavior) = REQUIRED,
1151    (google.api.resource_reference) = {
1152      type: "cloudresourcemanager.googleapis.com/Project"
1153    }
1154  ];
1155
1156  // Required. The ID of the instance to create.  Valid identifiers are of the
1157  // form `[a-z][-a-z0-9]*[a-z0-9]` and must be between 2 and 64 characters in
1158  // length.
1159  string instance_id = 2 [(google.api.field_behavior) = REQUIRED];
1160
1161  // Required. The instance to create.  The name may be omitted, but if
1162  // specified must be `<parent>/instances/<instance_id>`.
1163  Instance instance = 3 [(google.api.field_behavior) = REQUIRED];
1164}
1165
1166// The request for
1167// [ListInstances][google.spanner.admin.instance.v1.InstanceAdmin.ListInstances].
1168message ListInstancesRequest {
1169  // Required. The name of the project for which a list of instances is
1170  // requested. Values are of the form `projects/<project>`.
1171  string parent = 1 [
1172    (google.api.field_behavior) = REQUIRED,
1173    (google.api.resource_reference) = {
1174      type: "cloudresourcemanager.googleapis.com/Project"
1175    }
1176  ];
1177
1178  // Number of instances to be returned in the response. If 0 or less, defaults
1179  // to the server's maximum allowed page size.
1180  int32 page_size = 2;
1181
1182  // If non-empty, `page_token` should contain a
1183  // [next_page_token][google.spanner.admin.instance.v1.ListInstancesResponse.next_page_token]
1184  // from a previous
1185  // [ListInstancesResponse][google.spanner.admin.instance.v1.ListInstancesResponse].
1186  string page_token = 3;
1187
1188  // An expression for filtering the results of the request. Filter rules are
1189  // case insensitive. The fields eligible for filtering are:
1190  //
1191  //   * `name`
1192  //   * `display_name`
1193  //   * `labels.key` where key is the name of a label
1194  //
1195  // Some examples of using filters are:
1196  //
1197  //   * `name:*` --> The instance has a name.
1198  //   * `name:Howl` --> The instance's name contains the string "howl".
1199  //   * `name:HOWL` --> Equivalent to above.
1200  //   * `NAME:howl` --> Equivalent to above.
1201  //   * `labels.env:*` --> The instance has the label "env".
1202  //   * `labels.env:dev` --> The instance has the label "env" and the value of
1203  //                        the label contains the string "dev".
1204  //   * `name:howl labels.env:dev` --> The instance's name contains "howl" and
1205  //                                  it has the label "env" with its value
1206  //                                  containing "dev".
1207  string filter = 4;
1208
1209  // Deadline used while retrieving metadata for instances.
1210  // Instances whose metadata cannot be retrieved within this deadline will be
1211  // added to
1212  // [unreachable][google.spanner.admin.instance.v1.ListInstancesResponse.unreachable]
1213  // in
1214  // [ListInstancesResponse][google.spanner.admin.instance.v1.ListInstancesResponse].
1215  google.protobuf.Timestamp instance_deadline = 5;
1216}
1217
1218// The response for
1219// [ListInstances][google.spanner.admin.instance.v1.InstanceAdmin.ListInstances].
1220message ListInstancesResponse {
1221  // The list of requested instances.
1222  repeated Instance instances = 1;
1223
1224  // `next_page_token` can be sent in a subsequent
1225  // [ListInstances][google.spanner.admin.instance.v1.InstanceAdmin.ListInstances]
1226  // call to fetch more of the matching instances.
1227  string next_page_token = 2;
1228
1229  // The list of unreachable instances.
1230  // It includes the names of instances whose metadata could not be retrieved
1231  // within
1232  // [instance_deadline][google.spanner.admin.instance.v1.ListInstancesRequest.instance_deadline].
1233  repeated string unreachable = 3;
1234}
1235
1236// The request for
1237// [UpdateInstance][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstance].
1238message UpdateInstanceRequest {
1239  // Required. The instance to update, which must always include the instance
1240  // name.  Otherwise, only fields mentioned in
1241  // [field_mask][google.spanner.admin.instance.v1.UpdateInstanceRequest.field_mask]
1242  // need be included.
1243  Instance instance = 1 [(google.api.field_behavior) = REQUIRED];
1244
1245  // Required. A mask specifying which fields in
1246  // [Instance][google.spanner.admin.instance.v1.Instance] should be updated.
1247  // The field mask must always be specified; this prevents any future fields in
1248  // [Instance][google.spanner.admin.instance.v1.Instance] from being erased
1249  // accidentally by clients that do not know about them.
1250  google.protobuf.FieldMask field_mask = 2
1251      [(google.api.field_behavior) = REQUIRED];
1252}
1253
1254// The request for
1255// [DeleteInstance][google.spanner.admin.instance.v1.InstanceAdmin.DeleteInstance].
1256message DeleteInstanceRequest {
1257  // Required. The name of the instance to be deleted. Values are of the form
1258  // `projects/<project>/instances/<instance>`
1259  string name = 1 [
1260    (google.api.field_behavior) = REQUIRED,
1261    (google.api.resource_reference) = {
1262      type: "spanner.googleapis.com/Instance"
1263    }
1264  ];
1265}
1266
1267// Metadata type for the operation returned by
1268// [CreateInstance][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstance].
1269message CreateInstanceMetadata {
1270  // The instance being created.
1271  Instance instance = 1;
1272
1273  // The time at which the
1274  // [CreateInstance][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstance]
1275  // request was received.
1276  google.protobuf.Timestamp start_time = 2;
1277
1278  // The time at which this operation was cancelled. If set, this operation is
1279  // in the process of undoing itself (which is guaranteed to succeed) and
1280  // cannot be cancelled again.
1281  google.protobuf.Timestamp cancel_time = 3;
1282
1283  // The time at which this operation failed or was completed successfully.
1284  google.protobuf.Timestamp end_time = 4;
1285
1286  // The expected fulfillment period of this create operation.
1287  FulfillmentPeriod expected_fulfillment_period = 5;
1288}
1289
1290// Metadata type for the operation returned by
1291// [UpdateInstance][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstance].
1292message UpdateInstanceMetadata {
1293  // The desired end state of the update.
1294  Instance instance = 1;
1295
1296  // The time at which
1297  // [UpdateInstance][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstance]
1298  // request was received.
1299  google.protobuf.Timestamp start_time = 2;
1300
1301  // The time at which this operation was cancelled. If set, this operation is
1302  // in the process of undoing itself (which is guaranteed to succeed) and
1303  // cannot be cancelled again.
1304  google.protobuf.Timestamp cancel_time = 3;
1305
1306  // The time at which this operation failed or was completed successfully.
1307  google.protobuf.Timestamp end_time = 4;
1308
1309  // The expected fulfillment period of this update operation.
1310  FulfillmentPeriod expected_fulfillment_period = 5;
1311}
1312
1313// Metadata type for the operation returned by
1314// [CreateInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstanceConfig].
1315message CreateInstanceConfigMetadata {
1316  // The target instance config end state.
1317  InstanceConfig instance_config = 1;
1318
1319  // The progress of the
1320  // [CreateInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstanceConfig]
1321  // operation.
1322  OperationProgress progress = 2;
1323
1324  // The time at which this operation was cancelled.
1325  google.protobuf.Timestamp cancel_time = 3;
1326}
1327
1328// Metadata type for the operation returned by
1329// [UpdateInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstanceConfig].
1330message UpdateInstanceConfigMetadata {
1331  // The desired instance config after updating.
1332  InstanceConfig instance_config = 1;
1333
1334  // The progress of the
1335  // [UpdateInstanceConfig][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstanceConfig]
1336  // operation.
1337  OperationProgress progress = 2;
1338
1339  // The time at which this operation was cancelled.
1340  google.protobuf.Timestamp cancel_time = 3;
1341}
1342
1343// An isolated set of Cloud Spanner resources that databases can define
1344// placements on.
1345message InstancePartition {
1346  option (google.api.resource) = {
1347    type: "spanner.googleapis.com/InstancePartition"
1348    pattern: "projects/{project}/instances/{instance}/instancePartitions/{instance_partition}"
1349  };
1350
1351  // Indicates the current state of the instance partition.
1352  enum State {
1353    // Not specified.
1354    STATE_UNSPECIFIED = 0;
1355
1356    // The instance partition is still being created. Resources may not be
1357    // available yet, and operations such as creating placements using this
1358    // instance partition may not work.
1359    CREATING = 1;
1360
1361    // The instance partition is fully created and ready to do work such as
1362    // creating placements and using in databases.
1363    READY = 2;
1364  }
1365
1366  // Required. A unique identifier for the instance partition. Values are of the
1367  // form
1368  // `projects/<project>/instances/<instance>/instancePartitions/[a-z][-a-z0-9]*[a-z0-9]`.
1369  // The final segment of the name must be between 2 and 64 characters in
1370  // length. An instance partition's name cannot be changed after the instance
1371  // partition is created.
1372  string name = 1 [(google.api.field_behavior) = REQUIRED];
1373
1374  // Required. The name of the instance partition's configuration. Values are of
1375  // the form `projects/<project>/instanceConfigs/<configuration>`. See also
1376  // [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig] and
1377  // [ListInstanceConfigs][google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs].
1378  string config = 2 [
1379    (google.api.field_behavior) = REQUIRED,
1380    (google.api.resource_reference) = {
1381      type: "spanner.googleapis.com/InstanceConfig"
1382    }
1383  ];
1384
1385  // Required. The descriptive name for this instance partition as it appears in
1386  // UIs. Must be unique per project and between 4 and 30 characters in length.
1387  string display_name = 3 [(google.api.field_behavior) = REQUIRED];
1388
1389  // Compute capacity defines amount of server and storage resources that are
1390  // available to the databases in an instance partition. At most one of either
1391  // node_count or processing_units should be present in the message. See [the
1392  // documentation](https://cloud.google.com/spanner/docs/compute-capacity)
1393  // for more information about nodes and processing units.
1394  oneof compute_capacity {
1395    // The number of nodes allocated to this instance partition.
1396    //
1397    // Users can set the node_count field to specify the target number of nodes
1398    // allocated to the instance partition.
1399    //
1400    // This may be zero in API responses for instance partitions that are not
1401    // yet in state `READY`.
1402    int32 node_count = 5;
1403
1404    // The number of processing units allocated to this instance partition.
1405    //
1406    // Users can set the processing_units field to specify the target number of
1407    // processing units allocated to the instance partition.
1408    //
1409    // This may be zero in API responses for instance partitions that are not
1410    // yet in state `READY`.
1411    int32 processing_units = 6;
1412  }
1413
1414  // Output only. The current instance partition state.
1415  State state = 7 [(google.api.field_behavior) = OUTPUT_ONLY];
1416
1417  // Output only. The time at which the instance partition was created.
1418  google.protobuf.Timestamp create_time = 8
1419      [(google.api.field_behavior) = OUTPUT_ONLY];
1420
1421  // Output only. The time at which the instance partition was most recently
1422  // updated.
1423  google.protobuf.Timestamp update_time = 9
1424      [(google.api.field_behavior) = OUTPUT_ONLY];
1425
1426  // Output only. The names of the databases that reference this
1427  // instance partition. Referencing databases should share the parent instance.
1428  // The existence of any referencing database prevents the instance partition
1429  // from being deleted.
1430  repeated string referencing_databases = 10
1431      [(google.api.field_behavior) = OUTPUT_ONLY];
1432
1433  // Output only. The names of the backups that reference this instance
1434  // partition. Referencing backups should share the parent instance. The
1435  // existence of any referencing backup prevents the instance partition from
1436  // being deleted.
1437  repeated string referencing_backups = 11
1438      [(google.api.field_behavior) = OUTPUT_ONLY];
1439
1440  // Used for optimistic concurrency control as a way
1441  // to help prevent simultaneous updates of a instance partition from
1442  // overwriting each other. It is strongly suggested that systems make use of
1443  // the etag in the read-modify-write cycle to perform instance partition
1444  // updates in order to avoid race conditions: An etag is returned in the
1445  // response which contains instance partitions, and systems are expected to
1446  // put that etag in the request to update instance partitions to ensure that
1447  // their change will be applied to the same version of the instance partition.
1448  // If no etag is provided in the call to update instance partition, then the
1449  // existing instance partition is overwritten blindly.
1450  string etag = 12;
1451}
1452
1453// Metadata type for the operation returned by
1454// [CreateInstancePartition][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstancePartition].
1455message CreateInstancePartitionMetadata {
1456  // The instance partition being created.
1457  InstancePartition instance_partition = 1;
1458
1459  // The time at which the
1460  // [CreateInstancePartition][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstancePartition]
1461  // request was received.
1462  google.protobuf.Timestamp start_time = 2;
1463
1464  // The time at which this operation was cancelled. If set, this operation is
1465  // in the process of undoing itself (which is guaranteed to succeed) and
1466  // cannot be cancelled again.
1467  google.protobuf.Timestamp cancel_time = 3;
1468
1469  // The time at which this operation failed or was completed successfully.
1470  google.protobuf.Timestamp end_time = 4;
1471}
1472
1473// The request for
1474// [CreateInstancePartition][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstancePartition].
1475message CreateInstancePartitionRequest {
1476  // Required. The name of the instance in which to create the instance
1477  // partition. Values are of the form
1478  // `projects/<project>/instances/<instance>`.
1479  string parent = 1 [
1480    (google.api.field_behavior) = REQUIRED,
1481    (google.api.resource_reference) = {
1482      type: "spanner.googleapis.com/Instance"
1483    }
1484  ];
1485
1486  // Required. The ID of the instance partition to create. Valid identifiers are
1487  // of the form `[a-z][-a-z0-9]*[a-z0-9]` and must be between 2 and 64
1488  // characters in length.
1489  string instance_partition_id = 2 [(google.api.field_behavior) = REQUIRED];
1490
1491  // Required. The instance partition to create. The instance_partition.name may
1492  // be omitted, but if specified must be
1493  // `<parent>/instancePartitions/<instance_partition_id>`.
1494  InstancePartition instance_partition = 3
1495      [(google.api.field_behavior) = REQUIRED];
1496}
1497
1498// The request for
1499// [DeleteInstancePartition][google.spanner.admin.instance.v1.InstanceAdmin.DeleteInstancePartition].
1500message DeleteInstancePartitionRequest {
1501  // Required. The name of the instance partition to be deleted.
1502  // Values are of the form
1503  // `projects/{project}/instances/{instance}/instancePartitions/{instance_partition}`
1504  string name = 1 [
1505    (google.api.field_behavior) = REQUIRED,
1506    (google.api.resource_reference) = {
1507      type: "spanner.googleapis.com/InstancePartition"
1508    }
1509  ];
1510
1511  // Optional. If not empty, the API only deletes the instance partition when
1512  // the etag provided matches the current status of the requested instance
1513  // partition. Otherwise, deletes the instance partition without checking the
1514  // current status of the requested instance partition.
1515  string etag = 2;
1516}
1517
1518// The request for
1519// [GetInstancePartition][google.spanner.admin.instance.v1.InstanceAdmin.GetInstancePartition].
1520message GetInstancePartitionRequest {
1521  // Required. The name of the requested instance partition. Values are of
1522  // the form
1523  // `projects/{project}/instances/{instance}/instancePartitions/{instance_partition}`.
1524  string name = 1 [
1525    (google.api.field_behavior) = REQUIRED,
1526    (google.api.resource_reference) = {
1527      type: "spanner.googleapis.com/InstancePartition"
1528    }
1529  ];
1530}
1531
1532// The request for
1533// [UpdateInstancePartition][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstancePartition].
1534message UpdateInstancePartitionRequest {
1535  // Required. The instance partition to update, which must always include the
1536  // instance partition name. Otherwise, only fields mentioned in
1537  // [field_mask][google.spanner.admin.instance.v1.UpdateInstancePartitionRequest.field_mask]
1538  // need be included.
1539  InstancePartition instance_partition = 1
1540      [(google.api.field_behavior) = REQUIRED];
1541
1542  // Required. A mask specifying which fields in
1543  // [InstancePartition][google.spanner.admin.instance.v1.InstancePartition]
1544  // should be updated. The field mask must always be specified; this prevents
1545  // any future fields in
1546  // [InstancePartition][google.spanner.admin.instance.v1.InstancePartition]
1547  // from being erased accidentally by clients that do not know about them.
1548  google.protobuf.FieldMask field_mask = 2
1549      [(google.api.field_behavior) = REQUIRED];
1550}
1551
1552// Metadata type for the operation returned by
1553// [UpdateInstancePartition][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstancePartition].
1554message UpdateInstancePartitionMetadata {
1555  // The desired end state of the update.
1556  InstancePartition instance_partition = 1;
1557
1558  // The time at which
1559  // [UpdateInstancePartition][google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstancePartition]
1560  // request was received.
1561  google.protobuf.Timestamp start_time = 2;
1562
1563  // The time at which this operation was cancelled. If set, this operation is
1564  // in the process of undoing itself (which is guaranteed to succeed) and
1565  // cannot be cancelled again.
1566  google.protobuf.Timestamp cancel_time = 3;
1567
1568  // The time at which this operation failed or was completed successfully.
1569  google.protobuf.Timestamp end_time = 4;
1570}
1571
1572// The request for
1573// [ListInstancePartitions][google.spanner.admin.instance.v1.InstanceAdmin.ListInstancePartitions].
1574message ListInstancePartitionsRequest {
1575  // Required. The instance whose instance partitions should be listed. Values
1576  // are of the form `projects/<project>/instances/<instance>`.
1577  string parent = 1 [
1578    (google.api.field_behavior) = REQUIRED,
1579    (google.api.resource_reference) = {
1580      type: "spanner.googleapis.com/Instance"
1581    }
1582  ];
1583
1584  // Number of instance partitions to be returned in the response. If 0 or less,
1585  // defaults to the server's maximum allowed page size.
1586  int32 page_size = 2;
1587
1588  // If non-empty, `page_token` should contain a
1589  // [next_page_token][google.spanner.admin.instance.v1.ListInstancePartitionsResponse.next_page_token]
1590  // from a previous
1591  // [ListInstancePartitionsResponse][google.spanner.admin.instance.v1.ListInstancePartitionsResponse].
1592  string page_token = 3;
1593
1594  // Optional. Deadline used while retrieving metadata for instance partitions.
1595  // Instance partitions whose metadata cannot be retrieved within this deadline
1596  // will be added to
1597  // [unreachable][google.spanner.admin.instance.v1.ListInstancePartitionsResponse.unreachable]
1598  // in
1599  // [ListInstancePartitionsResponse][google.spanner.admin.instance.v1.ListInstancePartitionsResponse].
1600  google.protobuf.Timestamp instance_partition_deadline = 4
1601      [(google.api.field_behavior) = OPTIONAL];
1602}
1603
1604// The response for
1605// [ListInstancePartitions][google.spanner.admin.instance.v1.InstanceAdmin.ListInstancePartitions].
1606message ListInstancePartitionsResponse {
1607  // The list of requested instancePartitions.
1608  repeated InstancePartition instance_partitions = 1;
1609
1610  // `next_page_token` can be sent in a subsequent
1611  // [ListInstancePartitions][google.spanner.admin.instance.v1.InstanceAdmin.ListInstancePartitions]
1612  // call to fetch more of the matching instance partitions.
1613  string next_page_token = 2;
1614
1615  // The list of unreachable instance partitions.
1616  // It includes the names of instance partitions whose metadata could
1617  // not be retrieved within
1618  // [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionsRequest.instance_partition_deadline].
1619  repeated string unreachable = 3;
1620}
1621
1622// The request for
1623// [ListInstancePartitionOperations][google.spanner.admin.instance.v1.InstanceAdmin.ListInstancePartitionOperations].
1624message ListInstancePartitionOperationsRequest {
1625  // Required. The parent instance of the instance partition operations.
1626  // Values are of the form `projects/<project>/instances/<instance>`.
1627  string parent = 1 [
1628    (google.api.field_behavior) = REQUIRED,
1629    (google.api.resource_reference) = {
1630      type: "spanner.googleapis.com/Instance"
1631    }
1632  ];
1633
1634  // Optional. An expression that filters the list of returned operations.
1635  //
1636  // A filter expression consists of a field name, a
1637  // comparison operator, and a value for filtering.
1638  // The value must be a string, a number, or a boolean. The comparison operator
1639  // must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
1640  // Colon `:` is the contains operator. Filter rules are not case sensitive.
1641  //
1642  // The following fields in the [Operation][google.longrunning.Operation]
1643  // are eligible for filtering:
1644  //
1645  //   * `name` - The name of the long-running operation
1646  //   * `done` - False if the operation is in progress, else true.
1647  //   * `metadata.@type` - the type of metadata. For example, the type string
1648  //      for
1649  //      [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata]
1650  //      is
1651  //      `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata`.
1652  //   * `metadata.<field_name>` - any field in metadata.value.
1653  //      `metadata.@type` must be specified first, if filtering on metadata
1654  //      fields.
1655  //   * `error` - Error associated with the long-running operation.
1656  //   * `response.@type` - the type of response.
1657  //   * `response.<field_name>` - any field in response.value.
1658  //
1659  // You can combine multiple expressions by enclosing each expression in
1660  // parentheses. By default, expressions are combined with AND logic. However,
1661  // you can specify AND, OR, and NOT logic explicitly.
1662  //
1663  // Here are a few examples:
1664  //
1665  //   * `done:true` - The operation is complete.
1666  //   * `(metadata.@type=` \
1667  //     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstancePartitionMetadata)
1668  //     AND` \
1669  //     `(metadata.instance_partition.name:custom-instance-partition) AND` \
1670  //     `(metadata.start_time < \"2021-03-28T14:50:00Z\") AND` \
1671  //     `(error:*)` - Return operations where:
1672  //     * The operation's metadata type is
1673  //     [CreateInstancePartitionMetadata][google.spanner.admin.instance.v1.CreateInstancePartitionMetadata].
1674  //     * The instance partition name contains "custom-instance-partition".
1675  //     * The operation started before 2021-03-28T14:50:00Z.
1676  //     * The operation resulted in an error.
1677  string filter = 2 [(google.api.field_behavior) = OPTIONAL];
1678
1679  // Optional. Number of operations to be returned in the response. If 0 or
1680  // less, defaults to the server's maximum allowed page size.
1681  int32 page_size = 3 [(google.api.field_behavior) = OPTIONAL];
1682
1683  // Optional. If non-empty, `page_token` should contain a
1684  // [next_page_token][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse.next_page_token]
1685  // from a previous
1686  // [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse]
1687  // to the same `parent` and with the same `filter`.
1688  string page_token = 4 [(google.api.field_behavior) = OPTIONAL];
1689
1690  // Optional. Deadline used while retrieving metadata for instance partition
1691  // operations. Instance partitions whose operation metadata cannot be
1692  // retrieved within this deadline will be added to
1693  // [unreachable][ListInstancePartitionOperationsResponse.unreachable] in
1694  // [ListInstancePartitionOperationsResponse][google.spanner.admin.instance.v1.ListInstancePartitionOperationsResponse].
1695  google.protobuf.Timestamp instance_partition_deadline = 5
1696      [(google.api.field_behavior) = OPTIONAL];
1697}
1698
1699// The response for
1700// [ListInstancePartitionOperations][google.spanner.admin.instance.v1.InstanceAdmin.ListInstancePartitionOperations].
1701message ListInstancePartitionOperationsResponse {
1702  // The list of matching instance partition [long-running
1703  // operations][google.longrunning.Operation]. Each operation's name will be
1704  // prefixed by the instance partition's name. The operation's
1705  // [metadata][google.longrunning.Operation.metadata] field type
1706  // `metadata.type_url` describes the type of the metadata.
1707  repeated google.longrunning.Operation operations = 1;
1708
1709  // `next_page_token` can be sent in a subsequent
1710  // [ListInstancePartitionOperations][google.spanner.admin.instance.v1.InstanceAdmin.ListInstancePartitionOperations]
1711  // call to fetch more of the matching metadata.
1712  string next_page_token = 2;
1713
1714  // The list of unreachable instance partitions.
1715  // It includes the names of instance partitions whose operation metadata could
1716  // not be retrieved within
1717  // [instance_partition_deadline][google.spanner.admin.instance.v1.ListInstancePartitionOperationsRequest.instance_partition_deadline].
1718  repeated string unreachable_instance_partitions = 3;
1719}
1720