RNHTTR commented on a change in pull request #14321:
URL: https://github.com/apache/airflow/pull/14321#discussion_r584217795



##########
File path: airflow/jobs/scheduler_job.py
##########
@@ -1696,10 +1696,18 @@ def _schedule_dag_run(
             and dag.dagrun_timeout
             and dag_run.start_date < timezone.utcnow() - dag.dagrun_timeout
         ):
-            dag_run.state = State.FAILED
-            dag_run.end_date = timezone.utcnow()
-            self.log.info("Run %s of %s has timed-out", dag_run.run_id, 
dag_run.dag_id)
+            dag_run.set_state(State.FAILED)
+            unfinished_task_instances = (
+                session.query(TI)
+                .filter(TI.dag_id == dag_run.dag_id)
+                .filter(TI.execution_date == dag_run.execution_date)
+                .filter(TI.state.in_(State.unfinished))
+            )
+            for task_instance in unfinished_task_instances:
+                task_instance.state = State.SKIPPED

Review comment:
       E.g:
   
   ``` python
   def test_do_schedule_max_active_runs_dag_timed_out(self):
       """Test that tasks are set to a finished state when their DAG times 
out"""
       dag = DAG(
           dag_id='test_max_active_run_with_dag_timed_out',
           start_date=DEFAULT_DATE,
           schedule_interval='@once',
           max_active_runs=1,
           catchup=True,
       )
       # Arbitrary timeout long enough to allow run2 to instantiate and queue a 
task
       dag.dagrun_timeout = datetime.timedelta(seconds=10)
   
       with dag:
           task1 = BashOperator(
               task_id='task1',
               bash_command=' for((i=1;i<=600;i+=1)); do sleep "$i";  done',
           )
   
       session = settings.Session()
       dagbag = DagBag(
           dag_folder=os.devnull,
           include_examples=False,
           read_dags_from_db=True,
       )
       
       dagbag.bag_dag(dag=dag, root_dag=dag)
       dagbag.sync_to_db(session=session)
   
       run1 = dag.create_dagrun(
           run_type=DagRunType.SCHEDULED,
           execution_date=DEFAULT_DATE,
           state=State.RUNNING,
           session=session,
       )
   
       run2 = dag.create_dagrun(
           run_type=DagRunType.SCHEDULED,
           execution_date=DEFAULT_DATE + timedelta(hours=1),
           state=State.RUNNING,
           session=session,
       )
   
       sleep(10)
   
       dag.sync_to_db(session=session)
   
       job = SchedulerJob(subdir=os.devnull)
       job.executor = MockExecutor(do_update=False)
       job.processor_agent = mock.MagicMock(spec=DagFileProcessorAgent)
   
       num_queued = job._do_scheduling(session)
   
       assert num_queued == 1
       ti = run2.get_task_instance(task1.task_id, session)
       assert ti.state == State.QUEUED    
       ```




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to