xref: /aosp_15_r20/external/googleapis/google/bigtable/admin/v2/instance.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
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