Airflow ExternalTaskSensor在第一次超时后进入无限向上\u FOR\u重试循环

Airflow ExternalTaskSensor在第一次超时后进入无限向上\u FOR\u重试循环,airflow,airflow-scheduler,Airflow,Airflow Scheduler,提醒:我知道这个问题已经被问过好几次了,尽管有点不同,而且提供的任何可能的解决方案都不能解决我的问题,所以这就是我在这里提问的原因 上下文: 我正在连续运行几个DAG: A-->B-->C 其中A、B和C是不同的DAG。B将在A完成后运行,C将在B完成后运行。它们是每日DAG,在同一时间启动,并具有重试回退功能。DAG是使用默认参数创建的,但我覆盖到1秒的重试延迟除外。示例如下: DAG( "dag_A", schedule_interval=timedelta(days=1),

提醒:我知道这个问题已经被问过好几次了,尽管有点不同,而且提供的任何可能的解决方案都不能解决我的问题,所以这就是我在这里提问的原因

上下文:

我正在连续运行几个DAG:

A-->B-->C

其中A、B和C是不同的DAG。B将在A完成后运行,C将在B完成后运行。它们是每日DAG,在同一时间启动,并具有重试回退功能。DAG是使用默认参数创建的,但我覆盖到1秒的
重试延迟
除外。示例如下:

DAG(
    "dag_A",
    schedule_interval=timedelta(days=1),
    default_args=dict(
        start_date=datetime(2019, 10, 8, 22),
        retries=4,
        retry_delay=timedelta(seconds=1),
        ...
    ),
)
为了启动B和C,我有一个
ExternalTaskSensor
等待上一个DAG完成

sensor_in_B = ExternalTaskSensor(
    task_id="sensor_in_B",
    external_dag_id="dag_A",
    external_task_id="task_in_A",
    poke_interval=30,
    timeout=240,
)
问题:

B
为例(但C也会发生这种情况)<代码>B的传感器超时240秒。但是
A
需要240多秒才能完成。因此,当前,
B
将始终至少超时一次,直到A完成。问题发生在第一次超时之后。B的传感器任务在重试时卡在
UP\u状态,并且不能离开该状态,除非通过气流UI进行手动干预。以下是观察到的错误:

Dependencies not met for <TaskInstance: dag_B.sensor_in_B 2019-12-08 15:00:00 [up_for_retry]>, dependency 'Not In Retry Period' FAILED: Task is not ready for retry yet but will be retried automatically. Current date is 2019-12-09T15:08:39.861820 and task will be retried at 2019-12-09T15:08:40.007209.
不满足的依赖项,依赖项“不在重试期”失败:任务尚未准备好重试,但将自动重试。当前日期为2019-12-09T15:08:39.861820,任务将在2019-12-09T15:08:40.007209重试。
有时它发生在第一次超时之后。有时,它只在第二次超时后发生。但它总是在第一次尝试时运行,没有错误。此外,有时错误不会发生,执行也会正常运行。上述错误发生时,不仅出现一次,而且每10秒出现一次,需要手动干预才能停止。当前时间和重试时间之间的差异始终很小,在毫秒范围内(约0.1秒)

一个猜测…

我有一种感觉,这可能与我使用的非常低的
重试时间
1秒有关

错误消息似乎是源于此,您可以看到
cur\u date
next\u task\u retry\u date
,这是在错误消息中呈现的值,在实际比较之前进行计算,实际比较发生在
is\u premature()调用路径之后。我的猜测是,实际到达做出失败决定的位置需要超过0.1秒的时间,然后它到达并继续这个错误循环

类似的问题也有同样的问题,并使用了1分钟的重试延迟,所以这可能不是因为我使用了1秒的重试时间