我有一个运行多个BashOperator任务的气流DAG。这些任务又调用API,在EMR集群上提交作业。 API根据EMR作业是成功(0),失败(1)还是超时(124)返回不同的退出代码。只有超时的任务才能通过气流重试。
是否可以在错误上设置回调函数,捕获退出代码并重新触发任务?如果没有,那么这可以通过我错过的一些现有功能来处理吗?
==编辑1 == 有人挖了气流源并发现了这个:
if sp.returncode:
raise AirflowException("Bash command failed")
这表示除非退出代码为0,否则气流会将所有其他退出代码的任务标记为失败。基本上,对于0以外的任何退出代码,气流将根据配置的重试值重试该任务。
另外,如果我在回调on_error中添加逻辑以基于error_code重试,我将无法控制重试任务的次数。