如果一个任务因触发器规则ALL

编程入门 行业动态 更新时间:2024-10-28 01:26:03
本文介绍了如果一个任务因触发器规则ALL_DONE而失败,则DAG标记为&QOOT;SUCCESS"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有以下具有3项任务的DAG:

start --> special_task --> end

中间的任务可以成功也可以失败,但是end必须始终执行(假设这是一个干净关闭资源的任务)。为此,我使用了trigger ruleALL_DONE:

end.trigger_rule = trigger_rule.TriggerRule.ALL_DONE 使用它,如果special_task失败,end将被正确执行。但是,由于end是最后一个任务并成功,因此DAG始终标记为SUCCESS。

如何配置我的DAG,以便在其中一个任务失败时,整个DAG标记为FAILED?

要复制的示例 import datetime from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils import trigger_rule dag = DAG( dag_id='my_dag', start_date=datetime.datetime.today(), schedule_interval=None ) start = BashOperator( task_id='start', bash_command='echo start', dag=dag ) special_task = BashOperator( task_id='special_task', bash_command='exit 1', # force failure dag=dag ) end = BashOperator( task_id='end', bash_command='echo end', dag=dag ) end.trigger_rule = trigger_rule.TriggerRule.ALL_DONE start.set_downstream(special_task) special_task.set_downstream(end)

This post看似相关,但答案不符合我的需要,因为下游任务end必须执行(因此必须执行trigger_rule)。

推荐答案

如@JustinasMarozas在comment中所述,解决方案是创建一个虚拟任务,如下所示:

dummy = DummyOperator( task_id='test', dag=dag )

并将其下游绑定到special_task:

failing_task.set_downstream(dummy)

因此,DAG标记为失败,dummy任务标记为upstream_failed。

希望有现成的解决方案,但在等待解决方案之前,此解决方案可以解决问题。

更多推荐

如果一个任务因触发器规则ALL

本文发布于:2023-11-23 19:25:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1622604.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:触发器   规则

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!