From f0604713ff4bf159c97a189b6842986c279a2d27 Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Wed, 8 Sep 2021 16:06:07 -0400 Subject: [PATCH] feat: add response protos --- google-cloud-bigtable-stats/pom.xml | 2 - .../stats/BuiltinMetricsRecorder.java | 1 + .../stats/BuiltinMetricsRecorderTest.java | 1 + .../BigtableTracerStreamingCallable.java | 37 +- .../metrics/BigtableTracerUnaryCallable.java | 39 +- .../metrics/BuiltinMetricsTracerTest.java | 61 +- .../google/bigtable/v2/ResponseParams.java | 906 ++++++++++++++++++ .../bigtable/v2/ResponseParamsOrBuilder.java | 103 ++ .../bigtable/v2/ResponseParamsProto.java | 68 ++ .../google/bigtable/v2/response_params.proto | 35 + 10 files changed, 1183 insertions(+), 70 deletions(-) create mode 100644 proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ResponseParams.java create mode 100644 proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ResponseParamsOrBuilder.java create mode 100644 proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ResponseParamsProto.java create mode 100644 proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/response_params.proto diff --git a/google-cloud-bigtable-stats/pom.xml b/google-cloud-bigtable-stats/pom.xml index 2ccb745eba..5b8e6d5611 100644 --- a/google-cloud-bigtable-stats/pom.xml +++ b/google-cloud-bigtable-stats/pom.xml @@ -37,7 +37,6 @@ com.google.api api-common - io.opencensus opencensus-api @@ -51,7 +50,6 @@ guava - com.google.truth.extensions truth-proto-extension diff --git a/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BuiltinMetricsRecorder.java b/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BuiltinMetricsRecorder.java index a66da11d0b..4cc8a829c0 100644 --- a/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BuiltinMetricsRecorder.java +++ b/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BuiltinMetricsRecorder.java @@ -133,6 +133,7 @@ public void recordApplicationLatency( .put(BuiltinMeasureConstants.APPLICATION_LATENCIES, applicationLatency); TagContextBuilder tagCtx = newTagContextBuilder(tableId, zone, cluster); + if (operationType == OperationType.ServerStreaming && spanName.getMethodName().equals("ReadRows")) { tagCtx.putLocal(BuiltinMeasureConstants.STREAMING, TagValue.create("true")); diff --git a/google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/BuiltinMetricsRecorderTest.java b/google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/BuiltinMetricsRecorderTest.java index ce0cb0e011..dc34d18f62 100644 --- a/google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/BuiltinMetricsRecorderTest.java +++ b/google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/BuiltinMetricsRecorderTest.java @@ -71,6 +71,7 @@ public void testStreamingOperation() throws InterruptedException { tracer.recordGfeLatencies(serverLatency); tracer.recordGfeMissingHeaders(connectivityErrorCount); tracer.recordFirstResponseLatency(firstResponseLatency); + tracer.recordBatchRequestThrottled(throttlingLatency, TABLE_ID, ZONE, CLUSTER); tracer.recordAttemptLevelWithoutStreaming( diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableTracerStreamingCallable.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableTracerStreamingCallable.java index 80731a2fa0..209c25874d 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableTracerStreamingCallable.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableTracerStreamingCallable.java @@ -21,7 +21,9 @@ import com.google.api.gax.rpc.ResponseObserver; import com.google.api.gax.rpc.ServerStreamingCallable; import com.google.api.gax.rpc.StreamController; +import com.google.bigtable.v2.ResponseParams; import com.google.common.base.Preconditions; +import com.google.protobuf.InvalidProtocolBufferException; import io.grpc.Metadata; import javax.annotation.Nonnull; @@ -100,15 +102,15 @@ public void onError(Throwable t) { Metadata metadata = responseMetadata.getMetadata(); Long latency = Util.getGfeLatency(metadata); tracer.recordGfeMetadata(latency, t); - // try { - // byte[] trailers = - // responseMetadata - // .getTrailingMetadata() - // .get(Metadata.Key.of(Util.TRAILER_KEY, Metadata.BINARY_BYTE_MARSHALLER)); - // ResponseParams decodedTrailers = ResponseParams.parseFrom(trailers); - // tracer.setLocations(decodedTrailers.getZoneId(), decodedTrailers.getClusterId()); - // } catch (NullPointerException | InvalidProtocolBufferException e) { - // } + try { + byte[] trailers = + responseMetadata + .getTrailingMetadata() + .get(Metadata.Key.of(Util.TRAILER_KEY, Metadata.BINARY_BYTE_MARSHALLER)); + ResponseParams decodedTrailers = ResponseParams.parseFrom(trailers); + tracer.setLocations(decodedTrailers.getZoneId(), decodedTrailers.getClusterId()); + } catch (NullPointerException | InvalidProtocolBufferException e) { + } outerObserver.onError(t); } @@ -118,14 +120,15 @@ public void onComplete() { Metadata metadata = responseMetadata.getMetadata(); Long latency = Util.getGfeLatency(metadata); tracer.recordGfeMetadata(latency, null); - // try { - // byte[] trailers = - // responseMetadata.getTrailingMetadata().get(Metadata.Key.of(Util.TRAILER_KEY, - // Metadata.BINARY_BYTE_MARSHALLER)); - // ResponseParams decodedTrailers = ResponseParams.parseFrom(trailers); - // tracer.setLocations(decodedTrailers.getZoneId(), decodedTrailers.getClusterId()); - // } catch (NullPointerException | InvalidProtocolBufferException e) { - // } + try { + byte[] trailers = + responseMetadata + .getTrailingMetadata() + .get(Metadata.Key.of(Util.TRAILER_KEY, Metadata.BINARY_BYTE_MARSHALLER)); + ResponseParams decodedTrailers = ResponseParams.parseFrom(trailers); + tracer.setLocations(decodedTrailers.getZoneId(), decodedTrailers.getClusterId()); + } catch (NullPointerException | InvalidProtocolBufferException e) { + } outerObserver.onComplete(); } diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableTracerUnaryCallable.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableTracerUnaryCallable.java index a434a97b3c..47dbf0168c 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableTracerUnaryCallable.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableTracerUnaryCallable.java @@ -22,8 +22,10 @@ import com.google.api.gax.grpc.GrpcResponseMetadata; import com.google.api.gax.rpc.ApiCallContext; import com.google.api.gax.rpc.UnaryCallable; +import com.google.bigtable.v2.ResponseParams; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.MoreExecutors; +import com.google.protobuf.InvalidProtocolBufferException; import io.grpc.Metadata; import javax.annotation.Nonnull; @@ -82,16 +84,15 @@ public void onFailure(Throwable throwable) { Metadata metadata = responseMetadata.getMetadata(); Long latency = Util.getGfeLatency(metadata); tracer.recordGfeMetadata(latency, throwable); - // try { - // byte[] trailers = - // responseMetadata - // .getTrailingMetadata() - // .get(Metadata.Key.of(Util.TRAILER_KEY, - // Metadata.BINARY_BYTE_MARSHALLER)); - // ResponseParams decodedTrailers = ResponseParams.parseFrom(trailers); - // tracer.setLocations(decodedTrailers.getZoneId(), decodedTrailers.getClusterId()); - // } catch (NullPointerException | InvalidProtocolBufferException e) { - // } + try { + byte[] trailers = + responseMetadata + .getTrailingMetadata() + .get(Metadata.Key.of(Util.TRAILER_KEY, Metadata.BINARY_BYTE_MARSHALLER)); + ResponseParams decodedTrailers = ResponseParams.parseFrom(trailers); + tracer.setLocations(decodedTrailers.getZoneId(), decodedTrailers.getClusterId()); + } catch (NullPointerException | InvalidProtocolBufferException e) { + } } @Override @@ -99,15 +100,15 @@ public void onSuccess(ResponseT response) { Metadata metadata = responseMetadata.getMetadata(); Long latency = Util.getGfeLatency(metadata); tracer.recordGfeMetadata(latency, null); - // try { - // byte[] trailers = - // responseMetadata - // .getTrailingMetadata() - // .get(Metadata.Key.of(Util.TRAILER_KEY, Metadata.BINARY_BYTE_MARSHALLER)); - // ResponseParams decodedTrailers = ResponseParams.parseFrom(trailers); - // tracer.setLocations(decodedTrailers.getZoneId(), decodedTrailers.getClusterId()); - // } catch (NullPointerException | InvalidProtocolBufferException e) { - // } + try { + byte[] trailers = + responseMetadata + .getTrailingMetadata() + .get(Metadata.Key.of(Util.TRAILER_KEY, Metadata.BINARY_BYTE_MARSHALLER)); + ResponseParams decodedTrailers = ResponseParams.parseFrom(trailers); + tracer.setLocations(decodedTrailers.getZoneId(), decodedTrailers.getClusterId()); + } catch (NullPointerException | InvalidProtocolBufferException e) { + } } } } diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerTest.java index 06e756ba5a..0f7ed71e32 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerTest.java @@ -29,6 +29,7 @@ import com.google.bigtable.v2.MutateRowResponse; import com.google.bigtable.v2.ReadRowsRequest; import com.google.bigtable.v2.ReadRowsResponse; +import com.google.bigtable.v2.ResponseParams; import com.google.cloud.bigtable.data.v2.BigtableDataSettings; import com.google.cloud.bigtable.data.v2.FakeServiceHelper; import com.google.cloud.bigtable.data.v2.models.Query; @@ -74,7 +75,6 @@ public class BuiltinMetricsTracerTest { private static final String CLUSTER_0 = "cluster-0"; private static final String ZONE_1 = "us-east-1"; private static final String CLUSTER_1 = "cluster-1"; - private static final String UNDEFINED = "undefined"; private static final long FAKE_SERVER_TIMING = 50; private static final long SERVER_LATENCY = 500; @@ -163,30 +163,28 @@ public void sendHeaders(Metadata headers) { @Override public void close(Status status, Metadata trailers) { - // int currentCount = count.getAndIncrement(); - // if (currentCount == 0) { - // ResponseParams params = - // ResponseParams.newBuilder() - // .setZoneId(ZONE_0) - // .setClusterId(CLUSTER_0) - // .build(); - // byte[] byteArray = params.toByteArray(); - // trailers.put( - // Metadata.Key.of(Util.TRAILER_KEY, - // Metadata.BINARY_BYTE_MARSHALLER), - // byteArray); - // } else { - // ResponseParams params = - // ResponseParams.newBuilder() - // .setClusterId(CLUSTER_1) - // .setZoneId(ZONE_1) - // .build(); - // byte[] byteArray = params.toByteArray(); - // trailers.put( - // Metadata.Key.of(Util.TRAILER_KEY, - // Metadata.BINARY_BYTE_MARSHALLER), - // byteArray); - // } + int currentCount = count.getAndIncrement(); + if (currentCount == 0) { + ResponseParams params = + ResponseParams.newBuilder() + .setZoneId(ZONE_0) + .setClusterId(CLUSTER_0) + .build(); + byte[] byteArray = params.toByteArray(); + trailers.put( + Metadata.Key.of(Util.TRAILER_KEY, Metadata.BINARY_BYTE_MARSHALLER), + byteArray); + } else { + ResponseParams params = + ResponseParams.newBuilder() + .setClusterId(CLUSTER_1) + .setZoneId(ZONE_1) + .build(); + byte[] byteArray = params.toByteArray(); + trailers.put( + Metadata.Key.of(Util.TRAILER_KEY, Metadata.BINARY_BYTE_MARSHALLER), + byteArray); + } super.close(status, trailers); } }, @@ -317,7 +315,6 @@ public void testMutateRowApplicationLatency() { verify(builtinMetricsRecorder) .recordApplicationLatency( longValue.capture(), tableId.capture(), zone.capture(), cluster.capture()); - // Application latency should be slightly less than the total delay between 2 requests observed // from the server side. To make // the test less flaky comparing with half of the server side delay here. @@ -343,12 +340,12 @@ public void testMutateRowAttempts() { verify(builtinMetricsRecorder, times(3)) .recordAttemptLevelWithStreaming( status.capture(), tableId.capture(), zone.capture(), cluster.capture()); - assertThat(zone.getAllValues().get(0)).isEqualTo(UNDEFINED); - assertThat(zone.getAllValues().get(1)).isEqualTo(UNDEFINED); - assertThat(zone.getAllValues().get(2)).isEqualTo(UNDEFINED); - assertThat(cluster.getAllValues().get(0)).isEqualTo(UNDEFINED); - assertThat(cluster.getAllValues().get(1)).isEqualTo(UNDEFINED); - assertThat(cluster.getAllValues().get(2)).isEqualTo(UNDEFINED); + assertThat(zone.getAllValues().get(0)).isEqualTo(ZONE_0); + assertThat(zone.getAllValues().get(1)).isEqualTo(ZONE_1); + assertThat(zone.getAllValues().get(2)).isEqualTo(ZONE_1); + assertThat(cluster.getAllValues().get(0)).isEqualTo(CLUSTER_0); + assertThat(cluster.getAllValues().get(1)).isEqualTo(CLUSTER_1); + assertThat(cluster.getAllValues().get(2)).isEqualTo(CLUSTER_1); assertThat(status.getAllValues().get(0)).isEqualTo("UNAVAILABLE"); assertThat(status.getAllValues().get(1)).isEqualTo("UNAVAILABLE"); assertThat(status.getAllValues().get(2)).isEqualTo("OK"); diff --git a/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ResponseParams.java b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ResponseParams.java new file mode 100644 index 0000000000..27f4338763 --- /dev/null +++ b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ResponseParams.java @@ -0,0 +1,906 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/bigtable/v2/response_params.proto + +package com.google.bigtable.v2; + +/** + * + * + *
+ * Response metadata proto
+ * 
+ * + * Protobuf type {@code google.bigtable.v2.ResponseParams} + */ +public final class ResponseParams extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.bigtable.v2.ResponseParams) + ResponseParamsOrBuilder { + private static final long serialVersionUID = 0L; + // Use ResponseParams.newBuilder() to construct. + private ResponseParams(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private ResponseParams() { + zoneId_ = ""; + clusterId_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new ResponseParams(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + + private ResponseParams( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + java.lang.String s = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + zoneId_ = s; + break; + } + case 18: + { + java.lang.String s = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + clusterId_ = s; + break; + } + default: + { + if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.bigtable.v2.ResponseParamsProto + .internal_static_google_bigtable_v2_ResponseParams_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.bigtable.v2.ResponseParamsProto + .internal_static_google_bigtable_v2_ResponseParams_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.bigtable.v2.ResponseParams.class, + com.google.bigtable.v2.ResponseParams.Builder.class); + } + + private int bitField0_; + public static final int ZONE_ID_FIELD_NUMBER = 1; + private volatile java.lang.Object zoneId_; + /** + * + * + *
+   * The cloud bigtable zone associated with the cluster.
+   * 
+ * + * optional string zone_id = 1; + * + * @return Whether the zoneId field is set. + */ + @java.lang.Override + public boolean hasZoneId() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * + * + *
+   * The cloud bigtable zone associated with the cluster.
+   * 
+ * + * optional string zone_id = 1; + * + * @return The zoneId. + */ + @java.lang.Override + public java.lang.String getZoneId() { + java.lang.Object ref = zoneId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + zoneId_ = s; + return s; + } + } + /** + * + * + *
+   * The cloud bigtable zone associated with the cluster.
+   * 
+ * + * optional string zone_id = 1; + * + * @return The bytes for zoneId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getZoneIdBytes() { + java.lang.Object ref = zoneId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + zoneId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int CLUSTER_ID_FIELD_NUMBER = 2; + private volatile java.lang.Object clusterId_; + /** + * + * + *
+   * Identifier for a cluster that represents set of
+   * bigtable resources.
+   * 
+ * + * optional string cluster_id = 2; + * + * @return Whether the clusterId field is set. + */ + @java.lang.Override + public boolean hasClusterId() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * + * + *
+   * Identifier for a cluster that represents set of
+   * bigtable resources.
+   * 
+ * + * optional string cluster_id = 2; + * + * @return The clusterId. + */ + @java.lang.Override + public java.lang.String getClusterId() { + java.lang.Object ref = clusterId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clusterId_ = s; + return s; + } + } + /** + * + * + *
+   * Identifier for a cluster that represents set of
+   * bigtable resources.
+   * 
+ * + * optional string cluster_id = 2; + * + * @return The bytes for clusterId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getClusterIdBytes() { + java.lang.Object ref = clusterId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clusterId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, zoneId_); + } + if (((bitField0_ & 0x00000002) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, clusterId_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, zoneId_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, clusterId_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.bigtable.v2.ResponseParams)) { + return super.equals(obj); + } + com.google.bigtable.v2.ResponseParams other = (com.google.bigtable.v2.ResponseParams) obj; + + if (hasZoneId() != other.hasZoneId()) return false; + if (hasZoneId()) { + if (!getZoneId().equals(other.getZoneId())) return false; + } + if (hasClusterId() != other.hasClusterId()) return false; + if (hasClusterId()) { + if (!getClusterId().equals(other.getClusterId())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasZoneId()) { + hash = (37 * hash) + ZONE_ID_FIELD_NUMBER; + hash = (53 * hash) + getZoneId().hashCode(); + } + if (hasClusterId()) { + hash = (37 * hash) + CLUSTER_ID_FIELD_NUMBER; + hash = (53 * hash) + getClusterId().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.bigtable.v2.ResponseParams parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.bigtable.v2.ResponseParams parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.bigtable.v2.ResponseParams parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.bigtable.v2.ResponseParams parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.bigtable.v2.ResponseParams parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.bigtable.v2.ResponseParams parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.bigtable.v2.ResponseParams parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.bigtable.v2.ResponseParams parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.bigtable.v2.ResponseParams parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.bigtable.v2.ResponseParams parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.bigtable.v2.ResponseParams parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.bigtable.v2.ResponseParams parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.bigtable.v2.ResponseParams prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * + * + *
+   * Response metadata proto
+   * 
+ * + * Protobuf type {@code google.bigtable.v2.ResponseParams} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.bigtable.v2.ResponseParams) + com.google.bigtable.v2.ResponseParamsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.bigtable.v2.ResponseParamsProto + .internal_static_google_bigtable_v2_ResponseParams_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.bigtable.v2.ResponseParamsProto + .internal_static_google_bigtable_v2_ResponseParams_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.bigtable.v2.ResponseParams.class, + com.google.bigtable.v2.ResponseParams.Builder.class); + } + + // Construct using com.google.bigtable.v2.ResponseParams.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {} + } + + @java.lang.Override + public Builder clear() { + super.clear(); + zoneId_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + clusterId_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.bigtable.v2.ResponseParamsProto + .internal_static_google_bigtable_v2_ResponseParams_descriptor; + } + + @java.lang.Override + public com.google.bigtable.v2.ResponseParams getDefaultInstanceForType() { + return com.google.bigtable.v2.ResponseParams.getDefaultInstance(); + } + + @java.lang.Override + public com.google.bigtable.v2.ResponseParams build() { + com.google.bigtable.v2.ResponseParams result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.bigtable.v2.ResponseParams buildPartial() { + com.google.bigtable.v2.ResponseParams result = + new com.google.bigtable.v2.ResponseParams(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.zoneId_ = zoneId_; + if (((from_bitField0_ & 0x00000002) != 0)) { + to_bitField0_ |= 0x00000002; + } + result.clusterId_ = clusterId_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.bigtable.v2.ResponseParams) { + return mergeFrom((com.google.bigtable.v2.ResponseParams) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.bigtable.v2.ResponseParams other) { + if (other == com.google.bigtable.v2.ResponseParams.getDefaultInstance()) return this; + if (other.hasZoneId()) { + bitField0_ |= 0x00000001; + zoneId_ = other.zoneId_; + onChanged(); + } + if (other.hasClusterId()) { + bitField0_ |= 0x00000002; + clusterId_ = other.clusterId_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.bigtable.v2.ResponseParams parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.google.bigtable.v2.ResponseParams) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private int bitField0_; + + private java.lang.Object zoneId_ = ""; + /** + * + * + *
+     * The cloud bigtable zone associated with the cluster.
+     * 
+ * + * optional string zone_id = 1; + * + * @return Whether the zoneId field is set. + */ + public boolean hasZoneId() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * + * + *
+     * The cloud bigtable zone associated with the cluster.
+     * 
+ * + * optional string zone_id = 1; + * + * @return The zoneId. + */ + public java.lang.String getZoneId() { + java.lang.Object ref = zoneId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + zoneId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * + * + *
+     * The cloud bigtable zone associated with the cluster.
+     * 
+ * + * optional string zone_id = 1; + * + * @return The bytes for zoneId. + */ + public com.google.protobuf.ByteString getZoneIdBytes() { + java.lang.Object ref = zoneId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + zoneId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * + * + *
+     * The cloud bigtable zone associated with the cluster.
+     * 
+ * + * optional string zone_id = 1; + * + * @param value The zoneId to set. + * @return This builder for chaining. + */ + public Builder setZoneId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + zoneId_ = value; + onChanged(); + return this; + } + /** + * + * + *
+     * The cloud bigtable zone associated with the cluster.
+     * 
+ * + * optional string zone_id = 1; + * + * @return This builder for chaining. + */ + public Builder clearZoneId() { + bitField0_ = (bitField0_ & ~0x00000001); + zoneId_ = getDefaultInstance().getZoneId(); + onChanged(); + return this; + } + /** + * + * + *
+     * The cloud bigtable zone associated with the cluster.
+     * 
+ * + * optional string zone_id = 1; + * + * @param value The bytes for zoneId to set. + * @return This builder for chaining. + */ + public Builder setZoneIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + bitField0_ |= 0x00000001; + zoneId_ = value; + onChanged(); + return this; + } + + private java.lang.Object clusterId_ = ""; + /** + * + * + *
+     * Identifier for a cluster that represents set of
+     * bigtable resources.
+     * 
+ * + * optional string cluster_id = 2; + * + * @return Whether the clusterId field is set. + */ + public boolean hasClusterId() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * + * + *
+     * Identifier for a cluster that represents set of
+     * bigtable resources.
+     * 
+ * + * optional string cluster_id = 2; + * + * @return The clusterId. + */ + public java.lang.String getClusterId() { + java.lang.Object ref = clusterId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clusterId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * + * + *
+     * Identifier for a cluster that represents set of
+     * bigtable resources.
+     * 
+ * + * optional string cluster_id = 2; + * + * @return The bytes for clusterId. + */ + public com.google.protobuf.ByteString getClusterIdBytes() { + java.lang.Object ref = clusterId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clusterId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * + * + *
+     * Identifier for a cluster that represents set of
+     * bigtable resources.
+     * 
+ * + * optional string cluster_id = 2; + * + * @param value The clusterId to set. + * @return This builder for chaining. + */ + public Builder setClusterId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + clusterId_ = value; + onChanged(); + return this; + } + /** + * + * + *
+     * Identifier for a cluster that represents set of
+     * bigtable resources.
+     * 
+ * + * optional string cluster_id = 2; + * + * @return This builder for chaining. + */ + public Builder clearClusterId() { + bitField0_ = (bitField0_ & ~0x00000002); + clusterId_ = getDefaultInstance().getClusterId(); + onChanged(); + return this; + } + /** + * + * + *
+     * Identifier for a cluster that represents set of
+     * bigtable resources.
+     * 
+ * + * optional string cluster_id = 2; + * + * @param value The bytes for clusterId to set. + * @return This builder for chaining. + */ + public Builder setClusterIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + bitField0_ |= 0x00000002; + clusterId_ = value; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:google.bigtable.v2.ResponseParams) + } + + // @@protoc_insertion_point(class_scope:google.bigtable.v2.ResponseParams) + private static final com.google.bigtable.v2.ResponseParams DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.bigtable.v2.ResponseParams(); + } + + public static com.google.bigtable.v2.ResponseParams getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ResponseParams parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ResponseParams(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.bigtable.v2.ResponseParams getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ResponseParamsOrBuilder.java b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ResponseParamsOrBuilder.java new file mode 100644 index 0000000000..57d9704a8d --- /dev/null +++ b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ResponseParamsOrBuilder.java @@ -0,0 +1,103 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/bigtable/v2/response_params.proto + +package com.google.bigtable.v2; + +public interface ResponseParamsOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.bigtable.v2.ResponseParams) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * The cloud bigtable zone associated with the cluster.
+   * 
+ * + * optional string zone_id = 1; + * + * @return Whether the zoneId field is set. + */ + boolean hasZoneId(); + /** + * + * + *
+   * The cloud bigtable zone associated with the cluster.
+   * 
+ * + * optional string zone_id = 1; + * + * @return The zoneId. + */ + java.lang.String getZoneId(); + /** + * + * + *
+   * The cloud bigtable zone associated with the cluster.
+   * 
+ * + * optional string zone_id = 1; + * + * @return The bytes for zoneId. + */ + com.google.protobuf.ByteString getZoneIdBytes(); + + /** + * + * + *
+   * Identifier for a cluster that represents set of
+   * bigtable resources.
+   * 
+ * + * optional string cluster_id = 2; + * + * @return Whether the clusterId field is set. + */ + boolean hasClusterId(); + /** + * + * + *
+   * Identifier for a cluster that represents set of
+   * bigtable resources.
+   * 
+ * + * optional string cluster_id = 2; + * + * @return The clusterId. + */ + java.lang.String getClusterId(); + /** + * + * + *
+   * Identifier for a cluster that represents set of
+   * bigtable resources.
+   * 
+ * + * optional string cluster_id = 2; + * + * @return The bytes for clusterId. + */ + com.google.protobuf.ByteString getClusterIdBytes(); +} diff --git a/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ResponseParamsProto.java b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ResponseParamsProto.java new file mode 100644 index 0000000000..e03e192e12 --- /dev/null +++ b/proto-google-cloud-bigtable-v2/src/main/java/com/google/bigtable/v2/ResponseParamsProto.java @@ -0,0 +1,68 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/bigtable/v2/response_params.proto + +package com.google.bigtable.v2; + +public final class ResponseParamsProto { + private ResponseParamsProto() {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); + } + + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_bigtable_v2_ResponseParams_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_bigtable_v2_ResponseParams_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + + static { + java.lang.String[] descriptorData = { + "\n(google/bigtable/v2/response_params.pro" + + "to\022\022google.bigtable.v2\"Z\n\016ResponseParams" + + "\022\024\n\007zone_id\030\001 \001(\tH\000\210\001\001\022\027\n\ncluster_id\030\002 \001" + + "(\tH\001\210\001\001B\n\n\010_zone_idB\r\n\013_cluster_idB\277\001\n\026c" + + "om.google.bigtable.v2B\023ResponseParamsPro" + + "toP\001Z:google.golang.org/genproto/googlea" + + "pis/bigtable/v2;bigtable\252\002\030Google.Cloud." + + "Bigtable.V2\312\002\030Google\\Cloud\\Bigtable\\V2\352\002" + + "\033Google::Cloud::Bigtable::V2b\006proto3" + }; + descriptor = + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( + descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {}); + internal_static_google_bigtable_v2_ResponseParams_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_google_bigtable_v2_ResponseParams_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_google_bigtable_v2_ResponseParams_descriptor, + new java.lang.String[] { + "ZoneId", "ClusterId", "ZoneId", "ClusterId", + }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/response_params.proto b/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/response_params.proto new file mode 100644 index 0000000000..734c8f0974 --- /dev/null +++ b/proto-google-cloud-bigtable-v2/src/main/proto/google/bigtable/v2/response_params.proto @@ -0,0 +1,35 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.bigtable.v2; + +option csharp_namespace = "Google.Cloud.Bigtable.V2"; +option go_package = "google.golang.org/genproto/googleapis/bigtable/v2;bigtable"; +option java_multiple_files = true; +option java_outer_classname = "ResponseParamsProto"; +option java_package = "com.google.bigtable.v2"; +option php_namespace = "Google\\Cloud\\Bigtable\\V2"; +option ruby_package = "Google::Cloud::Bigtable::V2"; + +// Response metadata proto +message ResponseParams { + // The cloud bigtable zone associated with the cluster. + optional string zone_id = 1; + + // Identifier for a cluster that represents set of + // bigtable resources. + optional string cluster_id = 2; +} \ No newline at end of file