В чем разница между правилом триггера воздушного потока all_done и all_success?

Одним из требований рабочего процесса, над которым я работаю, является ожидание какого-либо события в течение заданного времени. Если этого не произошло, отметьте задачу как неудачную, но все же последующая задача должна быть выполнена.

Мне интересно, означает ли «all_done» все задачи зависимостей, независимо от того, были ли они успешными или нет.


person samarth    schedule 16.01.2017    source источник


Ответы (4)


https://airflow.incubator.apache.org/concepts.html#trigger-rules

all_done означает, что все операции завершены. Может, им это удалось, а может, и нет.

all_success означает, что все операции завершились без ошибок

Итак, ваша догадка верна

person Sheena    schedule 07.02.2017
comment
@pgoggijr да, это так, УСПЕХ, ОТКАЗ, UPSTREAM_FAILED, ПРОПУСК - все в счет. - person Davos; 08.12.2017

РЕЗЮМЕ
Задачи считаются выполненными, если количество задач SUCCESS, FAILED, UPSTREAM_FAILED, SKIPPED больше или равно количеству всех восходящих задач.

Не уверен, почему это было бы больше? Возможно, субдаги делают что-то странное с подсчетами.

Задачи считаются «полностью успешными», если количество восходящих задач и количество успешных восходящих задач одинаковы.

ПОДРОБНОСТИ
Код для оценки правил триггеров находится здесь 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) другими словами, количество всех задач, соответствующих фильтру. Фильтр указывает, что он считает только восходящие задачи, начиная с текущего дага, с текущей даты выполнения, и это:

 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
  1. ALL_SUCCESS

Код довольно прост, а концепция интуитивно понятна.

num_failures = upstream - successes
if num_failures > 0:
... it fails
person Davos    schedule 08.12.2017

Рассмотрите возможность использования ShortCircuitOperator для указанной вами цели.

person javed    schedule 28.03.2017

У всех операторов есть аргумент trigger_rule, который определяет правило, по которому сгенерированная задача запускается.

Я использовал эти правила триггеров в следующих случаях:

all_success: (по умолчанию) все родители добились успеха

all_done: все родители завершили свою казнь.

To carry out cleanups irrespective of the upstream tasks
succeeded or failed then setting this trigger_rule to ALL_DONE is always useful.

one_success: запускается, как только хотя бы один родитель преуспевает, не дожидаясь завершения всех родителей.

To trigger external DAG after successful completion of the single upstream parent.

one_failed: запускается, как только хотя бы один родитель потерпел неудачу, не дожидаясь завершения всех родителей.

To trigger the alerts once at least one parent fails or for any other use case.

Справочник

person Ajit K'sagar    schedule 20.11.2020