我曾经遇到过第二个条件("其他任务的状态不为'null'")的另一种情况,就是当任务实例发生变化,并且特别是变成了不同的运算符类型时。
我希望你已经得到答案或者成功解决了问题。在过去的一个月中,我也遇到了这个问题几次,因此我决定记录下我最终采取的解决方法。
示例:
我尽力推断出正在发生的事情如下:
task_instance
中
operator
的属性task_instance
;如果没有找到,它会将相关的数据库记录更新为状态=“removed”您可以使用以下查询查看受此过程影响的任务:
SELECT *
FROM task_instance
WHERE state = 'removed'
看起来airflow 1.10已经对此问题进行了修复:
话虽如此,根据我找到的提交记录,我不能百分之百确定这个修复措施可以解决这个问题。似乎整体哲学仍然是“当DAG发生变化时,您应该增加/更改DAG名称”。
我不太喜欢这种解决方案,因为它使基本上是一个流水线的迭代变得困难。我使用的替代方法部分地遵循Astronomer的建议,“展开”DAG历史记录。要做到这一点,您需要:
upstream_failed
),并且任务记录上从未收到hostname
值,因此不会有任何日志或PID。