1*d5c09012SAndroid Build Coastguard Worker// Copyright 2023 Google LLC 2*d5c09012SAndroid Build Coastguard Worker// 3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d5c09012SAndroid Build Coastguard Worker// 7*d5c09012SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d5c09012SAndroid Build Coastguard Worker// 9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d5c09012SAndroid Build Coastguard Worker// limitations under the License. 14*d5c09012SAndroid Build Coastguard Worker 15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3"; 16*d5c09012SAndroid Build Coastguard Worker 17*d5c09012SAndroid Build Coastguard Workerpackage google.bigtable.admin.v2; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workerimport "google/api/field_behavior.proto"; 20*d5c09012SAndroid Build Coastguard Workerimport "google/api/resource.proto"; 21*d5c09012SAndroid Build Coastguard Workerimport "google/bigtable/admin/v2/common.proto"; 22*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto"; 23*d5c09012SAndroid Build Coastguard Worker 24*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.Bigtable.Admin.V2"; 25*d5c09012SAndroid Build Coastguard Workeroption go_package = "google.golang.org/genproto/googleapis/bigtable/admin/v2;admin"; 26*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true; 27*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "InstanceProto"; 28*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.bigtable.admin.v2"; 29*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Google\\Cloud\\Bigtable\\Admin\\V2"; 30*d5c09012SAndroid Build Coastguard Workeroption ruby_package = "Google::Cloud::Bigtable::Admin::V2"; 31*d5c09012SAndroid Build Coastguard Workeroption (google.api.resource_definition) = { 32*d5c09012SAndroid Build Coastguard Worker type: "cloudkms.googleapis.com/CryptoKey" 33*d5c09012SAndroid Build Coastguard Worker pattern: "projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}" 34*d5c09012SAndroid Build Coastguard Worker}; 35*d5c09012SAndroid Build Coastguard Worker 36*d5c09012SAndroid Build Coastguard Worker// A collection of Bigtable [Tables][google.bigtable.admin.v2.Table] and 37*d5c09012SAndroid Build Coastguard Worker// the resources that serve them. 38*d5c09012SAndroid Build Coastguard Worker// All tables in an instance are served from all 39*d5c09012SAndroid Build Coastguard Worker// [Clusters][google.bigtable.admin.v2.Cluster] in the instance. 40*d5c09012SAndroid Build Coastguard Workermessage Instance { 41*d5c09012SAndroid Build Coastguard Worker option (google.api.resource) = { 42*d5c09012SAndroid Build Coastguard Worker type: "bigtableadmin.googleapis.com/Instance" 43*d5c09012SAndroid Build Coastguard Worker pattern: "projects/{project}/instances/{instance}" 44*d5c09012SAndroid Build Coastguard Worker }; 45*d5c09012SAndroid Build Coastguard Worker 46*d5c09012SAndroid Build Coastguard Worker // Possible states of an instance. 47*d5c09012SAndroid Build Coastguard Worker enum State { 48*d5c09012SAndroid Build Coastguard Worker // The state of the instance could not be determined. 49*d5c09012SAndroid Build Coastguard Worker STATE_NOT_KNOWN = 0; 50*d5c09012SAndroid Build Coastguard Worker 51*d5c09012SAndroid Build Coastguard Worker // The instance has been successfully created and can serve requests 52*d5c09012SAndroid Build Coastguard Worker // to its tables. 53*d5c09012SAndroid Build Coastguard Worker READY = 1; 54*d5c09012SAndroid Build Coastguard Worker 55*d5c09012SAndroid Build Coastguard Worker // The instance is currently being created, and may be destroyed 56*d5c09012SAndroid Build Coastguard Worker // if the creation process encounters an error. 57*d5c09012SAndroid Build Coastguard Worker CREATING = 2; 58*d5c09012SAndroid Build Coastguard Worker } 59*d5c09012SAndroid Build Coastguard Worker 60*d5c09012SAndroid Build Coastguard Worker // The type of the instance. 61*d5c09012SAndroid Build Coastguard Worker enum Type { 62*d5c09012SAndroid Build Coastguard Worker // The type of the instance is unspecified. If set when creating an 63*d5c09012SAndroid Build Coastguard Worker // instance, a `PRODUCTION` instance will be created. If set when updating 64*d5c09012SAndroid Build Coastguard Worker // an instance, the type will be left unchanged. 65*d5c09012SAndroid Build Coastguard Worker TYPE_UNSPECIFIED = 0; 66*d5c09012SAndroid Build Coastguard Worker 67*d5c09012SAndroid Build Coastguard Worker // An instance meant for production use. `serve_nodes` must be set 68*d5c09012SAndroid Build Coastguard Worker // on the cluster. 69*d5c09012SAndroid Build Coastguard Worker PRODUCTION = 1; 70*d5c09012SAndroid Build Coastguard Worker 71*d5c09012SAndroid Build Coastguard Worker // DEPRECATED: Prefer PRODUCTION for all use cases, as it no longer enforces 72*d5c09012SAndroid Build Coastguard Worker // a higher minimum node count than DEVELOPMENT. 73*d5c09012SAndroid Build Coastguard Worker DEVELOPMENT = 2; 74*d5c09012SAndroid Build Coastguard Worker } 75*d5c09012SAndroid Build Coastguard Worker 76*d5c09012SAndroid Build Coastguard Worker // The unique name of the instance. Values are of the form 77*d5c09012SAndroid Build Coastguard Worker // `projects/{project}/instances/[a-z][a-z0-9\\-]+[a-z0-9]`. 78*d5c09012SAndroid Build Coastguard Worker string name = 1; 79*d5c09012SAndroid Build Coastguard Worker 80*d5c09012SAndroid Build Coastguard Worker // Required. The descriptive name for this instance as it appears in UIs. 81*d5c09012SAndroid Build Coastguard Worker // Can be changed at any time, but should be kept globally unique 82*d5c09012SAndroid Build Coastguard Worker // to avoid confusion. 83*d5c09012SAndroid Build Coastguard Worker string display_name = 2 [(google.api.field_behavior) = REQUIRED]; 84*d5c09012SAndroid Build Coastguard Worker 85*d5c09012SAndroid Build Coastguard Worker // (`OutputOnly`) 86*d5c09012SAndroid Build Coastguard Worker // The current state of the instance. 87*d5c09012SAndroid Build Coastguard Worker State state = 3; 88*d5c09012SAndroid Build Coastguard Worker 89*d5c09012SAndroid Build Coastguard Worker // The type of the instance. Defaults to `PRODUCTION`. 90*d5c09012SAndroid Build Coastguard Worker Type type = 4; 91*d5c09012SAndroid Build Coastguard Worker 92*d5c09012SAndroid Build Coastguard Worker // Labels are a flexible and lightweight mechanism for organizing cloud 93*d5c09012SAndroid Build Coastguard Worker // resources into groups that reflect a customer's organizational needs and 94*d5c09012SAndroid Build Coastguard Worker // deployment strategies. They can be used to filter resources and aggregate 95*d5c09012SAndroid Build Coastguard Worker // metrics. 96*d5c09012SAndroid Build Coastguard Worker // 97*d5c09012SAndroid Build Coastguard Worker // * Label keys must be between 1 and 63 characters long and must conform to 98*d5c09012SAndroid Build Coastguard Worker // the regular expression: `[\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62}`. 99*d5c09012SAndroid Build Coastguard Worker // * Label values must be between 0 and 63 characters long and must conform to 100*d5c09012SAndroid Build Coastguard Worker // the regular expression: `[\p{Ll}\p{Lo}\p{N}_-]{0,63}`. 101*d5c09012SAndroid Build Coastguard Worker // * No more than 64 labels can be associated with a given resource. 102*d5c09012SAndroid Build Coastguard Worker // * Keys and values must both be under 128 bytes. 103*d5c09012SAndroid Build Coastguard Worker map<string, string> labels = 5; 104*d5c09012SAndroid Build Coastguard Worker 105*d5c09012SAndroid Build Coastguard Worker // Output only. A server-assigned timestamp representing when this Instance 106*d5c09012SAndroid Build Coastguard Worker // was created. For instances created before this field was added (August 107*d5c09012SAndroid Build Coastguard Worker // 2021), this value is `seconds: 0, nanos: 1`. 108*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp create_time = 7 109*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OUTPUT_ONLY]; 110*d5c09012SAndroid Build Coastguard Worker 111*d5c09012SAndroid Build Coastguard Worker // Output only. Reserved for future use. 112*d5c09012SAndroid Build Coastguard Worker optional bool satisfies_pzs = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; 113*d5c09012SAndroid Build Coastguard Worker} 114*d5c09012SAndroid Build Coastguard Worker 115*d5c09012SAndroid Build Coastguard Worker// The Autoscaling targets for a Cluster. These determine the recommended nodes. 116*d5c09012SAndroid Build Coastguard Workermessage AutoscalingTargets { 117*d5c09012SAndroid Build Coastguard Worker // The cpu utilization that the Autoscaler should be trying to achieve. 118*d5c09012SAndroid Build Coastguard Worker // This number is on a scale from 0 (no utilization) to 119*d5c09012SAndroid Build Coastguard Worker // 100 (total utilization), and is limited between 10 and 80, otherwise it 120*d5c09012SAndroid Build Coastguard Worker // will return INVALID_ARGUMENT error. 121*d5c09012SAndroid Build Coastguard Worker int32 cpu_utilization_percent = 2; 122*d5c09012SAndroid Build Coastguard Worker 123*d5c09012SAndroid Build Coastguard Worker // The storage utilization that the Autoscaler should be trying to achieve. 124*d5c09012SAndroid Build Coastguard Worker // This number is limited between 2560 (2.5TiB) and 5120 (5TiB) for a SSD 125*d5c09012SAndroid Build Coastguard Worker // cluster and between 8192 (8TiB) and 16384 (16TiB) for an HDD cluster, 126*d5c09012SAndroid Build Coastguard Worker // otherwise it will return INVALID_ARGUMENT error. If this value is set to 0, 127*d5c09012SAndroid Build Coastguard Worker // it will be treated as if it were set to the default value: 2560 for SSD, 128*d5c09012SAndroid Build Coastguard Worker // 8192 for HDD. 129*d5c09012SAndroid Build Coastguard Worker int32 storage_utilization_gib_per_node = 3; 130*d5c09012SAndroid Build Coastguard Worker} 131*d5c09012SAndroid Build Coastguard Worker 132*d5c09012SAndroid Build Coastguard Worker// Limits for the number of nodes a Cluster can autoscale up/down to. 133*d5c09012SAndroid Build Coastguard Workermessage AutoscalingLimits { 134*d5c09012SAndroid Build Coastguard Worker // Required. Minimum number of nodes to scale down to. 135*d5c09012SAndroid Build Coastguard Worker int32 min_serve_nodes = 1 [(google.api.field_behavior) = REQUIRED]; 136*d5c09012SAndroid Build Coastguard Worker 137*d5c09012SAndroid Build Coastguard Worker // Required. Maximum number of nodes to scale up to. 138*d5c09012SAndroid Build Coastguard Worker int32 max_serve_nodes = 2 [(google.api.field_behavior) = REQUIRED]; 139*d5c09012SAndroid Build Coastguard Worker} 140*d5c09012SAndroid Build Coastguard Worker 141*d5c09012SAndroid Build Coastguard Worker// A resizable group of nodes in a particular cloud location, capable 142*d5c09012SAndroid Build Coastguard Worker// of serving all [Tables][google.bigtable.admin.v2.Table] in the parent 143*d5c09012SAndroid Build Coastguard Worker// [Instance][google.bigtable.admin.v2.Instance]. 144*d5c09012SAndroid Build Coastguard Workermessage Cluster { 145*d5c09012SAndroid Build Coastguard Worker option (google.api.resource) = { 146*d5c09012SAndroid Build Coastguard Worker type: "bigtableadmin.googleapis.com/Cluster" 147*d5c09012SAndroid Build Coastguard Worker pattern: "projects/{project}/instances/{instance}/clusters/{cluster}" 148*d5c09012SAndroid Build Coastguard Worker }; 149*d5c09012SAndroid Build Coastguard Worker 150*d5c09012SAndroid Build Coastguard Worker // Possible states of a cluster. 151*d5c09012SAndroid Build Coastguard Worker enum State { 152*d5c09012SAndroid Build Coastguard Worker // The state of the cluster could not be determined. 153*d5c09012SAndroid Build Coastguard Worker STATE_NOT_KNOWN = 0; 154*d5c09012SAndroid Build Coastguard Worker 155*d5c09012SAndroid Build Coastguard Worker // The cluster has been successfully created and is ready to serve requests. 156*d5c09012SAndroid Build Coastguard Worker READY = 1; 157*d5c09012SAndroid Build Coastguard Worker 158*d5c09012SAndroid Build Coastguard Worker // The cluster is currently being created, and may be destroyed 159*d5c09012SAndroid Build Coastguard Worker // if the creation process encounters an error. 160*d5c09012SAndroid Build Coastguard Worker // A cluster may not be able to serve requests while being created. 161*d5c09012SAndroid Build Coastguard Worker CREATING = 2; 162*d5c09012SAndroid Build Coastguard Worker 163*d5c09012SAndroid Build Coastguard Worker // The cluster is currently being resized, and may revert to its previous 164*d5c09012SAndroid Build Coastguard Worker // node count if the process encounters an error. 165*d5c09012SAndroid Build Coastguard Worker // A cluster is still capable of serving requests while being resized, 166*d5c09012SAndroid Build Coastguard Worker // but may exhibit performance as if its number of allocated nodes is 167*d5c09012SAndroid Build Coastguard Worker // between the starting and requested states. 168*d5c09012SAndroid Build Coastguard Worker RESIZING = 3; 169*d5c09012SAndroid Build Coastguard Worker 170*d5c09012SAndroid Build Coastguard Worker // The cluster has no backing nodes. The data (tables) still 171*d5c09012SAndroid Build Coastguard Worker // exist, but no operations can be performed on the cluster. 172*d5c09012SAndroid Build Coastguard Worker DISABLED = 4; 173*d5c09012SAndroid Build Coastguard Worker } 174*d5c09012SAndroid Build Coastguard Worker 175*d5c09012SAndroid Build Coastguard Worker // Autoscaling config for a cluster. 176*d5c09012SAndroid Build Coastguard Worker message ClusterAutoscalingConfig { 177*d5c09012SAndroid Build Coastguard Worker // Required. Autoscaling limits for this cluster. 178*d5c09012SAndroid Build Coastguard Worker AutoscalingLimits autoscaling_limits = 1 179*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = REQUIRED]; 180*d5c09012SAndroid Build Coastguard Worker 181*d5c09012SAndroid Build Coastguard Worker // Required. Autoscaling targets for this cluster. 182*d5c09012SAndroid Build Coastguard Worker AutoscalingTargets autoscaling_targets = 2 183*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = REQUIRED]; 184*d5c09012SAndroid Build Coastguard Worker } 185*d5c09012SAndroid Build Coastguard Worker 186*d5c09012SAndroid Build Coastguard Worker // Configuration for a cluster. 187*d5c09012SAndroid Build Coastguard Worker message ClusterConfig { 188*d5c09012SAndroid Build Coastguard Worker // Autoscaling configuration for this cluster. 189*d5c09012SAndroid Build Coastguard Worker ClusterAutoscalingConfig cluster_autoscaling_config = 1; 190*d5c09012SAndroid Build Coastguard Worker } 191*d5c09012SAndroid Build Coastguard Worker 192*d5c09012SAndroid Build Coastguard Worker // Cloud Key Management Service (Cloud KMS) settings for a CMEK-protected 193*d5c09012SAndroid Build Coastguard Worker // cluster. 194*d5c09012SAndroid Build Coastguard Worker message EncryptionConfig { 195*d5c09012SAndroid Build Coastguard Worker // Describes the Cloud KMS encryption key that will be used to protect the 196*d5c09012SAndroid Build Coastguard Worker // destination Bigtable cluster. The requirements for this key are: 197*d5c09012SAndroid Build Coastguard Worker // 1) The Cloud Bigtable service account associated with the project that 198*d5c09012SAndroid Build Coastguard Worker // contains this cluster must be granted the 199*d5c09012SAndroid Build Coastguard Worker // `cloudkms.cryptoKeyEncrypterDecrypter` role on the CMEK key. 200*d5c09012SAndroid Build Coastguard Worker // 2) Only regional keys can be used and the region of the CMEK key must 201*d5c09012SAndroid Build Coastguard Worker // match the region of the cluster. 202*d5c09012SAndroid Build Coastguard Worker // 3) All clusters within an instance must use the same CMEK key. 203*d5c09012SAndroid Build Coastguard Worker // Values are of the form 204*d5c09012SAndroid Build Coastguard Worker // `projects/{project}/locations/{location}/keyRings/{keyring}/cryptoKeys/{key}` 205*d5c09012SAndroid Build Coastguard Worker string kms_key_name = 1 [(google.api.resource_reference) = { 206*d5c09012SAndroid Build Coastguard Worker type: "cloudkms.googleapis.com/CryptoKey" 207*d5c09012SAndroid Build Coastguard Worker }]; 208*d5c09012SAndroid Build Coastguard Worker } 209*d5c09012SAndroid Build Coastguard Worker 210*d5c09012SAndroid Build Coastguard Worker // The unique name of the cluster. Values are of the form 211*d5c09012SAndroid Build Coastguard Worker // `projects/{project}/instances/{instance}/clusters/[a-z][-a-z0-9]*`. 212*d5c09012SAndroid Build Coastguard Worker string name = 1; 213*d5c09012SAndroid Build Coastguard Worker 214*d5c09012SAndroid Build Coastguard Worker // Immutable. The location where this cluster's nodes and storage reside. For 215*d5c09012SAndroid Build Coastguard Worker // best performance, clients should be located as close as possible to this 216*d5c09012SAndroid Build Coastguard Worker // cluster. Currently only zones are supported, so values should be of the 217*d5c09012SAndroid Build Coastguard Worker // form `projects/{project}/locations/{zone}`. 218*d5c09012SAndroid Build Coastguard Worker string location = 2 [ 219*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = IMMUTABLE, 220*d5c09012SAndroid Build Coastguard Worker (google.api.resource_reference) = { 221*d5c09012SAndroid Build Coastguard Worker type: "locations.googleapis.com/Location" 222*d5c09012SAndroid Build Coastguard Worker } 223*d5c09012SAndroid Build Coastguard Worker ]; 224*d5c09012SAndroid Build Coastguard Worker 225*d5c09012SAndroid Build Coastguard Worker // Output only. The current state of the cluster. 226*d5c09012SAndroid Build Coastguard Worker State state = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; 227*d5c09012SAndroid Build Coastguard Worker 228*d5c09012SAndroid Build Coastguard Worker // The number of nodes allocated to this cluster. More nodes enable higher 229*d5c09012SAndroid Build Coastguard Worker // throughput and more consistent performance. 230*d5c09012SAndroid Build Coastguard Worker int32 serve_nodes = 4; 231*d5c09012SAndroid Build Coastguard Worker 232*d5c09012SAndroid Build Coastguard Worker oneof config { 233*d5c09012SAndroid Build Coastguard Worker // Configuration for this cluster. 234*d5c09012SAndroid Build Coastguard Worker ClusterConfig cluster_config = 7; 235*d5c09012SAndroid Build Coastguard Worker } 236*d5c09012SAndroid Build Coastguard Worker 237*d5c09012SAndroid Build Coastguard Worker // Immutable. The type of storage used by this cluster to serve its 238*d5c09012SAndroid Build Coastguard Worker // parent instance's tables, unless explicitly overridden. 239*d5c09012SAndroid Build Coastguard Worker StorageType default_storage_type = 5 240*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = IMMUTABLE]; 241*d5c09012SAndroid Build Coastguard Worker 242*d5c09012SAndroid Build Coastguard Worker // Immutable. The encryption configuration for CMEK-protected clusters. 243*d5c09012SAndroid Build Coastguard Worker EncryptionConfig encryption_config = 6 244*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = IMMUTABLE]; 245*d5c09012SAndroid Build Coastguard Worker} 246*d5c09012SAndroid Build Coastguard Worker 247*d5c09012SAndroid Build Coastguard Worker// A configuration object describing how Cloud Bigtable should treat traffic 248*d5c09012SAndroid Build Coastguard Worker// from a particular end user application. 249*d5c09012SAndroid Build Coastguard Workermessage AppProfile { 250*d5c09012SAndroid Build Coastguard Worker option (google.api.resource) = { 251*d5c09012SAndroid Build Coastguard Worker type: "bigtableadmin.googleapis.com/AppProfile" 252*d5c09012SAndroid Build Coastguard Worker pattern: "projects/{project}/instances/{instance}/appProfiles/{app_profile}" 253*d5c09012SAndroid Build Coastguard Worker }; 254*d5c09012SAndroid Build Coastguard Worker 255*d5c09012SAndroid Build Coastguard Worker // Read/write requests are routed to the nearest cluster in the instance, and 256*d5c09012SAndroid Build Coastguard Worker // will fail over to the nearest cluster that is available in the event of 257*d5c09012SAndroid Build Coastguard Worker // transient errors or delays. Clusters in a region are considered 258*d5c09012SAndroid Build Coastguard Worker // equidistant. Choosing this option sacrifices read-your-writes consistency 259*d5c09012SAndroid Build Coastguard Worker // to improve availability. 260*d5c09012SAndroid Build Coastguard Worker message MultiClusterRoutingUseAny { 261*d5c09012SAndroid Build Coastguard Worker // The set of clusters to route to. The order is ignored; clusters will be 262*d5c09012SAndroid Build Coastguard Worker // tried in order of distance. If left empty, all clusters are eligible. 263*d5c09012SAndroid Build Coastguard Worker repeated string cluster_ids = 1; 264*d5c09012SAndroid Build Coastguard Worker } 265*d5c09012SAndroid Build Coastguard Worker 266*d5c09012SAndroid Build Coastguard Worker // Unconditionally routes all read/write requests to a specific cluster. 267*d5c09012SAndroid Build Coastguard Worker // This option preserves read-your-writes consistency but does not improve 268*d5c09012SAndroid Build Coastguard Worker // availability. 269*d5c09012SAndroid Build Coastguard Worker message SingleClusterRouting { 270*d5c09012SAndroid Build Coastguard Worker // The cluster to which read/write requests should be routed. 271*d5c09012SAndroid Build Coastguard Worker string cluster_id = 1; 272*d5c09012SAndroid Build Coastguard Worker 273*d5c09012SAndroid Build Coastguard Worker // Whether or not `CheckAndMutateRow` and `ReadModifyWriteRow` requests are 274*d5c09012SAndroid Build Coastguard Worker // allowed by this app profile. It is unsafe to send these requests to 275*d5c09012SAndroid Build Coastguard Worker // the same table/row/column in multiple clusters. 276*d5c09012SAndroid Build Coastguard Worker bool allow_transactional_writes = 2; 277*d5c09012SAndroid Build Coastguard Worker } 278*d5c09012SAndroid Build Coastguard Worker 279*d5c09012SAndroid Build Coastguard Worker // Possible priorities for an app profile. Note that higher priority writes 280*d5c09012SAndroid Build Coastguard Worker // can sometimes queue behind lower priority writes to the same tablet, as 281*d5c09012SAndroid Build Coastguard Worker // writes must be strictly sequenced in the durability log. 282*d5c09012SAndroid Build Coastguard Worker enum Priority { 283*d5c09012SAndroid Build Coastguard Worker // Default value. Mapped to PRIORITY_HIGH (the legacy behavior) on creation. 284*d5c09012SAndroid Build Coastguard Worker PRIORITY_UNSPECIFIED = 0; 285*d5c09012SAndroid Build Coastguard Worker 286*d5c09012SAndroid Build Coastguard Worker PRIORITY_LOW = 1; 287*d5c09012SAndroid Build Coastguard Worker 288*d5c09012SAndroid Build Coastguard Worker PRIORITY_MEDIUM = 2; 289*d5c09012SAndroid Build Coastguard Worker 290*d5c09012SAndroid Build Coastguard Worker PRIORITY_HIGH = 3; 291*d5c09012SAndroid Build Coastguard Worker } 292*d5c09012SAndroid Build Coastguard Worker 293*d5c09012SAndroid Build Coastguard Worker // Standard options for isolating this app profile's traffic from other use 294*d5c09012SAndroid Build Coastguard Worker // cases. 295*d5c09012SAndroid Build Coastguard Worker message StandardIsolation { 296*d5c09012SAndroid Build Coastguard Worker // The priority of requests sent using this app profile. 297*d5c09012SAndroid Build Coastguard Worker Priority priority = 1; 298*d5c09012SAndroid Build Coastguard Worker } 299*d5c09012SAndroid Build Coastguard Worker 300*d5c09012SAndroid Build Coastguard Worker // Data Boost is a serverless compute capability that lets you run 301*d5c09012SAndroid Build Coastguard Worker // high-throughput read jobs on your Bigtable data, without impacting the 302*d5c09012SAndroid Build Coastguard Worker // performance of the clusters that handle your application traffic. 303*d5c09012SAndroid Build Coastguard Worker // Currently, Data Boost exclusively supports read-only use-cases with 304*d5c09012SAndroid Build Coastguard Worker // single-cluster routing. 305*d5c09012SAndroid Build Coastguard Worker // 306*d5c09012SAndroid Build Coastguard Worker // Data Boost reads are only guaranteed to see the results of writes that 307*d5c09012SAndroid Build Coastguard Worker // were written at least 30 minutes ago. This means newly written values may 308*d5c09012SAndroid Build Coastguard Worker // not become visible for up to 30m, and also means that old values may 309*d5c09012SAndroid Build Coastguard Worker // remain visible for up to 30m after being deleted or overwritten. To 310*d5c09012SAndroid Build Coastguard Worker // mitigate the staleness of the data, users may either wait 30m, or use 311*d5c09012SAndroid Build Coastguard Worker // CheckConsistency. 312*d5c09012SAndroid Build Coastguard Worker message DataBoostIsolationReadOnly { 313*d5c09012SAndroid Build Coastguard Worker // Compute Billing Owner specifies how usage should be accounted when using 314*d5c09012SAndroid Build Coastguard Worker // Data Boost. Compute Billing Owner also configures which Cloud Project is 315*d5c09012SAndroid Build Coastguard Worker // charged for relevant quota. 316*d5c09012SAndroid Build Coastguard Worker enum ComputeBillingOwner { 317*d5c09012SAndroid Build Coastguard Worker // Unspecified value. 318*d5c09012SAndroid Build Coastguard Worker COMPUTE_BILLING_OWNER_UNSPECIFIED = 0; 319*d5c09012SAndroid Build Coastguard Worker 320*d5c09012SAndroid Build Coastguard Worker // The host Cloud Project containing the targeted Bigtable Instance / 321*d5c09012SAndroid Build Coastguard Worker // Table pays for compute. 322*d5c09012SAndroid Build Coastguard Worker HOST_PAYS = 1; 323*d5c09012SAndroid Build Coastguard Worker } 324*d5c09012SAndroid Build Coastguard Worker 325*d5c09012SAndroid Build Coastguard Worker // The Compute Billing Owner for this Data Boost App Profile. 326*d5c09012SAndroid Build Coastguard Worker optional ComputeBillingOwner compute_billing_owner = 1; 327*d5c09012SAndroid Build Coastguard Worker } 328*d5c09012SAndroid Build Coastguard Worker 329*d5c09012SAndroid Build Coastguard Worker // The unique name of the app profile. Values are of the form 330*d5c09012SAndroid Build Coastguard Worker // `projects/{project}/instances/{instance}/appProfiles/[_a-zA-Z0-9][-_.a-zA-Z0-9]*`. 331*d5c09012SAndroid Build Coastguard Worker string name = 1; 332*d5c09012SAndroid Build Coastguard Worker 333*d5c09012SAndroid Build Coastguard Worker // Strongly validated etag for optimistic concurrency control. Preserve the 334*d5c09012SAndroid Build Coastguard Worker // value returned from `GetAppProfile` when calling `UpdateAppProfile` to 335*d5c09012SAndroid Build Coastguard Worker // fail the request if there has been a modification in the mean time. The 336*d5c09012SAndroid Build Coastguard Worker // `update_mask` of the request need not include `etag` for this protection 337*d5c09012SAndroid Build Coastguard Worker // to apply. 338*d5c09012SAndroid Build Coastguard Worker // See [Wikipedia](https://en.wikipedia.org/wiki/HTTP_ETag) and 339*d5c09012SAndroid Build Coastguard Worker // [RFC 7232](https://tools.ietf.org/html/rfc7232#section-2.3) for more 340*d5c09012SAndroid Build Coastguard Worker // details. 341*d5c09012SAndroid Build Coastguard Worker string etag = 2; 342*d5c09012SAndroid Build Coastguard Worker 343*d5c09012SAndroid Build Coastguard Worker // Long form description of the use case for this AppProfile. 344*d5c09012SAndroid Build Coastguard Worker string description = 3; 345*d5c09012SAndroid Build Coastguard Worker 346*d5c09012SAndroid Build Coastguard Worker // The routing policy for all read/write requests that use this app profile. 347*d5c09012SAndroid Build Coastguard Worker // A value must be explicitly set. 348*d5c09012SAndroid Build Coastguard Worker oneof routing_policy { 349*d5c09012SAndroid Build Coastguard Worker // Use a multi-cluster routing policy. 350*d5c09012SAndroid Build Coastguard Worker MultiClusterRoutingUseAny multi_cluster_routing_use_any = 5; 351*d5c09012SAndroid Build Coastguard Worker 352*d5c09012SAndroid Build Coastguard Worker // Use a single-cluster routing policy. 353*d5c09012SAndroid Build Coastguard Worker SingleClusterRouting single_cluster_routing = 6; 354*d5c09012SAndroid Build Coastguard Worker } 355*d5c09012SAndroid Build Coastguard Worker 356*d5c09012SAndroid Build Coastguard Worker // Options for isolating this app profile's traffic from other use cases. 357*d5c09012SAndroid Build Coastguard Worker oneof isolation { 358*d5c09012SAndroid Build Coastguard Worker // This field has been deprecated in favor of `standard_isolation.priority`. 359*d5c09012SAndroid Build Coastguard Worker // If you set this field, `standard_isolation.priority` will be set instead. 360*d5c09012SAndroid Build Coastguard Worker // 361*d5c09012SAndroid Build Coastguard Worker // The priority of requests sent using this app profile. 362*d5c09012SAndroid Build Coastguard Worker Priority priority = 7 [deprecated = true]; 363*d5c09012SAndroid Build Coastguard Worker 364*d5c09012SAndroid Build Coastguard Worker // The standard options used for isolating this app profile's traffic from 365*d5c09012SAndroid Build Coastguard Worker // other use cases. 366*d5c09012SAndroid Build Coastguard Worker StandardIsolation standard_isolation = 11; 367*d5c09012SAndroid Build Coastguard Worker 368*d5c09012SAndroid Build Coastguard Worker // Specifies that this app profile is intended for read-only usage via the 369*d5c09012SAndroid Build Coastguard Worker // Data Boost feature. 370*d5c09012SAndroid Build Coastguard Worker DataBoostIsolationReadOnly data_boost_isolation_read_only = 10; 371*d5c09012SAndroid Build Coastguard Worker } 372*d5c09012SAndroid Build Coastguard Worker} 373*d5c09012SAndroid Build Coastguard Worker 374*d5c09012SAndroid Build Coastguard Worker// A tablet is a defined by a start and end key and is explained in 375*d5c09012SAndroid Build Coastguard Worker// https://cloud.google.com/bigtable/docs/overview#architecture and 376*d5c09012SAndroid Build Coastguard Worker// https://cloud.google.com/bigtable/docs/performance#optimization. 377*d5c09012SAndroid Build Coastguard Worker// A Hot tablet is a tablet that exhibits high average cpu usage during the time 378*d5c09012SAndroid Build Coastguard Worker// interval from start time to end time. 379*d5c09012SAndroid Build Coastguard Workermessage HotTablet { 380*d5c09012SAndroid Build Coastguard Worker option (google.api.resource) = { 381*d5c09012SAndroid Build Coastguard Worker type: "bigtableadmin.googleapis.com/HotTablet" 382*d5c09012SAndroid Build Coastguard Worker pattern: "projects/{project}/instances/{instance}/clusters/{cluster}/hotTablets/{hot_tablet}" 383*d5c09012SAndroid Build Coastguard Worker }; 384*d5c09012SAndroid Build Coastguard Worker 385*d5c09012SAndroid Build Coastguard Worker // The unique name of the hot tablet. Values are of the form 386*d5c09012SAndroid Build Coastguard Worker // `projects/{project}/instances/{instance}/clusters/{cluster}/hotTablets/[a-zA-Z0-9_-]*`. 387*d5c09012SAndroid Build Coastguard Worker string name = 1; 388*d5c09012SAndroid Build Coastguard Worker 389*d5c09012SAndroid Build Coastguard Worker // Name of the table that contains the tablet. Values are of the form 390*d5c09012SAndroid Build Coastguard Worker // `projects/{project}/instances/{instance}/tables/[_a-zA-Z0-9][-_.a-zA-Z0-9]*`. 391*d5c09012SAndroid Build Coastguard Worker string table_name = 2 [(google.api.resource_reference) = { 392*d5c09012SAndroid Build Coastguard Worker type: "bigtableadmin.googleapis.com/Table" 393*d5c09012SAndroid Build Coastguard Worker }]; 394*d5c09012SAndroid Build Coastguard Worker 395*d5c09012SAndroid Build Coastguard Worker // Output only. The start time of the hot tablet. 396*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp start_time = 3 397*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OUTPUT_ONLY]; 398*d5c09012SAndroid Build Coastguard Worker 399*d5c09012SAndroid Build Coastguard Worker // Output only. The end time of the hot tablet. 400*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp end_time = 4 401*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OUTPUT_ONLY]; 402*d5c09012SAndroid Build Coastguard Worker 403*d5c09012SAndroid Build Coastguard Worker // Tablet Start Key (inclusive). 404*d5c09012SAndroid Build Coastguard Worker string start_key = 5; 405*d5c09012SAndroid Build Coastguard Worker 406*d5c09012SAndroid Build Coastguard Worker // Tablet End Key (inclusive). 407*d5c09012SAndroid Build Coastguard Worker string end_key = 6; 408*d5c09012SAndroid Build Coastguard Worker 409*d5c09012SAndroid Build Coastguard Worker // Output only. The average CPU usage spent by a node on this tablet over the 410*d5c09012SAndroid Build Coastguard Worker // start_time to end_time time range. The percentage is the amount of CPU used 411*d5c09012SAndroid Build Coastguard Worker // by the node to serve the tablet, from 0% (tablet was not interacted with) 412*d5c09012SAndroid Build Coastguard Worker // to 100% (the node spent all cycles serving the hot tablet). 413*d5c09012SAndroid Build Coastguard Worker float node_cpu_usage_percent = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; 414*d5c09012SAndroid Build Coastguard Worker} 415