Airflow 如果任何任务失败,如何将气流DAG运行标记为失败?

Airflow 如果任何任务失败,如何将气流DAG运行标记为失败?,airflow,Airflow,如果任何任务失败,是否可能使气流DAG失败 我通常在DAG结束时有一些清理任务,现在,只要最后一个任务成功,整个DAG就会被标记为成功。面临类似的问题。这不是一个bug,但将此属性添加到Dag可能是一个不错的特性 作为一种解决方法,我建议您可以在允许失败的任务期间推送XCOM变量,并在下游任务中执行以下操作 如果ti.xcom\u pull(key='state',task\u id=task\u allowed\u fail\u id)=='FAILED': raise VALUERROR(“

如果任何任务失败,是否可能使气流DAG失败


我通常在DAG结束时有一些清理任务,现在,只要最后一个任务成功,整个DAG就会被标记为成功。

面临类似的问题。这不是一个bug,但将此属性添加到Dag可能是一个不错的特性

作为一种解决方法,我建议您可以在允许失败的任务期间推送XCOM变量,并在下游任务中执行以下操作

如果ti.xcom\u pull(key='state',task\u id=task\u allowed\u fail\u id)=='FAILED':

raise VALUERROR(“强制失败,因为上游任务已失败”)

另一个解决方案是添加一个最终PythonOperator,用于检查此运行中所有任务的状态:

final_status = PythonOperator(
    task_id='final_status',
    provide_context=True,
    python_callable=final_status,
    trigger_rule=TriggerRule.ALL_DONE, # Ensures this task runs even if upstream fails
    dag=dag,
)

def final_status(**kwargs):
    for task_instance in kwargs['dag_run'].get_task_instances():
        if task_instance.current_state() != State.SUCCESS and \
                task_instance.task_id != kwargs['task_instance'].task_id:
            raise Exception("Task {} failed. Failing this DAG run".format(task_instance.task_id))

可能与此相关,但它不相同,在我的情况下,任务已执行,但整个dag标记为成功,而不是失败。我有相同的问题。我认为这是一个bug。我更喜欢这个解决方案,因为我可以简单地编写这个操作符一次,然后简单地把它放在任何DAG的末尾,而不改变任何操作符。