2017-01-16 87 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 
    
    相關問題