首页 > 解决方案 > 气流 trigger_rule=none_failed 不起作用

问题描述

我有一个演示 DAG,其源代码附在下面。

dag 很简单:dummy_success >> one_failed >> none_failed

dummy_success是一个虚拟节点,无论如何都会成功。

one_failed是 trigger_rule=one_failed 的任务,因此将在 dag 中跳过它。

none_failed是 trigger_rule=none_failed 的任务。

正如气流文档所解释的那样,最终任务将被触发,因为它的所有父母都处于成功状态或被跳过(在这种情况下被跳过)。但是,当我在 GCP 作曲家中运行它时,最后的任务也被跳过了。

我想知道为什么这不符合预期?如果我需要在其父任务成功或跳过时触发我的任务,我还能做什么?

我的镜像版本是 composer-1.7.2-airflow-1.10.2

import datetime as dt

from airflow.models import DAG
from airflow.operators.dummy_operator import DummyOperator

dag = DAG(
    dag_id='test_trigger_rule',
    schedule_interval='@once',
    start_date=dt.datetime(2019, 2, 28)
)

dummy_success= DummyOperator(task_id='dummy_success', dag=dag)
one_failed= DummyOperator(task_id='one_failed', dag=dag, trigger_rule="one_failed")

none_failed = DummyOperator(task_id='none_failed', dag=dag,trigger_rule='none_failed')

dummy_success >> one_failed >> none_failed

标签: google-cloud-platformairflow

解决方案


我尝试在 none_failed 任务的上游添加另一个虚拟节点,然后它按预期工作。

dummy_fix = DummyOperator(task_id='dummy_fix', dag=dag)
dummy_fix >> none_failed

似乎none_failed trigger_rule 仅在任务具有多个上游任务时才有效?


推荐阅读