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