РЕЗЮМЕ
Задачи считаются выполненными, если количество задач SUCCESS, FAILED, UPSTREAM_FAILED, SKIPPED больше или равно количеству всех восходящих задач.
Не уверен, почему это было бы больше? Возможно, субдаги делают что-то странное с подсчетами.
Задачи считаются «полностью успешными», если количество восходящих задач и количество успешных восходящих задач одинаковы.
ПОДРОБНОСТИ
Код для оценки правил триггеров находится здесь https://github.com/apache/incubator-airflow/blob/master/airflow/ti_deps/deps/trigger_rule_dep.py#L72
- ALL_DONE
Следующий код запускает qry
и возвращает первую строку (запрос представляет собой агрегацию, которая в любом случае будет возвращать только одну строку) в следующие переменные:
successes, skipped, failed, upstream_failed, done = qry.first()
столбец «выполнено» в запросе соответствует следующему: func.count(TI.task_id)
другими словами, количество всех задач, соответствующих фильтру. Фильтр указывает, что он считает только восходящие задачи, начиная с текущего дага, с текущей даты выполнения, и это:
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
person
Davos
schedule
08.12.2017