Skip to content

Commit a1ba155

Browse files
Lee-Wuranusjr
andauthored
Catch the exception that triggerer initialization failed (#31999)
* fix(jobs/triggerer_job_runner): catch the exception that triggerer initialization failed * test(jobs/triggerer_job_runner): add test case for checking TriggerRunner.update_trigger catch triggerer change exception * refactor(jobs/triggerer_job_runner): catch multiple exception cases in the same try catch block when initialing trigger * refactor(jobs/triggerer_job_runner): remove unnecessary TypeError catching Co-authored-by: Tzu-ping Chung <[email protected]> * Revert "refactor(jobs/triggerer_job_runner): remove unnecessary TypeError catching" This reverts commit ac561a2416f16a8f9a3b211715fd4a7e012b47ad. * Revert "refactor(jobs/triggerer_job_runner): catch multiple exception cases in the same try catch block when initialing trigger" This reverts commit 4f3b24b8a7698973fe319618b6ff9f459dc0155a. --------- Co-authored-by: Tzu-ping Chung <[email protected]>
1 parent ac65b82 commit a1ba155

2 files changed

Lines changed: 29 additions & 2 deletions

File tree

‎airflow/jobs/triggerer_job_runner.py‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,14 @@ def update_triggers(self, requested_trigger_ids: set[int]):
680680
# Either the trigger code or the path to it is bad. Fail the trigger.
681681
self.failed_triggers.append((new_id, e))
682682
continue
683-
new_trigger_instance = trigger_class(**new_trigger_orm.kwargs)
683+
684+
try:
685+
new_trigger_instance = trigger_class(**new_trigger_orm.kwargs)
686+
except TypeError as err:
687+
self.log.error("Trigger failed; message=%s", err)
688+
self.failed_triggers.append((new_id, err))
689+
continue
690+
684691
self.set_trigger_logging_metadata(new_trigger_orm.task_instance, new_id, new_trigger_instance)
685692
self.to_create.append((new_id, new_trigger_instance))
686693
# Enqueue orphaned triggers for cancellation

‎tests/jobs/test_triggerer_job.py‎

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from airflow.operators.empty import EmptyOperator
3838
from airflow.operators.python import PythonOperator
3939
from airflow.triggers.base import TriggerEvent
40-
from airflow.triggers.temporal import TimeDeltaTrigger
40+
from airflow.triggers.temporal import DateTimeTrigger, TimeDeltaTrigger
4141
from airflow.triggers.testing import FailureTrigger, SuccessTrigger
4242
from airflow.utils import timezone
4343
from airflow.utils.log.logging_mixin import RedirectStdHandler
@@ -285,6 +285,26 @@ async def test_run_trigger_timeout(self, session, caplog) -> None:
285285
await trigger_runner.run_trigger(1, mock_trigger)
286286
assert "Trigger cancelled due to timeout" in caplog.text
287287

288+
@patch("airflow.models.trigger.Trigger.bulk_fetch")
289+
@patch(
290+
"airflow.jobs.triggerer_job_runner.TriggerRunner.get_trigger_by_classpath",
291+
return_value=DateTimeTrigger,
292+
)
293+
def test_update_trigger_with_triggerer_argument_change(
294+
self, mock_bulk_fetch, mock_get_trigger_by_classpath, session, caplog
295+
) -> None:
296+
trigger_runner = TriggerRunner()
297+
mock_trigger_orm = MagicMock()
298+
mock_trigger_orm.kwargs = {"moment": ..., "not_exists_arg": ...}
299+
mock_get_trigger_by_classpath.return_value = {1: mock_trigger_orm}
300+
301+
trigger_runner.update_triggers({1})
302+
303+
assert (
304+
"Trigger failed; message=__init__() got an unexpected keyword argument 'not_exists_arg'"
305+
in caplog.text
306+
)
307+
288308

289309
def test_trigger_create_race_condition_18392(session, tmp_path):
290310
"""

0 commit comments

Comments
 (0)