2017-01-16 86 views

回答

1

内容
中的任务“全部完成”如果SUCCESS的计数,FAILED,UPSTREAM_FAILED,SKIPPED任务是大于或等于的所有上游任务计数。

不知道为什么它会大于?也许子标签对这些数字做了一些奇怪的事情。

如果上游任务的计数和成功上游任务的计数相同,那么任务“全部成功”。

详情
为evaulating触发规则的代码是在这里https://github.com/apache/incubator-airflow/blob/master/airflow/ti_deps/deps/trigger_rule_dep.py#L72

  1. ALL_DONE

下面的代码运行qry并返回第一行(查询是一个聚合那将只会返回一行)到以下变量:

successes, skipped, failed, upstream_failed, done = qry.first() 

查询中的“完成”列对应于:func.count(TI.task_id)换句话说,所有与过滤器匹配的任务的计数。 过滤器指定,它是只计算上游任务,从目前的DAG,从目前的执行日期和此:

TI.state.in_([ 
        State.SUCCESS, State.FAILED, 
        State.UPSTREAM_FAILED, State.SKIPPED]) 

所以done是上游任务与4个状态中的一个的计数。

后来有此代码

upstream = len(task.upstream_task_ids) 
... 
upstream_done = done >= upstream 

和实际触发规则仅失败有关此

if not upstream_done 
  • ALL_SUCCESS
  • 代码非常直接,概念很直观

    num_failures = upstream - successes 
    if num_failures > 0: 
    ... it fails 
    
    相关问题