From 13315128005991d86acc25daec0bdd3f4159051e Mon Sep 17 00:00:00 2001 From: Rami Noodle Date: Thu, 5 Feb 2026 14:59:17 -0600 Subject: [PATCH] Remove redundant try/except blocks in Bigtable operators This change removes unnecessary exception handling in Bigtable operators where try/except blocks were catching GoogleAPICallError, logging a generic error message, and then immediately re-raising the exception. This pattern is redundant because: 1. The Hook methods already let exceptions bubble up naturally 2. The generic error logging ('An error occurred. Exiting.') adds no value 3. It creates unnecessary code nesting and duplication Changes made: - BigtableCreateInstanceOperator: Removed try/except GoogleAPICallError - BigtableUpdateInstanceOperator: Removed try/except GoogleAPICallError - BigtableDeleteTableOperator: Removed redundant GoogleAPICallError handler (kept NotFound handler for idempotent delete behavior) - BigtableUpdateClusterOperator: Removed redundant GoogleAPICallError handler (kept NotFound handler for custom error message) Fixes: #60687 --- .../google/cloud/operators/bigtable.py | 60 +++++++------------ 1 file changed, 23 insertions(+), 37 deletions(-) diff --git a/providers/google/src/airflow/providers/google/cloud/operators/bigtable.py b/providers/google/src/airflow/providers/google/cloud/operators/bigtable.py index 6f583ca3c63fe..dc155b8b62d1c 100644 --- a/providers/google/src/airflow/providers/google/cloud/operators/bigtable.py +++ b/providers/google/src/airflow/providers/google/cloud/operators/bigtable.py @@ -164,24 +164,20 @@ def execute(self, context: Context) -> None: ) BigtableInstanceLink.persist(context=context) return - try: - hook.create_instance( - project_id=self.project_id, - instance_id=self.instance_id, - main_cluster_id=self.main_cluster_id, - main_cluster_zone=self.main_cluster_zone, - replica_clusters=self.replica_clusters, - instance_display_name=self.instance_display_name, - instance_type=self.instance_type, - instance_labels=self.instance_labels, - cluster_nodes=self.cluster_nodes, - cluster_storage_type=self.cluster_storage_type, - timeout=self.timeout, - ) - BigtableInstanceLink.persist(context=context) - except google.api_core.exceptions.GoogleAPICallError as e: - self.log.error("An error occurred. Exiting.") - raise e + hook.create_instance( + project_id=self.project_id, + instance_id=self.instance_id, + main_cluster_id=self.main_cluster_id, + main_cluster_zone=self.main_cluster_zone, + replica_clusters=self.replica_clusters, + instance_display_name=self.instance_display_name, + instance_type=self.instance_type, + instance_labels=self.instance_labels, + cluster_nodes=self.cluster_nodes, + cluster_storage_type=self.cluster_storage_type, + timeout=self.timeout, + ) + BigtableInstanceLink.persist(context=context) class BigtableUpdateInstanceOperator(GoogleCloudBaseOperator, BigtableValidationMixin): @@ -263,19 +259,15 @@ def execute(self, context: Context) -> None: if not instance: raise AirflowException(f"Dependency: instance '{self.instance_id}' does not exist.") - try: - hook.update_instance( - project_id=self.project_id, - instance_id=self.instance_id, - instance_display_name=self.instance_display_name, - instance_type=self.instance_type, - instance_labels=self.instance_labels, - timeout=self.timeout, - ) - BigtableInstanceLink.persist(context=context) - except google.api_core.exceptions.GoogleAPICallError as e: - self.log.error("An error occurred. Exiting.") - raise e + hook.update_instance( + project_id=self.project_id, + instance_id=self.instance_id, + instance_display_name=self.instance_display_name, + instance_type=self.instance_type, + instance_labels=self.instance_labels, + timeout=self.timeout, + ) + BigtableInstanceLink.persist(context=context) class BigtableDeleteInstanceOperator(GoogleCloudBaseOperator, BigtableValidationMixin): @@ -524,9 +516,6 @@ def execute(self, context: Context) -> None: except google.api_core.exceptions.NotFound: # It's OK if table doesn't exists. self.log.info("The table '%s' no longer exists. Consider it as deleted", self.table_id) - except google.api_core.exceptions.GoogleAPICallError as e: - self.log.error("An error occurred. Exiting.") - raise e class BigtableUpdateClusterOperator(GoogleCloudBaseOperator, BigtableValidationMixin): @@ -610,6 +599,3 @@ def execute(self, context: Context) -> None: raise AirflowException( f"Dependency: cluster '{self.cluster_id}' does not exist for instance '{self.instance_id}'." ) - except google.api_core.exceptions.GoogleAPICallError as e: - self.log.error("An error occurred. Exiting.") - raise e