Existe-t-il un moyen dans le flux d'air d'utiliser le depends_on_past
pour un DagRun entier, pas seulement appliqué à une tâche?
J'ai un DAG quotidien et le DagRun du vendredi s'est trompé sur la 4ème tâche, mais les DagRuns du samedi et du dimanche ont toujours fonctionné comme prévu. En utilisant depends_on_past = True
aurait interrompu le DagRun sur la même 4ème tâche, mais les 3 premières tâches auraient quand même été exécutées.
Je peux voir dans la table DB DagRun qu'il y a une colonne state
qui contient failed
pour le Friday DagRun. Ce que je veux, c'est un moyen de configurer un DagRun pour ne pas démarrer si le DagRun précédent a échoué, ne pas démarrer et s'exécuter jusqu'à trouver une tâche qui a précédemment échoué.
Est-ce que quelqu'un sait si c'est possible?
Lors de votre première tâche, définissez depends_on_past=True
et wait_for_downstream=True
, la combinaison se traduira par les exécutions en cours d'exécution en cours uniquement si la dernière exécution a réussi.
Parce qu'en définissant la première tâche au niveau du dag-run en cours, la précédente (depend_on_past) et toutes les tâches (wait_for_downstream) réussiront
Une solution possible serait d'utiliser xcom
:
start_task
et end_task
au DAG.start_task
end_task
dépend de toutes les autres tâches (set_upstream
).end_task
poussera toujours une variable last_success = context['execution_date']
à xcom (xcom_Push
). (A besoin provide_context = True
dans les PythonOperators).start_task
vérifiera toujours xcom (xcom_pull
) pour voir s'il existe un last_success
variable avec une valeur égale à la date d'exécution du DagRun précédente ou à la date de début du DAG (pour laisser le processus démarrer).Exemple d'utilisation de xcom:
https://github.com/Apache/incubator-airflow/blob/master/airflow/example_dags/example_xcom.py