如果任何任务失败,如何将Airflow DAG标记为失败?

时间:2018-04-27 05:05:54

标签: airflow

如果任何任务失败,是否可以使Airflow DAG失败?

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

2 个答案:

答案 0 :(得分:4)

面对类似的问题。这不是一个错误,但将此属性添加到Dag可能是一个很好的功能。

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

的操作

if ti.xcom_pull(key='state', task_ids=task_allowed_to_fail_id) == 'FAILED': raise ValueError('Force failure because upstream task has failed')

答案 1 :(得分:1)

另一种解决方案可以是添加最终的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))