From 1db96313fea89ec698930fbee2b79a1efc536e2b Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Fri, 25 Aug 2023 22:28:49 +0200 Subject: [PATCH 01/13] Remove unused state: SHUTDOWN This state is never set in production code, so it may as well be deprecated. --- airflow/utils/state.py | 11 +---------- airflow/www/utils.py | 1 - tests/models/test_dagrun.py | 6 +++--- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/airflow/utils/state.py b/airflow/utils/state.py index 6da7dacc75ce4..70def6e6a5eff 100644 --- a/airflow/utils/state.py +++ b/airflow/utils/state.py @@ -51,7 +51,6 @@ class TaskInstanceState(str, Enum): QUEUED = "queued" # Executor has enqueued the task RUNNING = "running" # Task is executing SUCCESS = "success" # Task completed - SHUTDOWN = "shutdown" # External request to shut down (e.g. marked failed when running) RESTARTING = "restarting" # External request to restart (e.g. cleared when running) FAILED = "failed" # Task errored out UP_FOR_RETRY = "up_for_retry" # Task failed but has retries left @@ -95,7 +94,6 @@ class State: REMOVED = TaskInstanceState.REMOVED SCHEDULED = TaskInstanceState.SCHEDULED QUEUED = TaskInstanceState.QUEUED - SHUTDOWN = TaskInstanceState.SHUTDOWN RESTARTING = TaskInstanceState.RESTARTING UP_FOR_RETRY = TaskInstanceState.UP_FOR_RETRY UP_FOR_RESCHEDULE = TaskInstanceState.UP_FOR_RESCHEDULE @@ -120,7 +118,6 @@ class State: TaskInstanceState.QUEUED: "gray", TaskInstanceState.RUNNING: "lime", TaskInstanceState.SUCCESS: "green", - TaskInstanceState.SHUTDOWN: "blue", TaskInstanceState.RESTARTING: "violet", TaskInstanceState.FAILED: "red", TaskInstanceState.UP_FOR_RETRY: "gold", @@ -169,7 +166,6 @@ def color_fg(cls, state): TaskInstanceState.SCHEDULED, TaskInstanceState.QUEUED, TaskInstanceState.RUNNING, - TaskInstanceState.SHUTDOWN, TaskInstanceState.RESTARTING, TaskInstanceState.UP_FOR_RETRY, TaskInstanceState.UP_FOR_RESCHEDULE, @@ -195,12 +191,7 @@ def color_fg(cls, state): A list of states indicating that a task or dag is a success state. """ - terminating_states = frozenset([TaskInstanceState.SHUTDOWN, TaskInstanceState.RESTARTING]) - """ - A list of states indicating that a task has been terminated. - """ - - adoptable_states = frozenset( + adoptable_states: frozenset[TaskInstanceState] = frozenset( [TaskInstanceState.QUEUED, TaskInstanceState.RUNNING, TaskInstanceState.RESTARTING] ) """ diff --git a/airflow/www/utils.py b/airflow/www/utils.py index 7541f6445e580..70e688cd15078 100644 --- a/airflow/www/utils.py +++ b/airflow/www/utils.py @@ -107,7 +107,6 @@ def get_try_count(try_number: int, state: State): TaskInstanceState.SCHEDULED, TaskInstanceState.DEFERRED, TaskInstanceState.RUNNING, - TaskInstanceState.SHUTDOWN, TaskInstanceState.RESTARTING, None, TaskInstanceState.SUCCESS, diff --git a/tests/models/test_dagrun.py b/tests/models/test_dagrun.py index 5d809333c82e4..e789a2ef2be22 100644 --- a/tests/models/test_dagrun.py +++ b/tests/models/test_dagrun.py @@ -336,8 +336,8 @@ def test_dagrun_deadlock(self, session): dr.update_state(session=session) assert dr.state == DagRunState.FAILED - def test_dagrun_no_deadlock_with_shutdown(self, session): - dag = DAG("test_dagrun_no_deadlock_with_shutdown", start_date=DEFAULT_DATE) + def test_dagrun_no_deadlock_with_restarting(self, session): + dag = DAG("test_dagrun_no_deadlock_with_restarting", start_date=DEFAULT_DATE) with dag: op1 = EmptyOperator(task_id="upstream_task") op2 = EmptyOperator(task_id="downstream_task") @@ -351,7 +351,7 @@ def test_dagrun_no_deadlock_with_shutdown(self, session): start_date=DEFAULT_DATE, ) upstream_ti = dr.get_task_instance(task_id="upstream_task") - upstream_ti.set_state(TaskInstanceState.SHUTDOWN, session=session) + upstream_ti.set_state(TaskInstanceState.RESTARTING, session=session) dr.update_state() assert dr.state == DagRunState.RUNNING From 9ba89b8cfc702a3b946e84c15835a76f80468079 Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Fri, 25 Aug 2023 22:49:31 +0200 Subject: [PATCH 02/13] update --- airflow/jobs/job.py | 2 +- airflow/utils/state.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/airflow/jobs/job.py b/airflow/jobs/job.py index 159b8f934a1b7..63afa896fb6ae 100644 --- a/airflow/jobs/job.py +++ b/airflow/jobs/job.py @@ -190,7 +190,7 @@ def heartbeat( session.merge(self) previous_heartbeat = self.latest_heartbeat - if self.state in (JobState.SHUTDOWN, JobState.RESTARTING): + if self.state == JobState.RESTARTING: # TODO: Make sure it is AIP-44 compliant self.kill() diff --git a/airflow/utils/state.py b/airflow/utils/state.py index 70def6e6a5eff..a7604565820c7 100644 --- a/airflow/utils/state.py +++ b/airflow/utils/state.py @@ -25,7 +25,6 @@ class JobState(str, Enum): RUNNING = "running" SUCCESS = "success" - SHUTDOWN = "shutdown" RESTARTING = "restarting" FAILED = "failed" From e41b1d6e1a53c0b8c5304390715fb497b50514a3 Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Sat, 26 Aug 2023 00:13:17 +0200 Subject: [PATCH 03/13] Update: remove remaining references --- tests/cli/commands/test_jobs_command.py | 2 +- tests/jobs/test_scheduler_job.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/cli/commands/test_jobs_command.py b/tests/cli/commands/test_jobs_command.py index 0ec89149040cd..541c644c88c16 100644 --- a/tests/cli/commands/test_jobs_command.py +++ b/tests/cli/commands/test_jobs_command.py @@ -109,7 +109,7 @@ def test_should_ignore_not_running_jobs(self): for _ in range(3): scheduler_job = Job() job_runner = SchedulerJobRunner(job=scheduler_job) - scheduler_job.state = State.SHUTDOWN + scheduler_job.state = State.FAILED session.add(scheduler_job) scheduler_jobs.append(scheduler_job) job_runners.append(job_runner) diff --git a/tests/jobs/test_scheduler_job.py b/tests/jobs/test_scheduler_job.py index d1612a84f3cab..196e140271184 100644 --- a/tests/jobs/test_scheduler_job.py +++ b/tests/jobs/test_scheduler_job.py @@ -4559,7 +4559,7 @@ def test_find_zombies(self, load_examples): local_job = Job(dag_id=ti.dag_id) LocalTaskJobRunner(job=local_job, task_instance=ti) - local_job.state = State.SHUTDOWN + local_job.state = State.FAILED session.add(local_job) session.flush() @@ -4622,7 +4622,7 @@ def test_zombie_message(self, load_examples): ti.queued_by_job_id = 999 local_job = Job(dag_id=ti.dag_id) - local_job.state = State.SHUTDOWN + local_job.state = State.FAILED session.add(local_job) session.flush() @@ -4683,7 +4683,7 @@ def test_find_zombies_handle_failure_callbacks_are_correctly_passed_to_dag_proce local_job = Job(dag_id=ti.dag_id) LocalTaskJobRunner(job=local_job, task_instance=ti) - local_job.state = State.SHUTDOWN + local_job.state = State.FAILED session.add(local_job) session.flush() From 8bb0e3a8dbeccd9730177cad310f85e9ce0a870b Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Sat, 26 Aug 2023 00:57:54 +0200 Subject: [PATCH 04/13] update tests --- tests/www/views/test_views_cluster_activity.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/www/views/test_views_cluster_activity.py b/tests/www/views/test_views_cluster_activity.py index 1825a1d680620..0c70ea1425e92 100644 --- a/tests/www/views/test_views_cluster_activity.py +++ b/tests/www/views/test_views_cluster_activity.py @@ -115,7 +115,6 @@ def test_historical_metrics_data(admin_client, session, time_machine): "restarting": 0, "running": 0, "scheduled": 0, - "shutdown": 0, "skipped": 0, "success": 2, "up_for_reschedule": 0, @@ -144,7 +143,6 @@ def test_historical_metrics_data_date_filters(admin_client, session): "restarting": 0, "running": 0, "scheduled": 0, - "shutdown": 0, "skipped": 0, "success": 0, "up_for_reschedule": 0, From a7d7b2399accbfcfb8ba0c2c0e0ca9faa9423cbc Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Sun, 27 Aug 2023 01:51:19 +0200 Subject: [PATCH 05/13] remove remaining references --- airflow/settings.py | 1 - airflow/www/jest-setup.js | 1 - 2 files changed, 2 deletions(-) diff --git a/airflow/settings.py b/airflow/settings.py index 4ba9e80bd760f..0c4624777abc7 100644 --- a/airflow/settings.py +++ b/airflow/settings.py @@ -100,7 +100,6 @@ "restarting": "violet", "running": "lime", "scheduled": "tan", - "shutdown": "blue", "skipped": "hotpink", "success": "green", "up_for_reschedule": "turquoise", diff --git a/airflow/www/jest-setup.js b/airflow/www/jest-setup.js index b2e403c25ef9f..b4ce3218c360e 100644 --- a/airflow/www/jest-setup.js +++ b/airflow/www/jest-setup.js @@ -49,7 +49,6 @@ global.stateColors = { restarting: "violet", running: "lime", scheduled: "tan", - shutdown: "blue", skipped: "hotpink", success: "green", up_for_reschedule: "turquoise", From 7ce51a2ca8669c78efd098ad5defbf03eb8bb22b Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Sun, 27 Aug 2023 03:03:26 +0200 Subject: [PATCH 06/13] fix test --- tests/www/views/test_views_home.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/www/views/test_views_home.py b/tests/www/views/test_views_home.py index 03d66e6b2e18b..4c0ea017e6478 100644 --- a/tests/www/views/test_views_home.py +++ b/tests/www/views/test_views_home.py @@ -56,7 +56,7 @@ def test_home(capture_templates, admin_client): '"null": "lightblue", "queued": "gray", ' '"removed": "lightgrey", "restarting": "violet", "running": "lime", ' '"scheduled": "tan", ' - '"shutdown": "blue", "skipped": "hotpink", ' + '"skipped": "hotpink", ' '"success": "green", "up_for_reschedule": "turquoise", ' '"up_for_retry": "gold", "upstream_failed": "orange"};' ) From cf0775c5e2e576f2410f68dd394cbc3a7ab80310 Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Sun, 27 Aug 2023 18:07:07 +0200 Subject: [PATCH 07/13] update diagram I used good ol' Paint because couldn't find the original .drawio file --- .../img/task_lifecycle_diagram.png | Bin 58659 -> 32164 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/apache-airflow/img/task_lifecycle_diagram.png b/docs/apache-airflow/img/task_lifecycle_diagram.png index 810942fc7400172ccc40074a3ef2a2b3fc9a9362..2114d7f5d7234b13cb8aa3694fc9a48175819982 100644 GIT binary patch literal 32164 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

X?3~~ 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 From a2cc3a48d2a41da62a7d93aba9b00ac0c885aa0b Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Mon, 28 Aug 2023 10:19:51 +0200 Subject: [PATCH 08/13] Refactor State to strongly typed state enum in test_jobs_command --- tests/cli/commands/test_jobs_command.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/cli/commands/test_jobs_command.py b/tests/cli/commands/test_jobs_command.py index 541c644c88c16..28d0de17204c9 100644 --- a/tests/cli/commands/test_jobs_command.py +++ b/tests/cli/commands/test_jobs_command.py @@ -26,7 +26,7 @@ from airflow.jobs.job import Job from airflow.jobs.scheduler_job_runner import SchedulerJobRunner from airflow.utils.session import create_session -from airflow.utils.state import State +from airflow.utils.state import JobState from tests.test_utils.db import clear_db_jobs @@ -49,7 +49,7 @@ def test_should_report_success_for_one_working_scheduler(self): with create_session() as session: self.scheduler_job = Job() self.job_runner = SchedulerJobRunner(job=self.scheduler_job) - self.scheduler_job.state = State.RUNNING + self.scheduler_job.state = JobState.RUNNING session.add(self.scheduler_job) session.commit() self.scheduler_job.heartbeat(heartbeat_callback=self.job_runner.heartbeat_callback) @@ -62,7 +62,7 @@ def test_should_report_success_for_one_working_scheduler_with_hostname(self): with create_session() as session: self.scheduler_job = Job() self.job_runner = SchedulerJobRunner(job=self.scheduler_job) - self.scheduler_job.state = State.RUNNING + self.scheduler_job.state = JobState.RUNNING self.scheduler_job.hostname = "HOSTNAME" session.add(self.scheduler_job) session.commit() @@ -83,7 +83,7 @@ def test_should_report_success_for_ha_schedulers(self): for _ in range(3): scheduler_job = Job() job_runner = SchedulerJobRunner(job=scheduler_job) - scheduler_job.state = State.RUNNING + scheduler_job.state = JobState.RUNNING session.add(scheduler_job) scheduler_jobs.append(scheduler_job) job_runners.append(job_runner) @@ -109,7 +109,7 @@ def test_should_ignore_not_running_jobs(self): for _ in range(3): scheduler_job = Job() job_runner = SchedulerJobRunner(job=scheduler_job) - scheduler_job.state = State.FAILED + scheduler_job.state = JobState.FAILED session.add(scheduler_job) scheduler_jobs.append(scheduler_job) job_runners.append(job_runner) @@ -129,7 +129,7 @@ def test_should_raise_exception_for_multiple_scheduler_on_one_host(self): scheduler_job = Job() job_runner = SchedulerJobRunner(job=scheduler_job) job_runner.job = scheduler_job - scheduler_job.state = State.RUNNING + scheduler_job.state = JobState.RUNNING scheduler_job.hostname = "HOSTNAME" session.add(scheduler_job) scheduler_jobs.append(scheduler_job) From d296144ef43c707e56692eef225a9ddb3538329d Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Mon, 28 Aug 2023 10:23:44 +0200 Subject: [PATCH 09/13] Rollback type updates on lines that were not affected by this PR --- tests/cli/commands/test_jobs_command.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/cli/commands/test_jobs_command.py b/tests/cli/commands/test_jobs_command.py index 28d0de17204c9..9047316bda98d 100644 --- a/tests/cli/commands/test_jobs_command.py +++ b/tests/cli/commands/test_jobs_command.py @@ -26,7 +26,7 @@ from airflow.jobs.job import Job from airflow.jobs.scheduler_job_runner import SchedulerJobRunner from airflow.utils.session import create_session -from airflow.utils.state import JobState +from airflow.utils.state import State, JobState from tests.test_utils.db import clear_db_jobs @@ -49,7 +49,7 @@ def test_should_report_success_for_one_working_scheduler(self): with create_session() as session: self.scheduler_job = Job() self.job_runner = SchedulerJobRunner(job=self.scheduler_job) - self.scheduler_job.state = JobState.RUNNING + self.scheduler_job.state = State.RUNNING session.add(self.scheduler_job) session.commit() self.scheduler_job.heartbeat(heartbeat_callback=self.job_runner.heartbeat_callback) @@ -62,7 +62,7 @@ def test_should_report_success_for_one_working_scheduler_with_hostname(self): with create_session() as session: self.scheduler_job = Job() self.job_runner = SchedulerJobRunner(job=self.scheduler_job) - self.scheduler_job.state = JobState.RUNNING + self.scheduler_job.state = State.RUNNING self.scheduler_job.hostname = "HOSTNAME" session.add(self.scheduler_job) session.commit() From c5bc929368d69a28dfa604e66148244f69bd9fa8 Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Mon, 28 Aug 2023 10:25:05 +0200 Subject: [PATCH 10/13] Update State to strongly typed TaskInstanceState in test_scheduler_job.py --- tests/jobs/test_scheduler_job.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/jobs/test_scheduler_job.py b/tests/jobs/test_scheduler_job.py index 196e140271184..38a2b71fd25f8 100644 --- a/tests/jobs/test_scheduler_job.py +++ b/tests/jobs/test_scheduler_job.py @@ -4559,7 +4559,7 @@ def test_find_zombies(self, load_examples): local_job = Job(dag_id=ti.dag_id) LocalTaskJobRunner(job=local_job, task_instance=ti) - local_job.state = State.FAILED + local_job.state = TaskInstanceState.FAILED session.add(local_job) session.flush() @@ -4622,7 +4622,7 @@ def test_zombie_message(self, load_examples): ti.queued_by_job_id = 999 local_job = Job(dag_id=ti.dag_id) - local_job.state = State.FAILED + local_job.state = TaskInstanceState.FAILED session.add(local_job) session.flush() From dd65daad9f20820ec7b1f2a35df6136e95ee3b3d Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Mon, 28 Aug 2023 10:27:55 +0200 Subject: [PATCH 11/13] update --- tests/cli/commands/test_jobs_command.py | 4 ++-- tests/jobs/test_scheduler_job.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/cli/commands/test_jobs_command.py b/tests/cli/commands/test_jobs_command.py index 9047316bda98d..7c100b836b501 100644 --- a/tests/cli/commands/test_jobs_command.py +++ b/tests/cli/commands/test_jobs_command.py @@ -83,7 +83,7 @@ def test_should_report_success_for_ha_schedulers(self): for _ in range(3): scheduler_job = Job() job_runner = SchedulerJobRunner(job=scheduler_job) - scheduler_job.state = JobState.RUNNING + scheduler_job.state = State.RUNNING session.add(scheduler_job) scheduler_jobs.append(scheduler_job) job_runners.append(job_runner) @@ -129,7 +129,7 @@ def test_should_raise_exception_for_multiple_scheduler_on_one_host(self): scheduler_job = Job() job_runner = SchedulerJobRunner(job=scheduler_job) job_runner.job = scheduler_job - scheduler_job.state = JobState.RUNNING + scheduler_job.state = State.RUNNING scheduler_job.hostname = "HOSTNAME" session.add(scheduler_job) scheduler_jobs.append(scheduler_job) diff --git a/tests/jobs/test_scheduler_job.py b/tests/jobs/test_scheduler_job.py index 38a2b71fd25f8..156e03e5fb58b 100644 --- a/tests/jobs/test_scheduler_job.py +++ b/tests/jobs/test_scheduler_job.py @@ -59,7 +59,7 @@ from airflow.utils import timezone from airflow.utils.file import list_py_file_paths from airflow.utils.session import create_session, provide_session -from airflow.utils.state import DagRunState, State, TaskInstanceState +from airflow.utils.state import DagRunState, State, TaskInstanceState, JobState from airflow.utils.types import DagRunType from tests.listeners import dag_listener from tests.listeners.test_listeners import get_listener_manager @@ -4683,7 +4683,7 @@ def test_find_zombies_handle_failure_callbacks_are_correctly_passed_to_dag_proce local_job = Job(dag_id=ti.dag_id) LocalTaskJobRunner(job=local_job, task_instance=ti) - local_job.state = State.FAILED + local_job.state = JobState.FAILED session.add(local_job) session.flush() From 8c803c8bc6c92c680da5ac9c8e5c662bdbb079a3 Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Mon, 28 Aug 2023 10:39:52 +0200 Subject: [PATCH 12/13] Revert adding unnecessary type rannotation --- airflow/utils/state.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airflow/utils/state.py b/airflow/utils/state.py index a7604565820c7..da5381215df05 100644 --- a/airflow/utils/state.py +++ b/airflow/utils/state.py @@ -190,7 +190,7 @@ def color_fg(cls, state): A list of states indicating that a task or dag is a success state. """ - adoptable_states: frozenset[TaskInstanceState] = frozenset( + adoptable_states = frozenset( [TaskInstanceState.QUEUED, TaskInstanceState.RUNNING, TaskInstanceState.RESTARTING] ) """ From 6506b942eff3a014ee4b4bae0c48f760803d85d7 Mon Sep 17 00:00:00 2001 From: "daniel.dylag" Date: Mon, 28 Aug 2023 11:29:14 +0200 Subject: [PATCH 13/13] fix static checks --- tests/cli/commands/test_jobs_command.py | 2 +- tests/jobs/test_scheduler_job.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/cli/commands/test_jobs_command.py b/tests/cli/commands/test_jobs_command.py index 7c100b836b501..54d642d7e5aee 100644 --- a/tests/cli/commands/test_jobs_command.py +++ b/tests/cli/commands/test_jobs_command.py @@ -26,7 +26,7 @@ from airflow.jobs.job import Job from airflow.jobs.scheduler_job_runner import SchedulerJobRunner from airflow.utils.session import create_session -from airflow.utils.state import State, JobState +from airflow.utils.state import JobState, State from tests.test_utils.db import clear_db_jobs diff --git a/tests/jobs/test_scheduler_job.py b/tests/jobs/test_scheduler_job.py index 156e03e5fb58b..6ce98d1a0f532 100644 --- a/tests/jobs/test_scheduler_job.py +++ b/tests/jobs/test_scheduler_job.py @@ -59,7 +59,7 @@ from airflow.utils import timezone from airflow.utils.file import list_py_file_paths from airflow.utils.session import create_session, provide_session -from airflow.utils.state import DagRunState, State, TaskInstanceState, JobState +from airflow.utils.state import DagRunState, JobState, State, TaskInstanceState from airflow.utils.types import DagRunType from tests.listeners import dag_listener from tests.listeners.test_listeners import get_listener_manager