From a92b42383b6a9bdf8dff6e30b0a9383992d0f32e Mon Sep 17 00:00:00 2001 From: Abhisek Das Date: Fri, 15 May 2026 16:22:43 +0530 Subject: [PATCH] Include dataset_id, table_id, poll_interval in BigQueryIntervalCheckTrigger serialization `BigQueryIntervalCheckTrigger.__init__` accepts `dataset_id`, `table_id`, and `poll_interval` and stores them via the parent class, but `serialize()` omitted all three. After a triggerer restart the trigger was reinstantiated with defaults (`dataset_id=None`, `table_id=None`, `poll_interval=4.0`), silently changing the polling cadence and dropping the templated table identity for any task that customised them. Add the three fields to `serialize()` so the trigger round-trips through `serialize()` -> `BigQueryIntervalCheckTrigger(**kwargs)` cleanly. Extend the existing serialization test with the new keys and add a round-trip test that mirrors the pattern used by the sibling fixes in #66965 / #66966 / #66968. related: #66961 --- .../providers/google/cloud/triggers/bigquery.py | 3 +++ .../tests/unit/google/cloud/triggers/test_bigquery.py | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/providers/google/src/airflow/providers/google/cloud/triggers/bigquery.py b/providers/google/src/airflow/providers/google/cloud/triggers/bigquery.py index ff31833a7c3cc..cd1e9894b3ef6 100644 --- a/providers/google/src/airflow/providers/google/cloud/triggers/bigquery.py +++ b/providers/google/src/airflow/providers/google/cloud/triggers/bigquery.py @@ -484,6 +484,9 @@ def serialize(self) -> tuple[str, dict[str, Any]]: "days_back": self.days_back, "ratio_formula": self.ratio_formula, "ignore_zero": self.ignore_zero, + "dataset_id": self.dataset_id, + "table_id": self.table_id, + "poll_interval": self.poll_interval, "impersonation_chain": self.impersonation_chain, }, ) diff --git a/providers/google/tests/unit/google/cloud/triggers/test_bigquery.py b/providers/google/tests/unit/google/cloud/triggers/test_bigquery.py index f974cccc33862..6c2fe25965d39 100644 --- a/providers/google/tests/unit/google/cloud/triggers/test_bigquery.py +++ b/providers/google/tests/unit/google/cloud/triggers/test_bigquery.py @@ -618,8 +618,18 @@ def test_interval_check_trigger_serialization(self, interval_check_trigger): "days_back": TEST_DAYS_BACK, "ratio_formula": TEST_RATIO_FORMULA, "ignore_zero": TEST_IGNORE_ZERO, + "dataset_id": TEST_DATASET_ID, + "table_id": TEST_TABLE_ID, + "poll_interval": POLLING_PERIOD_SECONDS, } + def test_interval_check_trigger_serialize_round_trip(self, interval_check_trigger): + _, kwargs = interval_check_trigger.serialize() + restored = BigQueryIntervalCheckTrigger(**kwargs) + assert restored.dataset_id == TEST_DATASET_ID + assert restored.table_id == TEST_TABLE_ID + assert restored.poll_interval == POLLING_PERIOD_SECONDS + @pytest.mark.asyncio @mock.patch("airflow.providers.google.cloud.hooks.bigquery.BigQueryAsyncHook.get_sync_hook") @mock.patch("airflow.providers.google.cloud.hooks.bigquery.BigQueryAsyncHook.get_job_status")