From 90e23fd204f957b2f0cccd3bf792646c1398a820 Mon Sep 17 00:00:00 2001
From: Jin Seop Kim <jinseop@google.com>
Date: Mon, 2 Mar 2026 14:23:58 -0500
Subject: [PATCH 1/2] feat: expose generated GAPIC instance admin client and
 freeze legacy surface

Adds getBaseClient() to BigtableInstanceAdminClient and marks all legacy handwritten veneer methods as @ObsoleteApi. This mirrors the recent changes to BigtableTableAdminClient in https://github.com/googleapis/java-bigtable/pull/2806.

Tracking Bug: b/475818901
---
 .../admin/v2/BigtableInstanceAdminClient.java | 414 +++++++++++++++---
 1 file changed, 341 insertions(+), 73 deletions(-)

diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClient.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClient.java
index 94e9ed7ddf68..ffd99a72cedb 100644
--- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClient.java
+++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClient.java
@@ -19,6 +19,7 @@
 import com.google.api.core.ApiFunction;
 import com.google.api.core.ApiFuture;
 import com.google.api.core.ApiFutures;
+import com.google.api.core.ObsoleteApi;
 import com.google.api.gax.rpc.ApiExceptions;
 import com.google.api.gax.rpc.NotFoundException;
 import com.google.bigtable.admin.v2.DeleteAppProfileRequest;
@@ -124,6 +125,7 @@
 public final class BigtableInstanceAdminClient implements AutoCloseable {
   private final String projectId;
   private final BigtableInstanceAdminStub stub;
+  private final BaseBigtableInstanceAdminClient baseClient;
 
   /** Constructs an instance of BigtableInstanceAdminClient with the given project ID. */
   public static BigtableInstanceAdminClient create(@Nonnull String projectId) throws IOException {
@@ -146,6 +148,7 @@ private BigtableInstanceAdminClient(
       @Nonnull String projectId, @Nonnull BigtableInstanceAdminStub stub) {
     this.projectId = projectId;
     this.stub = stub;
+    this.baseClient = BaseBigtableInstanceAdminClient.create(stub);
   }
 
   /** Gets the project ID this client is associated with. */
@@ -153,6 +156,14 @@ public String getProjectId() {
     return projectId;
   }
 
+  /**
+   * Returns the modern autogenerated client. This provides access to the newest features and
+   * proto-based methods.
+   */
+  public BaseBigtableInstanceAdminClient getBaseClient() {
+    return baseClient;
+  }
+
   /** Closes the client and frees all resources associated with it (like thread pools). */
   @Override
   public void close() {
@@ -160,7 +171,10 @@ public void close() {
   }
 
   /**
-   * Creates a new instance and returns its representation.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#createInstanceAsync(com.google.bigtable.admin.v2.CreateInstanceRequest)}.
+   *
+   * <p>Creates a new instance and returns its representation.
    *
    * <p>Sample code:
    *
@@ -174,12 +188,16 @@ public void close() {
    * @see CreateInstanceRequest for details.
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public Instance createInstance(CreateInstanceRequest request) {
     return ApiExceptions.callAndTranslateApiException(createInstanceAsync(request));
   }
 
   /**
-   * Asynchronously creates a new instance and returns its representation wrapped in a future.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#createInstanceAsync(com.google.bigtable.admin.v2.CreateInstanceRequest)}.
+   *
+   * <p>Asynchronously creates a new instance and returns its representation wrapped in a future.
    *
    * <p>Sample code:
    *
@@ -195,6 +213,7 @@ public Instance createInstance(CreateInstanceRequest request) {
    * @see CreateInstanceRequest for details.
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Instance> createInstanceAsync(CreateInstanceRequest request) {
     return ApiFutures.transform(
         stub.createInstanceOperationCallable().futureCall(request.toProto(projectId)),
@@ -208,7 +227,10 @@ public Instance apply(com.google.bigtable.admin.v2.Instance proto) {
   }
 
   /**
-   * Updates a new instance and returns its representation.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#partialUpdateInstanceAsync(com.google.bigtable.admin.v2.PartialUpdateInstanceRequest)}.
+   *
+   * <p>Updates a new instance and returns its representation.
    *
    * <p>Sample code:
    *
@@ -222,12 +244,16 @@ public Instance apply(com.google.bigtable.admin.v2.Instance proto) {
    * @see UpdateInstanceRequest for details.
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public Instance updateInstance(UpdateInstanceRequest request) {
     return ApiExceptions.callAndTranslateApiException(updateInstanceAsync(request));
   }
 
   /**
-   * Asynchronously updates a new instance and returns its representation wrapped in a future.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#partialUpdateInstanceAsync(com.google.bigtable.admin.v2.PartialUpdateInstanceRequest)}.
+   *
+   * <p>Asynchronously updates a new instance and returns its representation wrapped in a future.
    *
    * <p>Sample code:
    *
@@ -243,6 +269,7 @@ public Instance updateInstance(UpdateInstanceRequest request) {
    * @see UpdateInstanceRequest for details.
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Instance> updateInstanceAsync(UpdateInstanceRequest request) {
     return ApiFutures.transform(
         stub.partialUpdateInstanceOperationCallable().futureCall(request.toProto(projectId)),
@@ -256,7 +283,10 @@ public Instance apply(com.google.bigtable.admin.v2.Instance proto) {
   }
 
   /**
-   * Get the instance representation by ID.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getInstance(com.google.bigtable.admin.v2.GetInstanceRequest)}.
+   *
+   * <p>Get the instance representation by ID.
    *
    * <p>Sample code:
    *
@@ -264,12 +294,16 @@ public Instance apply(com.google.bigtable.admin.v2.Instance proto) {
    * Instance instance = client.getInstance("my-instance");
    * }</pre>
    */
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public Instance getInstance(String id) {
     return ApiExceptions.callAndTranslateApiException(getInstanceAsync(id));
   }
 
   /**
-   * Asynchronously gets the instance representation by ID wrapped in a future.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getInstance(com.google.bigtable.admin.v2.GetInstanceRequest)}.
+   *
+   * <p>Asynchronously gets the instance representation by ID wrapped in a future.
    *
    * <p>Sample code:
    *
@@ -279,6 +313,7 @@ public Instance getInstance(String id) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Instance> getInstanceAsync(String instanceId) {
     String name = NameUtil.formatInstanceName(projectId, instanceId);
 
@@ -297,7 +332,10 @@ public Instance apply(com.google.bigtable.admin.v2.Instance proto) {
   }
 
   /**
-   * Lists all of the instances in the current project.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#listInstances(com.google.bigtable.admin.v2.ListInstancesRequest)}.
+   *
+   * <p>Lists all of the instances in the current project.
    *
    * <p>This method will throw a {@link PartialListInstancesException} when any zone is unavailable.
    * If a partial list is OK, the exception can be caught and inspected.
@@ -314,12 +352,16 @@ public Instance apply(com.google.bigtable.admin.v2.Instance proto) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public List<Instance> listInstances() {
     return ApiExceptions.callAndTranslateApiException(listInstancesAsync());
   }
 
   /**
-   * Asynchronously lists all of the instances in the current project.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#listInstances(com.google.bigtable.admin.v2.ListInstancesRequest)}.
+   *
+   * <p>Asynchronously lists all of the instances in the current project.
    *
    * <p>This method will throw a {@link PartialListInstancesException} when any zone is unavailable.
    * If a partial list is OK, the exception can be caught and inspected.
@@ -347,6 +389,7 @@ public List<Instance> listInstances() {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<List<Instance>> listInstancesAsync() {
     com.google.bigtable.admin.v2.ListInstancesRequest request =
         com.google.bigtable.admin.v2.ListInstancesRequest.newBuilder()
@@ -389,7 +432,10 @@ public List<Instance> apply(com.google.bigtable.admin.v2.ListInstancesResponse p
   }
 
   /**
-   * Deletes the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteInstance(com.google.bigtable.admin.v2.DeleteInstanceRequest)}.
+   *
+   * <p>Deletes the specified instance.
    *
    * <p>Sample code:
    *
@@ -398,12 +444,16 @@ public List<Instance> apply(com.google.bigtable.admin.v2.ListInstancesResponse p
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public void deleteInstance(String instanceId) {
     ApiExceptions.callAndTranslateApiException(deleteInstanceAsync(instanceId));
   }
 
   /**
-   * Asynchronously deletes the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteInstance(com.google.bigtable.admin.v2.DeleteInstanceRequest)}.
+   *
+   * <p>Asynchronously deletes the specified instance.
    *
    * <p>Sample code:
    *
@@ -413,6 +463,7 @@ public void deleteInstance(String instanceId) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Void> deleteInstanceAsync(String instanceId) {
     String instanceName = NameUtil.formatInstanceName(projectId, instanceId);
 
@@ -433,7 +484,10 @@ public Void apply(Empty input) {
   }
 
   /**
-   * Checks if the instance specified by the instance ID exists.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getInstance(com.google.bigtable.admin.v2.GetInstanceRequest)}.
+   *
+   * <p>Checks if the instance specified by the instance ID exists.
    *
    * <p>Sample code:
    *
@@ -443,12 +497,16 @@ public Void apply(Empty input) {
    * }
    * }</pre>
    */
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public boolean exists(String instanceId) {
     return ApiExceptions.callAndTranslateApiException(existsAsync(instanceId));
   }
 
   /**
-   * Asynchronously checks if the instance specified by the instance ID exists.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getInstance(com.google.bigtable.admin.v2.GetInstanceRequest)}.
+   *
+   * <p>Asynchronously checks if the instance specified by the instance ID exists.
    *
    * <p>Sample code:
    *
@@ -474,6 +532,7 @@ public boolean exists(String instanceId) {
    * );
    * }</pre>
    */
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Boolean> existsAsync(String instanceId) {
     ApiFuture<Instance> protoFuture = getInstanceAsync(instanceId);
 
@@ -501,7 +560,10 @@ public Boolean apply(NotFoundException ignored) {
   }
 
   /**
-   * Creates a new cluster in the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#createClusterAsync(com.google.bigtable.admin.v2.CreateClusterRequest)}.
+   *
+   * <p>Creates a new cluster in the specified instance.
    *
    * <p>Sample code:
    *
@@ -515,12 +577,16 @@ public Boolean apply(NotFoundException ignored) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public Cluster createCluster(CreateClusterRequest request) {
     return ApiExceptions.callAndTranslateApiException(createClusterAsync(request));
   }
 
   /**
-   * Asynchronously creates a new cluster in the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#createClusterAsync(com.google.bigtable.admin.v2.CreateClusterRequest)}.
+   *
+   * <p>Asynchronously creates a new cluster in the specified instance.
    *
    * <p>Sample code:
    *
@@ -536,6 +602,7 @@ public Cluster createCluster(CreateClusterRequest request) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Cluster> createClusterAsync(CreateClusterRequest request) {
     return ApiFutures.transform(
         stub.createClusterOperationCallable().futureCall(request.toProto(projectId)),
@@ -544,7 +611,10 @@ public ApiFuture<Cluster> createClusterAsync(CreateClusterRequest request) {
   }
 
   /**
-   * Gets the cluster representation by ID.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getCluster(com.google.bigtable.admin.v2.GetClusterRequest)}.
+   *
+   * <p>Gets the cluster representation by ID.
    *
    * <p>Sample code:
    *
@@ -553,12 +623,16 @@ public ApiFuture<Cluster> createClusterAsync(CreateClusterRequest request) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public Cluster getCluster(String instanceId, String clusterId) {
     return ApiExceptions.callAndTranslateApiException(getClusterAsync(instanceId, clusterId));
   }
 
   /**
-   * Asynchronously gets the cluster representation by ID.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getCluster(com.google.bigtable.admin.v2.GetClusterRequest)}.
+   *
+   * <p>Asynchronously gets the cluster representation by ID.
    *
    * <p>Sample code:
    *
@@ -568,6 +642,7 @@ public Cluster getCluster(String instanceId, String clusterId) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Cluster> getClusterAsync(String instanceId, String clusterId) {
     String name = NameUtil.formatClusterName(projectId, instanceId, clusterId);
 
@@ -586,7 +661,10 @@ public Cluster apply(com.google.bigtable.admin.v2.Cluster proto) {
   }
 
   /**
-   * Lists all clusters in the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#listClusters(com.google.bigtable.admin.v2.ListClustersRequest)}.
+   *
+   * <p>Lists all clusters in the specified instance.
    *
    * <p>This method will throw a {@link PartialListClustersException} when any zone is unavailable.
    * If a partial list is OK, the exception can be caught and inspected.
@@ -603,12 +681,16 @@ public Cluster apply(com.google.bigtable.admin.v2.Cluster proto) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public List<Cluster> listClusters(String instanceId) {
     return ApiExceptions.callAndTranslateApiException(listClustersAsync(instanceId));
   }
 
   /**
-   * Asynchronously lists all clusters in the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#listClusters(com.google.bigtable.admin.v2.ListClustersRequest)}.
+   *
+   * <p>Asynchronously lists all clusters in the specified instance.
    *
    * <p>This method will throw a {@link PartialListClustersException} when any zone is unavailable.
    * If a partial list is OK, the exception can be caught and inspected.
@@ -636,6 +718,7 @@ public List<Cluster> listClusters(String instanceId) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<List<Cluster>> listClustersAsync(String instanceId) {
     String name = NameUtil.formatInstanceName(projectId, instanceId);
     com.google.bigtable.admin.v2.ListClustersRequest request =
@@ -674,10 +757,14 @@ public List<Cluster> apply(com.google.bigtable.admin.v2.ListClustersResponse pro
   }
 
   /**
-   * Modifies the cluster's node count for manual scaling. If autoscaling is already enabled, manual
-   * scaling will be silently ignored. If you wish to disable autoscaling and enable manual scaling,
-   * please use {@link BigtableInstanceAdminClient#disableClusterAutoscaling(String, String, int)}
-   * instead. Please note that only clusters that belong to a production instance can be resized.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#partialUpdateClusterAsync(com.google.bigtable.admin.v2.PartialUpdateClusterRequest)}.
+   *
+   * <p>Modifies the cluster's node count for manual scaling. If autoscaling is already enabled,
+   * manual scaling will be silently ignored. If you wish to disable autoscaling and enable manual
+   * scaling, please use {@link BigtableInstanceAdminClient#disableClusterAutoscaling(String, String,
+   * int)} instead. Please note that only clusters that belong to a production instance can be
+   * resized.
    *
    * <p>Sample code:
    *
@@ -686,17 +773,21 @@ public List<Cluster> apply(com.google.bigtable.admin.v2.ListClustersResponse pro
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public Cluster resizeCluster(String instanceId, String clusterId, int numServeNodes) {
     return ApiExceptions.callAndTranslateApiException(
         resizeClusterAsync(instanceId, clusterId, numServeNodes));
   }
 
   /**
-   * Asynchronously modifies the cluster's node count for manual scaling. If autoscaling is already
-   * enabled, manual scaling will be silently ignored. If you wish to disable autoscaling and enable
-   * manual scaling, please use {@link BigtableInstanceAdminClient#disableClusterAutoscaling(String,
-   * String, int)} instead. Please note that only clusters that belong to a production instance can
-   * be resized.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#partialUpdateClusterAsync(com.google.bigtable.admin.v2.PartialUpdateClusterRequest)}.
+   *
+   * <p>Asynchronously modifies the cluster's node count for manual scaling. If autoscaling is
+   * already enabled, manual scaling will be silently ignored. If you wish to disable autoscaling
+   * and enable manual scaling, please use {@link
+   * BigtableInstanceAdminClient#disableClusterAutoscaling(String, String, int)} instead. Please
+   * note that only clusters that belong to a production instance can be resized.
    *
    * <pre>{@code
    * ApiFuture<Cluster> clusterFuture = client.resizeCluster("my-instance", "my-cluster", 30);
@@ -704,6 +795,7 @@ public Cluster resizeCluster(String instanceId, String clusterId, int numServeNo
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Cluster> resizeClusterAsync(
       String instanceId, String clusterId, int numServeNodes) {
 
@@ -727,7 +819,10 @@ public Cluster apply(com.google.bigtable.admin.v2.Cluster proto) {
   }
 
   /**
-   * Modifies the cluster's autoscaling config. This will enable autoscaling and disable manual
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#partialUpdateClusterAsync(com.google.bigtable.admin.v2.PartialUpdateClusterRequest)}.
+   *
+   * <p>Modifies the cluster's autoscaling config. This will enable autoscaling and disable manual
    * scaling if the cluster is manually scaled. Please note that only clusters that belong to a
    * production instance can enable autoscaling.
    *
@@ -742,6 +837,7 @@ public Cluster apply(com.google.bigtable.admin.v2.Cluster proto) {
    * Cluster cluster = client.updateClusterAutoscalingConfig(clusterAutoscalingConfig);
    * }</pre>
    */
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public Cluster updateClusterAutoscalingConfig(
       @Nonnull ClusterAutoscalingConfig clusterAutoscalingConfig) {
     return ApiExceptions.callAndTranslateApiException(
@@ -749,7 +845,10 @@ public Cluster updateClusterAutoscalingConfig(
   }
 
   /**
-   * Asynchronously modifies the cluster's autoscaling config. This will enable autoscaling and
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#partialUpdateClusterAsync(com.google.bigtable.admin.v2.PartialUpdateClusterRequest)}.
+   *
+   * <p>Asynchronously modifies the cluster's autoscaling config. This will enable autoscaling and
    * disable manual scaling if the cluster is manually scaled. Please note that only clusters that
    * belong to a production instance can enable autoscaling.
    *
@@ -766,6 +865,7 @@ public Cluster updateClusterAutoscalingConfig(
    *  Cluster cluster = clusterApiFuture.get();
    * }</pre>
    */
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Cluster> updateClusterAutoscalingConfigAsync(
       @Nonnull ClusterAutoscalingConfig clusterAutoscalingConfig) {
     PartialUpdateClusterRequest proto = clusterAutoscalingConfig.toProto(projectId);
@@ -777,8 +877,11 @@ public ApiFuture<Cluster> updateClusterAutoscalingConfigAsync(
   }
 
   /**
-   * Disables autoscaling and enables manual scaling by setting a static node count for the cluster.
-   * Please note that only clusters that belong to a production instance can be resized.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#partialUpdateClusterAsync(com.google.bigtable.admin.v2.PartialUpdateClusterRequest)}.
+   *
+   * <p>Disables autoscaling and enables manual scaling by setting a static node count for the
+   * cluster. Please note that only clusters that belong to a production instance can be resized.
    *
    * <p>Sample code:
    *
@@ -786,13 +889,17 @@ public ApiFuture<Cluster> updateClusterAutoscalingConfigAsync(
    * Cluster cluster = client.disableClusterAutoscaling("my-instance", "my-cluster", 3);
    * }</pre>
    */
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public Cluster disableClusterAutoscaling(String instanceId, String clusterId, int staticSize) {
     return ApiExceptions.callAndTranslateApiException(
         disableClusterAutoscalingAsync(instanceId, clusterId, staticSize));
   }
 
   /**
-   * Asynchronously disables autoscaling and enables manual scaling by setting a static node count
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#partialUpdateClusterAsync(com.google.bigtable.admin.v2.PartialUpdateClusterRequest)}.
+   *
+   * <p>Asynchronously disables autoscaling and enables manual scaling by setting a static node count
    * for the cluster. Please note that only clusters that belong to a production instance can be
    * resized.
    *
@@ -803,6 +910,7 @@ public Cluster disableClusterAutoscaling(String instanceId, String clusterId, in
    * Cluster cluster = clusterApiFuture.get();
    * }</pre>
    */
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Cluster> disableClusterAutoscalingAsync(
       String instanceId, String clusterId, int staticSize) {
     String name = NameUtil.formatClusterName(projectId, instanceId, clusterId);
@@ -830,7 +938,10 @@ public ApiFuture<Cluster> disableClusterAutoscalingAsync(
   }
 
   /**
-   * Deletes the specified cluster. Please note that an instance must have at least 1 cluster. To
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteCluster(com.google.bigtable.admin.v2.DeleteClusterRequest)}.
+   *
+   * <p>Deletes the specified cluster. Please note that an instance must have at least 1 cluster. To
    * remove the last cluster, please use {@link BigtableInstanceAdminClient#deleteInstance(String)}.
    *
    * <p>Sample code:
@@ -840,12 +951,16 @@ public ApiFuture<Cluster> disableClusterAutoscalingAsync(
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public void deleteCluster(String instanceId, String clusterId) {
     ApiExceptions.callAndTranslateApiException(deleteClusterAsync(instanceId, clusterId));
   }
 
   /**
-   * Asynchronously deletes the specified cluster. Please note that an instance must have at least 1
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteCluster(com.google.bigtable.admin.v2.DeleteClusterRequest)}.
+   *
+   * <p>Asynchronously deletes the specified cluster. Please note that an instance must have at least 1
    * cluster. To remove the last cluster, please use {@link
    * BigtableInstanceAdminClient#deleteInstanceAsync(String)}.
    *
@@ -857,6 +972,7 @@ public void deleteCluster(String instanceId, String clusterId) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Void> deleteClusterAsync(String instanceId, String clusterId) {
     String name = NameUtil.formatClusterName(projectId, instanceId, clusterId);
 
@@ -875,7 +991,10 @@ public Void apply(Empty input) {
   }
 
   /**
-   * Creates a new app profile.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#createAppProfile(com.google.bigtable.admin.v2.CreateAppProfileRequest)}.
+   *
+   * <p>Creates a new app profile.
    *
    * <p>Sample code:
    *
@@ -889,12 +1008,16 @@ public Void apply(Empty input) {
    * @see CreateAppProfileRequest
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public AppProfile createAppProfile(CreateAppProfileRequest request) {
     return ApiExceptions.callAndTranslateApiException(createAppProfileAsync(request));
   }
 
   /**
-   * Asynchronously creates a new app profile.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#createAppProfile(com.google.bigtable.admin.v2.CreateAppProfileRequest)}.
+   *
+   * <p>Asynchronously creates a new app profile.
    *
    * <p>Sample code:
    *
@@ -910,6 +1033,7 @@ public AppProfile createAppProfile(CreateAppProfileRequest request) {
    * @see CreateAppProfileRequest
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<AppProfile> createAppProfileAsync(CreateAppProfileRequest request) {
     return ApiFutures.transform(
         stub.createAppProfileCallable().futureCall(request.toProto(projectId)),
@@ -923,7 +1047,10 @@ public AppProfile apply(com.google.bigtable.admin.v2.AppProfile proto) {
   }
 
   /**
-   * Gets the app profile by ID.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getAppProfile(com.google.bigtable.admin.v2.GetAppProfileRequest)}.
+   *
+   * <p>Gets the app profile by ID.
    *
    * <p>Sample code:
    *
@@ -933,12 +1060,16 @@ public AppProfile apply(com.google.bigtable.admin.v2.AppProfile proto) {
    *
    * @see AppProfile
    */
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public AppProfile getAppProfile(String instanceId, String appProfileId) {
     return ApiExceptions.callAndTranslateApiException(getAppProfileAsync(instanceId, appProfileId));
   }
 
   /**
-   * Asynchronously gets the app profile by ID.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getAppProfile(com.google.bigtable.admin.v2.GetAppProfileRequest)}.
+   *
+   * <p>Asynchronously gets the app profile by ID.
    *
    * <p>Sample code:
    *
@@ -951,6 +1082,7 @@ public AppProfile getAppProfile(String instanceId, String appProfileId) {
    * @see AppProfile
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<AppProfile> getAppProfileAsync(String instanceId, String appProfileId) {
     String name = NameUtil.formatAppProfileName(projectId, instanceId, appProfileId);
 
@@ -968,7 +1100,10 @@ public AppProfile apply(com.google.bigtable.admin.v2.AppProfile proto) {
   }
 
   /**
-   * Lists all app profiles of the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#listAppProfiles(com.google.bigtable.admin.v2.ListAppProfilesRequest)}.
+   *
+   * <p>Lists all app profiles of the specified instance.
    *
    * <p>Sample code:
    *
@@ -979,12 +1114,16 @@ public AppProfile apply(com.google.bigtable.admin.v2.AppProfile proto) {
    * @see AppProfile
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public List<AppProfile> listAppProfiles(String instanceId) {
     return ApiExceptions.callAndTranslateApiException(listAppProfilesAsync(instanceId));
   }
 
   /**
-   * Asynchronously lists all app profiles of the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#listAppProfiles(com.google.bigtable.admin.v2.ListAppProfilesRequest)}.
+   *
+   * <p>Asynchronously lists all app profiles of the specified instance.
    *
    * <p>Sample code:
    *
@@ -997,6 +1136,7 @@ public List<AppProfile> listAppProfiles(String instanceId) {
    * @see AppProfile
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<List<AppProfile>> listAppProfilesAsync(String instanceId) {
     String instanceName = NameUtil.formatInstanceName(projectId, instanceId);
 
@@ -1062,7 +1202,10 @@ public List<AppProfile> apply(List<com.google.bigtable.admin.v2.AppProfile> inpu
   }
 
   /**
-   * Updates an existing app profile.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#updateAppProfile(com.google.bigtable.admin.v2.UpdateAppProfileRequest)}.
+   *
+   * <p>Updates an existing app profile.
    *
    * <p>Sample code:
    *
@@ -1078,12 +1221,16 @@ public List<AppProfile> apply(List<com.google.bigtable.admin.v2.AppProfile> inpu
    * @see UpdateAppProfileRequest
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public AppProfile updateAppProfile(UpdateAppProfileRequest request) {
     return ApiExceptions.callAndTranslateApiException(updateAppProfileAsync(request));
   }
 
   /**
-   * Asynchronously updates an existing app profile.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#updateAppProfile(com.google.bigtable.admin.v2.UpdateAppProfileRequest)}.
+   *
+   * <p>Asynchronously updates an existing app profile.
    *
    * <p>Sample code:
    *
@@ -1109,6 +1256,7 @@ public AppProfile updateAppProfile(UpdateAppProfileRequest request) {
    * @see UpdateAppProfileRequest
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<AppProfile> updateAppProfileAsync(UpdateAppProfileRequest request) {
     return ApiFutures.transform(
         stub.updateAppProfileOperationCallable().futureCall(request.toProto(projectId)),
@@ -1122,7 +1270,10 @@ public AppProfile apply(com.google.bigtable.admin.v2.AppProfile proto) {
   }
 
   /**
-   * Deletes the specified app profile.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteAppProfile(com.google.bigtable.admin.v2.DeleteAppProfileRequest)}.
+   *
+   * <p>Deletes the specified app profile.
    *
    * <p>Sample code:
    *
@@ -1131,13 +1282,17 @@ public AppProfile apply(com.google.bigtable.admin.v2.AppProfile proto) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public void deleteAppProfile(String instanceId, String appProfileId) {
     ApiExceptions.callAndTranslateApiException(
         deleteAppProfileAsync(instanceId, appProfileId, false));
   }
 
   /**
-   * Asynchronously deletes the specified app profile.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteAppProfile(com.google.bigtable.admin.v2.DeleteAppProfileRequest)}.
+   *
+   * <p>Asynchronously deletes the specified app profile.
    *
    * <p>Sample code:
    *
@@ -1148,12 +1303,16 @@ public void deleteAppProfile(String instanceId, String appProfileId) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Void> deleteAppProfileAsync(String instanceId, String appProfileId) {
     return deleteAppProfileAsync(instanceId, appProfileId, false);
   }
 
   /**
-   * Deletes the specified app profile with an option to force deletion.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteAppProfile(com.google.bigtable.admin.v2.DeleteAppProfileRequest)}.
+   *
+   * <p>Deletes the specified app profile with an option to force deletion.
    *
    * <p>Sample code:
    *
@@ -1162,13 +1321,17 @@ public ApiFuture<Void> deleteAppProfileAsync(String instanceId, String appProfil
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public void deleteAppProfile(String instanceId, String appProfileId, boolean forceDelete) {
     ApiExceptions.callAndTranslateApiException(
         deleteAppProfileAsync(instanceId, appProfileId, forceDelete));
   }
 
   /**
-   * Asynchronously deletes the specified app profile with an option to force deletion.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteAppProfile(com.google.bigtable.admin.v2.DeleteAppProfileRequest)}.
+   *
+   * <p>Asynchronously deletes the specified app profile with an option to force deletion.
    *
    * <p>Sample code:
    *
@@ -1179,6 +1342,7 @@ public void deleteAppProfile(String instanceId, String appProfileId, boolean for
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Void> deleteAppProfileAsync(
       String instanceId, String appProfileId, boolean forceDelete) {
     String name = NameUtil.formatAppProfileName(projectId, instanceId, appProfileId);
@@ -1197,7 +1361,10 @@ public Void apply(Empty input) {
   }
 
   /**
-   * Gets the IAM access control policy for the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getIamPolicy(com.google.iam.v1.GetIamPolicyRequest)}.
+   *
+   * <p>Gets the IAM access control policy for the specified instance.
    *
    * <p>Sample code:
    *
@@ -1213,12 +1380,16 @@ public Void apply(Empty input) {
    *     IAM management</a>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public Policy getIamPolicy(String instanceId) {
     return ApiExceptions.callAndTranslateApiException(getIamPolicyAsync(instanceId));
   }
 
   /**
-   * Asynchronously gets the IAM access control policy for the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getIamPolicy(com.google.iam.v1.GetIamPolicyRequest)}.
+   *
+   * <p>Asynchronously gets the IAM access control policy for the specified instance.
    *
    * <p>Sample code:
    *
@@ -1245,6 +1416,7 @@ public Policy getIamPolicy(String instanceId) {
    *     IAM management</a>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Policy> getIamPolicyAsync(String instanceId) {
     String name = NameUtil.formatInstanceName(projectId, instanceId);
 
@@ -1264,7 +1436,10 @@ public Policy apply(com.google.iam.v1.Policy proto) {
   }
 
   /**
-   * Replaces the IAM policy associated with the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#setIamPolicy(com.google.iam.v1.SetIamPolicyRequest)}.
+   *
+   * <p>Replaces the IAM policy associated with the specified instance.
    *
    * <p>Sample code:
    *
@@ -1281,12 +1456,16 @@ public Policy apply(com.google.iam.v1.Policy proto) {
    *     IAM management</a>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public Policy setIamPolicy(String instanceId, Policy policy) {
     return ApiExceptions.callAndTranslateApiException(setIamPolicyAsync(instanceId, policy));
   }
 
   /**
-   * Asynchronously replaces the IAM policy associated with the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#setIamPolicy(com.google.iam.v1.SetIamPolicyRequest)}.
+   *
+   * <p>Asynchronously replaces the IAM policy associated with the specified instance.
    *
    * <p>Sample code:
    *
@@ -1317,6 +1496,7 @@ public Policy setIamPolicy(String instanceId, Policy policy) {
    *     IAM management</a>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Policy> setIamPolicyAsync(String instanceId, Policy policy) {
     String name = NameUtil.formatInstanceName(projectId, instanceId);
     final IamPolicyMarshaller marshaller = new IamPolicyMarshaller();
@@ -1339,8 +1519,11 @@ public Policy apply(com.google.iam.v1.Policy proto) {
   }
 
   /**
-   * Tests whether the caller has the given permissions for the specified instance. Returns a subset
-   * of the specified permissions that the caller has.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#testIamPermissions(com.google.iam.v1.TestIamPermissionsRequest)}.
+   *
+   * <p>Tests whether the caller has the given permissions for the specified instance. Returns a
+   * subset of the specified permissions that the caller has.
    *
    * <p>Sample code:
    *
@@ -1357,13 +1540,17 @@ public Policy apply(com.google.iam.v1.Policy proto) {
    *     permissions</a>
    */
   @SuppressWarnings({"WeakerAccess"})
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public List<String> testIamPermission(String instanceId, String... permissions) {
     return ApiExceptions.callAndTranslateApiException(
         testIamPermissionAsync(instanceId, permissions));
   }
 
   /**
-   * Asynchronously tests whether the caller has the given permissions for the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#testIamPermissions(com.google.iam.v1.TestIamPermissionsRequest)}.
+   *
+   * <p>Asynchronously tests whether the caller has the given permissions for the specified instance.
    * Returns a subset of the specified permissions that the caller has.
    *
    * <p>Sample code:
@@ -1390,6 +1577,7 @@ public List<String> testIamPermission(String instanceId, String... permissions)
    *     permissions</a>
    */
   @SuppressWarnings({"WeakerAccess"})
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<List<String>> testIamPermissionAsync(String instanceId, String... permissions) {
     TestIamPermissionsRequest request =
         TestIamPermissionsRequest.newBuilder()
@@ -1409,7 +1597,10 @@ public List<String> apply(TestIamPermissionsResponse input) {
   }
 
   /**
-   * Creates a new materialized view.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#createMaterializedViewAsync(com.google.bigtable.admin.v2.CreateMaterializedViewRequest)}.
+   *
+   * <p>Creates a new materialized view.
    *
    * <p>Sample code:
    *
@@ -1423,12 +1614,16 @@ public List<String> apply(TestIamPermissionsResponse input) {
    * @see CreateMaterializedViewRequest
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public MaterializedView createMaterializedView(CreateMaterializedViewRequest request) {
     return ApiExceptions.callAndTranslateApiException(createMaterializedViewAsync(request));
   }
 
   /**
-   * Asynchronously creates a new materialized view.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#createMaterializedViewAsync(com.google.bigtable.admin.v2.CreateMaterializedViewRequest)}.
+   *
+   * <p>Asynchronously creates a new materialized view.
    *
    * <p>Sample code:
    *
@@ -1444,6 +1639,7 @@ public MaterializedView createMaterializedView(CreateMaterializedViewRequest req
    * @see CreateMaterializedViewRequest
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<MaterializedView> createMaterializedViewAsync(
       CreateMaterializedViewRequest request) {
     return ApiFutures.transform(
@@ -1458,7 +1654,10 @@ public MaterializedView apply(com.google.bigtable.admin.v2.MaterializedView prot
   }
 
   /**
-   * Gets the materialized view by ID.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getMaterializedView(com.google.bigtable.admin.v2.GetMaterializedViewRequest)}.
+   *
+   * <p>Gets the materialized view by ID.
    *
    * <p>Sample code:
    *
@@ -1468,13 +1667,17 @@ public MaterializedView apply(com.google.bigtable.admin.v2.MaterializedView prot
    *
    * @see MaterializedView
    */
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public MaterializedView getMaterializedView(String instanceId, String materializedViewId) {
     return ApiExceptions.callAndTranslateApiException(
         getMaterializedViewAsync(instanceId, materializedViewId));
   }
 
   /**
-   * Asynchronously gets the materialized view by ID.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getMaterializedView(com.google.bigtable.admin.v2.GetMaterializedViewRequest)}.
+   *
+   * <p>Asynchronously gets the materialized view by ID.
    *
    * <p>Sample code:
    *
@@ -1487,6 +1690,7 @@ public MaterializedView getMaterializedView(String instanceId, String materializ
    * @see MaterializedView
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<MaterializedView> getMaterializedViewAsync(
       String instanceId, String materializedViewId) {
     String name = NameUtil.formatMaterializedViewName(projectId, instanceId, materializedViewId);
@@ -1506,7 +1710,10 @@ public MaterializedView apply(com.google.bigtable.admin.v2.MaterializedView prot
   }
 
   /**
-   * Lists all materialized views of the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#listMaterializedViews(com.google.bigtable.admin.v2.ListMaterializedViewsRequest)}.
+   *
+   * <p>Lists all materialized views of the specified instance.
    *
    * <p>Sample code:
    *
@@ -1517,12 +1724,16 @@ public MaterializedView apply(com.google.bigtable.admin.v2.MaterializedView prot
    * @see MaterializedView
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public List<MaterializedView> listMaterializedViews(String instanceId) {
     return ApiExceptions.callAndTranslateApiException(listMaterializedViewsAsync(instanceId));
   }
 
   /**
-   * Asynchronously lists all materialized views of the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#listMaterializedViews(com.google.bigtable.admin.v2.ListMaterializedViewsRequest)}.
+   *
+   * <p>Asynchronously lists all materialized views of the specified instance.
    *
    * <p>Sample code:
    *
@@ -1535,6 +1746,7 @@ public List<MaterializedView> listMaterializedViews(String instanceId) {
    * @see MaterializedView
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<List<MaterializedView>> listMaterializedViewsAsync(String instanceId) {
     String instanceName = NameUtil.formatInstanceName(projectId, instanceId);
 
@@ -1602,7 +1814,10 @@ public List<MaterializedView> apply(
   }
 
   /**
-   * Updates an existing materialized view.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#updateMaterializedView(com.google.bigtable.admin.v2.UpdateMaterializedViewRequest)}.
+   *
+   * <p>Updates an existing materialized view.
    *
    * <p>Sample code:
    *
@@ -1618,12 +1833,16 @@ public List<MaterializedView> apply(
    * @see UpdateMaterializedViewRequest
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public MaterializedView updateMaterializedView(UpdateMaterializedViewRequest request) {
     return ApiExceptions.callAndTranslateApiException(updateMaterializedViewAsync(request));
   }
 
   /**
-   * Asynchronously updates an existing materialized view.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#updateMaterializedView(com.google.bigtable.admin.v2.UpdateMaterializedViewRequest)}.
+   *
+   * <p>Asynchronously updates an existing materialized view.
    *
    * <p>Sample code:
    *
@@ -1649,6 +1868,7 @@ public MaterializedView updateMaterializedView(UpdateMaterializedViewRequest req
    * @see UpdateMaterializedViewRequest
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<MaterializedView> updateMaterializedViewAsync(
       UpdateMaterializedViewRequest request) {
     return ApiFutures.transform(
@@ -1663,7 +1883,10 @@ public MaterializedView apply(com.google.bigtable.admin.v2.MaterializedView prot
   }
 
   /**
-   * Deletes the specified materialized view.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteMaterializedView(com.google.bigtable.admin.v2.DeleteMaterializedViewRequest)}.
+   *
+   * <p>Deletes the specified materialized view.
    *
    * <p>Sample code:
    *
@@ -1672,13 +1895,17 @@ public MaterializedView apply(com.google.bigtable.admin.v2.MaterializedView prot
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public void deleteMaterializedView(String instanceId, String materializedViewId) {
     ApiExceptions.callAndTranslateApiException(
         deleteMaterializedViewAsync(instanceId, materializedViewId));
   }
 
   /**
-   * Asynchronously deletes the specified materialized view.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteMaterializedView(com.google.bigtable.admin.v2.DeleteMaterializedViewRequest)}.
+   *
+   * <p>Asynchronously deletes the specified materialized view.
    *
    * <p>Sample code:
    *
@@ -1689,6 +1916,7 @@ public void deleteMaterializedView(String instanceId, String materializedViewId)
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Void> deleteMaterializedViewAsync(String instanceId, String materializedViewId) {
 
     String name = NameUtil.formatMaterializedViewName(projectId, instanceId, materializedViewId);
@@ -1707,7 +1935,10 @@ public Void apply(Empty input) {
   }
 
   /**
-   * Creates a new logical view.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#createLogicalViewAsync(com.google.bigtable.admin.v2.CreateLogicalViewRequest)}.
+   *
+   * <p>Creates a new logical view.
    *
    * <p>Sample code:
    *
@@ -1721,12 +1952,16 @@ public Void apply(Empty input) {
    * @see CreateLogicalViewRequest
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public LogicalView createLogicalView(CreateLogicalViewRequest request) {
     return ApiExceptions.callAndTranslateApiException(createLogicalViewAsync(request));
   }
 
   /**
-   * Asynchronously creates a new logical view.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#createLogicalViewAsync(com.google.bigtable.admin.v2.CreateLogicalViewRequest)}.
+   *
+   * <p>Asynchronously creates a new logical view.
    *
    * <p>Sample code:
    *
@@ -1742,6 +1977,7 @@ public LogicalView createLogicalView(CreateLogicalViewRequest request) {
    * @see CreateLogicalViewRequest
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<LogicalView> createLogicalViewAsync(CreateLogicalViewRequest request) {
     return ApiFutures.transform(
         stub.createLogicalViewOperationCallable().futureCall(request.toProto(projectId)),
@@ -1755,7 +1991,10 @@ public LogicalView apply(com.google.bigtable.admin.v2.LogicalView proto) {
   }
 
   /**
-   * Gets the logical view by ID.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getLogicalView(com.google.bigtable.admin.v2.GetLogicalViewRequest)}.
+   *
+   * <p>Gets the logical view by ID.
    *
    * <p>Sample code:
    *
@@ -1765,13 +2004,17 @@ public LogicalView apply(com.google.bigtable.admin.v2.LogicalView proto) {
    *
    * @see LogicalView
    */
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public LogicalView getLogicalView(String instanceId, String logicalViewId) {
     return ApiExceptions.callAndTranslateApiException(
         getLogicalViewAsync(instanceId, logicalViewId));
   }
 
   /**
-   * Asynchronously gets the logical view by ID.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#getLogicalView(com.google.bigtable.admin.v2.GetLogicalViewRequest)}.
+   *
+   * <p>Asynchronously gets the logical view by ID.
    *
    * <p>Sample code:
    *
@@ -1784,6 +2027,7 @@ public LogicalView getLogicalView(String instanceId, String logicalViewId) {
    * @see LogicalView
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<LogicalView> getLogicalViewAsync(String instanceId, String logicalViewId) {
     String name = NameUtil.formatLogicalViewName(projectId, instanceId, logicalViewId);
 
@@ -1801,7 +2045,10 @@ public LogicalView apply(com.google.bigtable.admin.v2.LogicalView proto) {
   }
 
   /**
-   * Lists all logical views of the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#listLogicalViews(com.google.bigtable.admin.v2.ListLogicalViewsRequest)}.
+   *
+   * <p>Lists all logical views of the specified instance.
    *
    * <p>Sample code:
    *
@@ -1812,12 +2059,16 @@ public LogicalView apply(com.google.bigtable.admin.v2.LogicalView proto) {
    * @see LogicalView
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public List<LogicalView> listLogicalViews(String instanceId) {
     return ApiExceptions.callAndTranslateApiException(listLogicalViewsAsync(instanceId));
   }
 
   /**
-   * Asynchronously lists all logical views of the specified instance.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#listLogicalViews(com.google.bigtable.admin.v2.ListLogicalViewsRequest)}.
+   *
+   * <p>Asynchronously lists all logical views of the specified instance.
    *
    * <p>Sample code:
    *
@@ -1830,6 +2081,7 @@ public List<LogicalView> listLogicalViews(String instanceId) {
    * @see LogicalView
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<List<LogicalView>> listLogicalViewsAsync(String instanceId) {
     String instanceName = NameUtil.formatInstanceName(projectId, instanceId);
 
@@ -1895,7 +2147,10 @@ public List<LogicalView> apply(List<com.google.bigtable.admin.v2.LogicalView> in
   }
 
   /**
-   * Updates an existing logical view.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#updateLogicalView(com.google.bigtable.admin.v2.UpdateLogicalViewRequest)}.
+   *
+   * <p>Updates an existing logical view.
    *
    * <p>Sample code:
    *
@@ -1911,12 +2166,16 @@ public List<LogicalView> apply(List<com.google.bigtable.admin.v2.LogicalView> in
    * @see UpdateLogicalViewRequest
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public LogicalView updateLogicalView(UpdateLogicalViewRequest request) {
     return ApiExceptions.callAndTranslateApiException(updateLogicalViewAsync(request));
   }
 
   /**
-   * Asynchronously updates an existing logical view.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#updateLogicalView(com.google.bigtable.admin.v2.UpdateLogicalViewRequest)}.
+   *
+   * <p>Asynchronously updates an existing logical view.
    *
    * <p>Sample code:
    *
@@ -1942,6 +2201,7 @@ public LogicalView updateLogicalView(UpdateLogicalViewRequest request) {
    * @see UpdateLogicalViewRequest
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<LogicalView> updateLogicalViewAsync(UpdateLogicalViewRequest request) {
     return ApiFutures.transform(
         stub.updateLogicalViewOperationCallable().futureCall(request.toProto(projectId)),
@@ -1955,7 +2215,10 @@ public LogicalView apply(com.google.bigtable.admin.v2.LogicalView proto) {
   }
 
   /**
-   * Deletes the specified logical view.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteLogicalView(com.google.bigtable.admin.v2.DeleteLogicalViewRequest)}.
+   *
+   * <p>Deletes the specified logical view.
    *
    * <p>Sample code:
    *
@@ -1964,12 +2227,16 @@ public LogicalView apply(com.google.bigtable.admin.v2.LogicalView proto) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public void deleteLogicalView(String instanceId, String logicalViewId) {
     ApiExceptions.callAndTranslateApiException(deleteLogicalViewAsync(instanceId, logicalViewId));
   }
 
   /**
-   * Asynchronously deletes the specified logical view.
+   * This method is obsolete. For the recommended proto-based approach, please see {@link
+   * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteLogicalView(com.google.bigtable.admin.v2.DeleteLogicalViewRequest)}.
+   *
+   * <p>Asynchronously deletes the specified logical view.
    *
    * <p>Sample code:
    *
@@ -1980,6 +2247,7 @@ public void deleteLogicalView(String instanceId, String logicalViewId) {
    * }</pre>
    */
   @SuppressWarnings("WeakerAccess")
+  @ObsoleteApi("Use getBaseClient() to access the auto-generated proto-based methods instead.")
   public ApiFuture<Void> deleteLogicalViewAsync(String instanceId, String logicalViewId) {
 
     String name = NameUtil.formatLogicalViewName(projectId, instanceId, logicalViewId);

From 8d52c8b210dd9dd7ec08b718277c581ee2cae260 Mon Sep 17 00:00:00 2001
From: cloud-java-bot <cloud-java-bot@google.com>
Date: Mon, 2 Mar 2026 19:29:56 +0000
Subject: [PATCH 2/2] chore: generate libraries at Mon Mar  2 19:27:28 UTC 2026

---
 .../admin/v2/BigtableInstanceAdminClient.java | 20 +++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClient.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClient.java
index ffd99a72cedb..0e5a9155a01d 100644
--- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClient.java
+++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClient.java
@@ -762,9 +762,9 @@ public List<Cluster> apply(com.google.bigtable.admin.v2.ListClustersResponse pro
    *
    * <p>Modifies the cluster's node count for manual scaling. If autoscaling is already enabled,
    * manual scaling will be silently ignored. If you wish to disable autoscaling and enable manual
-   * scaling, please use {@link BigtableInstanceAdminClient#disableClusterAutoscaling(String, String,
-   * int)} instead. Please note that only clusters that belong to a production instance can be
-   * resized.
+   * scaling, please use {@link BigtableInstanceAdminClient#disableClusterAutoscaling(String,
+   * String, int)} instead. Please note that only clusters that belong to a production instance can
+   * be resized.
    *
    * <p>Sample code:
    *
@@ -899,9 +899,9 @@ public Cluster disableClusterAutoscaling(String instanceId, String clusterId, in
    * This method is obsolete. For the recommended proto-based approach, please see {@link
    * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#partialUpdateClusterAsync(com.google.bigtable.admin.v2.PartialUpdateClusterRequest)}.
    *
-   * <p>Asynchronously disables autoscaling and enables manual scaling by setting a static node count
-   * for the cluster. Please note that only clusters that belong to a production instance can be
-   * resized.
+   * <p>Asynchronously disables autoscaling and enables manual scaling by setting a static node
+   * count for the cluster. Please note that only clusters that belong to a production instance can
+   * be resized.
    *
    * <p>Sample code:
    *
@@ -960,8 +960,8 @@ public void deleteCluster(String instanceId, String clusterId) {
    * This method is obsolete. For the recommended proto-based approach, please see {@link
    * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#deleteCluster(com.google.bigtable.admin.v2.DeleteClusterRequest)}.
    *
-   * <p>Asynchronously deletes the specified cluster. Please note that an instance must have at least 1
-   * cluster. To remove the last cluster, please use {@link
+   * <p>Asynchronously deletes the specified cluster. Please note that an instance must have at
+   * least 1 cluster. To remove the last cluster, please use {@link
    * BigtableInstanceAdminClient#deleteInstanceAsync(String)}.
    *
    * <p>Sample code:
@@ -1550,8 +1550,8 @@ public List<String> testIamPermission(String instanceId, String... permissions)
    * This method is obsolete. For the recommended proto-based approach, please see {@link
    * com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminClient#testIamPermissions(com.google.iam.v1.TestIamPermissionsRequest)}.
    *
-   * <p>Asynchronously tests whether the caller has the given permissions for the specified instance.
-   * Returns a subset of the specified permissions that the caller has.
+   * <p>Asynchronously tests whether the caller has the given permissions for the specified
+   * instance. Returns a subset of the specified permissions that the caller has.
    *
    * <p>Sample code:
    *
