Airflow 如果任何任务失败,如何将气流DAG运行标记为失败?
如果任何任务失败,是否可能使气流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就会被标记为成功。面临类似的问题。这不是一个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的末尾,而不改变任何操作符。