Reputation: 1
I am trying to implement dependency between two dags: parent_dag and child_dag. parent dag has two dummy tasks: leave_work, cook_dinner child dag has three tasks: wait_for_dinner, have_dinner, play_with_food
wait_for_dinner uses external_task_sensor with external_dag_id as parent_dag and external_task_id as cook_dinner. start_date and schedule_interval are same for both the dags.
when parent_dag gets completed then wait_for_dinner should be succesfully exited and next task should run but its not happening in my case. (It is working fine if dags are not scheduled i.e. schedule_interval = @once) If dags are scheduled then wait_for_dinner is in running state forever. it is not listening parent_dag success.
Kindly help me with this.
code snippets:
parent_dag :
dag = DAG(
'Parent_dag',
default_args=default_args,
start_date = convert_to_utc(1606712300),
schedule_interval=datetime.timedelta(minutes = 5),
is_paused_upon_creation = False,
catchup = False
)
leave_work = DummyOperator(
task_id='leave_work',
dag=dag,
)
cook_dinner = DummyOperator(
task_id='cook_dinner',
dag=dag,
)
leave_work >> cook_dinner
child_dag:
dag = DAG(
'Child_dag',
default_args=default_args,
start_date = convert_to_utc(1606712300),
schedule_interval=datetime.timedelta(minutes=5),
is_paused_upon_creation = False,
catchup = False
)
wait_for_dinner = ExternalTaskSensor(
task_id='wait_for_dinner',
external_dag_id='Parent_dag',
external_task_id='cook_dinner',
mode = "reschedule",
timeout = 3600,
dag = dag
)
have_dinner = DummyOperator(
task_id='have_dinner',
dag=dag,
)
play_with_food = DummyOperator(
task_id='play_with_food',
dag=dag,
)
wait_for_dinner >> have_dinner
wait_for_dinner >> play_with_food
Upvotes: 0
Views: 842
Reputation: 821
Take a look at the new version of the TriggerDagRunOperator in Airflow 2.0, it became much easier than before.
Check out my video here https://youtu.be/8uKW0mPWmCk
Upvotes: -1
Reputation: 1376
When I want to start one dag from another, I use TriggerDagRunOperator
in the parent, not ExternalTaskSensor
in the child. TriggerDagRunOperator
is more reliable.
Upvotes: 1