即使分支任务失败并且触发规则是一次成功,为什么还要完成气流下游任务?

时间:2018-06-14 10:47:39

标签: airflow

我通过example script on BranchPythonOperator工作,我注意到以下内容:

在follow_branch_x任务完成之前,最终任务将被排队。我发现这很奇怪,因为在排队最终任务之前,它应该知道它的上游任务是否是成功的(TriggerRule是ONE_SUCCESS)。

为了测试这一点,我将4个follow_branch_任务中的3个替换为失败的任务,并注意到无论follow_x分支任务状态如何,下游任务都完成了。见图:

failed_branch_task_results_in_downstream_done

任何人都可以向我解释这种行为,因为它感觉不直观,因为通常失败的任务会阻止下游任务被执行。

定义连接任务的代码:

join = DummyOperator(
    task_id = "join",
    trigger_rule = TriggerRule.ONE_SUCCESS,
    dag=dag
)

2 个答案:

答案 0 :(得分:2)

尝试在您的分支运算符上设置char again = 'Y'; while (again == 'Y' || again == 'y') { ... } trigger_rule,如下所示:

all_done

不知道这是否会起作用,但似乎以前帮助了一些人:

How does Airflow's BranchPythonOperator work?

答案 1 :(得分:0)

Airflow API的定义

  1. one_success:一旦至少一个父母成功就会激活,它不会等待所有父母完成
  2. 如果您继续使用one_success,则无法运行follow_branch-x,因此您需要执行四个join任务中的所有任务。