This is an automated email from the ASF dual-hosted git repository.
pierrejeambrun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 6c7f26052c2 Add run after to task instances endpoints (#46741)
6c7f26052c2 is described below
commit 6c7f26052c2953596709d19382756256d9acc1f6
Author: Brent Bovenzi <[email protected]>
AuthorDate: Mon Feb 17 09:33:36 2025 -0500
Add run after to task instances endpoints (#46741)
* Add run_after to task_instances endpoints in fastapi
* Fix CI and tests
---
.../core_api/datamodels/task_instances.py | 3 ++
.../api_fastapi/core_api/openapi/v1-generated.yaml | 53 ++++++++++++++++++++++
.../core_api/routes/public/task_instances.py | 17 ++++++-
airflow/models/taskinstance.py | 1 +
airflow/ui/openapi-gen/queries/common.ts | 12 +++++
airflow/ui/openapi-gen/queries/prefetch.ts | 20 ++++++++
airflow/ui/openapi-gen/queries/queries.ts | 20 ++++++++
airflow/ui/openapi-gen/queries/suspense.ts | 20 ++++++++
airflow/ui/openapi-gen/requests/schemas.gen.ts | 30 ++++++++++++
airflow/ui/openapi-gen/requests/services.gen.ts | 8 ++++
airflow/ui/openapi-gen/requests/types.gen.ts | 7 +++
airflow/ui/src/components/DurationChart.tsx | 6 +--
airflow/ui/src/pages/Dag/Overview/Overview.tsx | 4 +-
airflow/ui/src/pages/Dag/Tasks/TaskCard.tsx | 2 +-
airflow/ui/src/pages/Task/Overview/Overview.tsx | 6 +--
airflow/ui/src/pages/TaskInstances.tsx | 7 ++-
.../ci/pre_commit/check_ti_vs_tis_attributes.py | 1 +
.../core_api/routes/public/test_task_instances.py | 14 ++++++
18 files changed, 215 insertions(+), 16 deletions(-)
diff --git a/airflow/api_fastapi/core_api/datamodels/task_instances.py
b/airflow/api_fastapi/core_api/datamodels/task_instances.py
index 7c849a9e86a..b7fa74e16ae 100644
--- a/airflow/api_fastapi/core_api/datamodels/task_instances.py
+++ b/airflow/api_fastapi/core_api/datamodels/task_instances.py
@@ -47,6 +47,7 @@ class TaskInstanceResponse(BaseModel):
run_id: str = Field(alias="dag_run_id")
map_index: int
logical_date: datetime | None
+ run_after: datetime
start_date: datetime | None
end_date: datetime | None
duration: float | None
@@ -104,6 +105,8 @@ class TaskInstancesBatchBody(StrictBaseModel):
dag_run_ids: list[str] | None = None
task_ids: list[str] | None = None
state: list[TaskInstanceState | None] | None = None
+ run_after_gte: AwareDatetime | None = None
+ run_after_lte: AwareDatetime | None = None
logical_date_gte: AwareDatetime | None = None
logical_date_lte: AwareDatetime | None = None
start_date_gte: AwareDatetime | None = None
diff --git a/airflow/api_fastapi/core_api/openapi/v1-generated.yaml
b/airflow/api_fastapi/core_api/openapi/v1-generated.yaml
index 57cd7ddf9b3..24ef4746e81 100644
--- a/airflow/api_fastapi/core_api/openapi/v1-generated.yaml
+++ b/airflow/api_fastapi/core_api/openapi/v1-generated.yaml
@@ -4885,6 +4885,24 @@ paths:
schema:
type: string
title: Task Id
+ - name: run_after_gte
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Run After Gte
+ - name: run_after_lte
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Run After Lte
- name: logical_date_gte
in: query
required: false
@@ -5507,6 +5525,24 @@ paths:
- type: string
- type: 'null'
title: Task Id
+ - name: run_after_gte
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Run After Gte
+ - name: run_after_lte
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Run After Lte
- name: logical_date_gte
in: query
required: false
@@ -10190,6 +10226,10 @@ components:
format: date-time
- type: 'null'
title: Logical Date
+ run_after:
+ type: string
+ format: date-time
+ title: Run After
start_date:
anyOf:
- type: string
@@ -10310,6 +10350,7 @@ components:
- dag_run_id
- map_index
- logical_date
+ - run_after
- start_date
- end_date
- duration
@@ -10446,6 +10487,18 @@ components:
type: array
- type: 'null'
title: State
+ run_after_gte:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Run After Gte
+ run_after_lte:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Run After Lte
logical_date_gte:
anyOf:
- type: string
diff --git a/airflow/api_fastapi/core_api/routes/public/task_instances.py
b/airflow/api_fastapi/core_api/routes/public/task_instances.py
index 927f62028a8..4b6dc2d836a 100644
--- a/airflow/api_fastapi/core_api/routes/public/task_instances.py
+++ b/airflow/api_fastapi/core_api/routes/public/task_instances.py
@@ -114,6 +114,7 @@ def get_mapped_task_instances(
dag_run_id: str,
task_id: str,
request: Request,
+ run_after_range: Annotated[RangeFilter,
Depends(datetime_range_filter_factory("run_after", TI))],
logical_date_range: Annotated[RangeFilter,
Depends(datetime_range_filter_factory("logical_date", TI))],
start_date_range: Annotated[RangeFilter,
Depends(datetime_range_filter_factory("start_date", TI))],
end_date_range: Annotated[RangeFilter,
Depends(datetime_range_filter_factory("end_date", TI))],
@@ -139,12 +140,14 @@ def get_mapped_task_instances(
"map_index",
"try_number",
"logical_date",
+ "run_after",
"data_interval_start",
"data_interval_end",
"rendered_map_index",
],
TI,
to_replace={
+ "run_after": DagRun.run_after,
"logical_date": DagRun.logical_date,
"data_interval_start": DagRun.data_interval_start,
"data_interval_end": DagRun.data_interval_end,
@@ -180,6 +183,7 @@ def get_mapped_task_instances(
task_instance_select, total_entries = paginated_select(
statement=query,
filters=[
+ run_after_range,
logical_date_range,
start_date_range,
end_date_range,
@@ -360,7 +364,8 @@ def get_task_instances(
dag_run_id: str,
request: Request,
task_id: Annotated[FilterParam[str | None],
Depends(filter_param_factory(TI.task_id, str | None))],
- logical_date: Annotated[RangeFilter,
Depends(datetime_range_filter_factory("logical_date", TI))],
+ run_after_range: Annotated[RangeFilter,
Depends(datetime_range_filter_factory("run_after", TI))],
+ logical_date_range: Annotated[RangeFilter,
Depends(datetime_range_filter_factory("logical_date", TI))],
start_date_range: Annotated[RangeFilter,
Depends(datetime_range_filter_factory("start_date", TI))],
end_date_range: Annotated[RangeFilter,
Depends(datetime_range_filter_factory("end_date", TI))],
update_at_range: Annotated[RangeFilter,
Depends(datetime_range_filter_factory("updated_at", TI))],
@@ -386,6 +391,7 @@ def get_task_instances(
"map_index",
"try_number",
"logical_date",
+ "run_after",
"data_interval_start",
"data_interval_end",
"rendered_map_index",
@@ -393,6 +399,7 @@ def get_task_instances(
TI,
to_replace={
"logical_date": DagRun.logical_date,
+ "run_after": DagRun.run_after,
"data_interval_start": DagRun.data_interval_start,
"data_interval_end": DagRun.data_interval_end,
},
@@ -427,7 +434,8 @@ def get_task_instances(
task_instance_select, total_entries = paginated_select(
statement=query,
filters=[
- logical_date,
+ run_after_range,
+ logical_date_range,
start_date_range,
end_date_range,
update_at_range,
@@ -467,6 +475,10 @@ def get_task_instances_batch(
dag_ids = FilterParam(TI.dag_id, body.dag_ids, FilterOptionEnum.IN)
dag_run_ids = FilterParam(TI.run_id, body.dag_run_ids, FilterOptionEnum.IN)
task_ids = FilterParam(TI.task_id, body.task_ids, FilterOptionEnum.IN)
+ run_after = RangeFilter(
+ Range(lower_bound=body.run_after_gte, upper_bound=body.run_after_lte),
+ attribute=TI.run_after,
+ )
logical_date = RangeFilter(
Range(lower_bound=body.logical_date_gte,
upper_bound=body.logical_date_lte),
attribute=TI.logical_date,
@@ -503,6 +515,7 @@ def get_task_instances_batch(
dag_ids,
dag_run_ids,
task_ids,
+ run_after,
logical_date,
start_date,
end_date,
diff --git a/airflow/models/taskinstance.py b/airflow/models/taskinstance.py
index d5eaefaf2d7..f47fae789f8 100644
--- a/airflow/models/taskinstance.py
+++ b/airflow/models/taskinstance.py
@@ -1734,6 +1734,7 @@ class TaskInstance(Base, LoggingMixin):
triggerer_job = association_proxy("trigger", "triggerer_job")
dag_run = relationship("DagRun", back_populates="task_instances",
lazy="joined", innerjoin=True)
rendered_task_instance_fields = relationship("RenderedTaskInstanceFields",
lazy="noload", uselist=False)
+ run_after = association_proxy("dag_run", "run_after")
logical_date = association_proxy("dag_run", "logical_date")
task_instance_note = relationship(
"TaskInstanceNote",
diff --git a/airflow/ui/openapi-gen/queries/common.ts
b/airflow/ui/openapi-gen/queries/common.ts
index 9beff4de51e..7902dfe4628 100644
--- a/airflow/ui/openapi-gen/queries/common.ts
+++ b/airflow/ui/openapi-gen/queries/common.ts
@@ -990,6 +990,8 @@ export const
UseTaskInstanceServiceGetMappedTaskInstancesKeyFn = (
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1012,6 +1014,8 @@ export const
UseTaskInstanceServiceGetMappedTaskInstancesKeyFn = (
orderBy?: string;
pool?: string[];
queue?: string[];
+ runAfterGte?: string;
+ runAfterLte?: string;
startDateGte?: string;
startDateLte?: string;
state?: string[];
@@ -1039,6 +1043,8 @@ export const
UseTaskInstanceServiceGetMappedTaskInstancesKeyFn = (
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1201,6 +1207,8 @@ export const UseTaskInstanceServiceGetTaskInstancesKeyFn
= (
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1224,6 +1232,8 @@ export const UseTaskInstanceServiceGetTaskInstancesKeyFn
= (
orderBy?: string;
pool?: string[];
queue?: string[];
+ runAfterGte?: string;
+ runAfterLte?: string;
startDateGte?: string;
startDateLte?: string;
state?: string[];
@@ -1252,6 +1262,8 @@ export const UseTaskInstanceServiceGetTaskInstancesKeyFn
= (
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
diff --git a/airflow/ui/openapi-gen/queries/prefetch.ts
b/airflow/ui/openapi-gen/queries/prefetch.ts
index ee687ae7be6..9e4d361eacf 100644
--- a/airflow/ui/openapi-gen/queries/prefetch.ts
+++ b/airflow/ui/openapi-gen/queries/prefetch.ts
@@ -1336,6 +1336,8 @@ export const
prefetchUseTaskInstanceServiceGetTaskInstance = (
* @param data.dagId
* @param data.dagRunId
* @param data.taskId
+ * @param data.runAfterGte
+ * @param data.runAfterLte
* @param data.logicalDateGte
* @param data.logicalDateLte
* @param data.startDateGte
@@ -1374,6 +1376,8 @@ export const
prefetchUseTaskInstanceServiceGetMappedTaskInstances = (
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1396,6 +1400,8 @@ export const
prefetchUseTaskInstanceServiceGetMappedTaskInstances = (
orderBy?: string;
pool?: string[];
queue?: string[];
+ runAfterGte?: string;
+ runAfterLte?: string;
startDateGte?: string;
startDateLte?: string;
state?: string[];
@@ -1421,6 +1427,8 @@ export const
prefetchUseTaskInstanceServiceGetMappedTaskInstances = (
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1445,6 +1453,8 @@ export const
prefetchUseTaskInstanceServiceGetMappedTaskInstances = (
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1623,6 +1633,8 @@ export const
prefetchUseTaskInstanceServiceGetMappedTaskInstance = (
* @param data.dagId
* @param data.dagRunId
* @param data.taskId
+ * @param data.runAfterGte
+ * @param data.runAfterLte
* @param data.logicalDateGte
* @param data.logicalDateLte
* @param data.startDateGte
@@ -1662,6 +1674,8 @@ export const
prefetchUseTaskInstanceServiceGetTaskInstances = (
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1685,6 +1699,8 @@ export const
prefetchUseTaskInstanceServiceGetTaskInstances = (
orderBy?: string;
pool?: string[];
queue?: string[];
+ runAfterGte?: string;
+ runAfterLte?: string;
startDateGte?: string;
startDateLte?: string;
state?: string[];
@@ -1711,6 +1727,8 @@ export const
prefetchUseTaskInstanceServiceGetTaskInstances = (
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1736,6 +1754,8 @@ export const
prefetchUseTaskInstanceServiceGetTaskInstances = (
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
diff --git a/airflow/ui/openapi-gen/queries/queries.ts
b/airflow/ui/openapi-gen/queries/queries.ts
index acacb68dc07..a3d17d4c6a6 100644
--- a/airflow/ui/openapi-gen/queries/queries.ts
+++ b/airflow/ui/openapi-gen/queries/queries.ts
@@ -1603,6 +1603,8 @@ export const useTaskInstanceServiceGetTaskInstance = <
* @param data.dagId
* @param data.dagRunId
* @param data.taskId
+ * @param data.runAfterGte
+ * @param data.runAfterLte
* @param data.logicalDateGte
* @param data.logicalDateLte
* @param data.startDateGte
@@ -1644,6 +1646,8 @@ export const useTaskInstanceServiceGetMappedTaskInstances
= <
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1666,6 +1670,8 @@ export const useTaskInstanceServiceGetMappedTaskInstances
= <
orderBy?: string;
pool?: string[];
queue?: string[];
+ runAfterGte?: string;
+ runAfterLte?: string;
startDateGte?: string;
startDateLte?: string;
state?: string[];
@@ -1694,6 +1700,8 @@ export const useTaskInstanceServiceGetMappedTaskInstances
= <
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1720,6 +1728,8 @@ export const useTaskInstanceServiceGetMappedTaskInstances
= <
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1932,6 +1942,8 @@ export const useTaskInstanceServiceGetMappedTaskInstance
= <
* @param data.dagId
* @param data.dagRunId
* @param data.taskId
+ * @param data.runAfterGte
+ * @param data.runAfterLte
* @param data.logicalDateGte
* @param data.logicalDateLte
* @param data.startDateGte
@@ -1974,6 +1986,8 @@ export const useTaskInstanceServiceGetTaskInstances = <
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1997,6 +2011,8 @@ export const useTaskInstanceServiceGetTaskInstances = <
orderBy?: string;
pool?: string[];
queue?: string[];
+ runAfterGte?: string;
+ runAfterLte?: string;
startDateGte?: string;
startDateLte?: string;
state?: string[];
@@ -2026,6 +2042,8 @@ export const useTaskInstanceServiceGetTaskInstances = <
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -2053,6 +2071,8 @@ export const useTaskInstanceServiceGetTaskInstances = <
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
diff --git a/airflow/ui/openapi-gen/queries/suspense.ts
b/airflow/ui/openapi-gen/queries/suspense.ts
index 1c156671d5e..4abf14c5479 100644
--- a/airflow/ui/openapi-gen/queries/suspense.ts
+++ b/airflow/ui/openapi-gen/queries/suspense.ts
@@ -1580,6 +1580,8 @@ export const
useTaskInstanceServiceGetTaskInstanceSuspense = <
* @param data.dagId
* @param data.dagRunId
* @param data.taskId
+ * @param data.runAfterGte
+ * @param data.runAfterLte
* @param data.logicalDateGte
* @param data.logicalDateLte
* @param data.startDateGte
@@ -1621,6 +1623,8 @@ export const
useTaskInstanceServiceGetMappedTaskInstancesSuspense = <
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1643,6 +1647,8 @@ export const
useTaskInstanceServiceGetMappedTaskInstancesSuspense = <
orderBy?: string;
pool?: string[];
queue?: string[];
+ runAfterGte?: string;
+ runAfterLte?: string;
startDateGte?: string;
startDateLte?: string;
state?: string[];
@@ -1671,6 +1677,8 @@ export const
useTaskInstanceServiceGetMappedTaskInstancesSuspense = <
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1697,6 +1705,8 @@ export const
useTaskInstanceServiceGetMappedTaskInstancesSuspense = <
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1909,6 +1919,8 @@ export const
useTaskInstanceServiceGetMappedTaskInstanceSuspense = <
* @param data.dagId
* @param data.dagRunId
* @param data.taskId
+ * @param data.runAfterGte
+ * @param data.runAfterLte
* @param data.logicalDateGte
* @param data.logicalDateLte
* @param data.startDateGte
@@ -1951,6 +1963,8 @@ export const
useTaskInstanceServiceGetTaskInstancesSuspense = <
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -1974,6 +1988,8 @@ export const
useTaskInstanceServiceGetTaskInstancesSuspense = <
orderBy?: string;
pool?: string[];
queue?: string[];
+ runAfterGte?: string;
+ runAfterLte?: string;
startDateGte?: string;
startDateLte?: string;
state?: string[];
@@ -2003,6 +2019,8 @@ export const
useTaskInstanceServiceGetTaskInstancesSuspense = <
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
@@ -2030,6 +2048,8 @@ export const
useTaskInstanceServiceGetTaskInstancesSuspense = <
orderBy,
pool,
queue,
+ runAfterGte,
+ runAfterLte,
startDateGte,
startDateLte,
state,
diff --git a/airflow/ui/openapi-gen/requests/schemas.gen.ts
b/airflow/ui/openapi-gen/requests/schemas.gen.ts
index 4a9147a5d14..7272117d51f 100644
--- a/airflow/ui/openapi-gen/requests/schemas.gen.ts
+++ b/airflow/ui/openapi-gen/requests/schemas.gen.ts
@@ -4903,6 +4903,11 @@ export const $TaskInstanceResponse = {
],
title: "Logical Date",
},
+ run_after: {
+ type: "string",
+ format: "date-time",
+ title: "Run After",
+ },
start_date: {
anyOf: [
{
@@ -5139,6 +5144,7 @@ export const $TaskInstanceResponse = {
"dag_run_id",
"map_index",
"logical_date",
+ "run_after",
"start_date",
"end_date",
"duration",
@@ -5330,6 +5336,30 @@ export const $TaskInstancesBatchBody = {
],
title: "State",
},
+ run_after_gte: {
+ anyOf: [
+ {
+ type: "string",
+ format: "date-time",
+ },
+ {
+ type: "null",
+ },
+ ],
+ title: "Run After Gte",
+ },
+ run_after_lte: {
+ anyOf: [
+ {
+ type: "string",
+ format: "date-time",
+ },
+ {
+ type: "null",
+ },
+ ],
+ title: "Run After Lte",
+ },
logical_date_gte: {
anyOf: [
{
diff --git a/airflow/ui/openapi-gen/requests/services.gen.ts
b/airflow/ui/openapi-gen/requests/services.gen.ts
index eb1cc49672e..ced6de6dc63 100644
--- a/airflow/ui/openapi-gen/requests/services.gen.ts
+++ b/airflow/ui/openapi-gen/requests/services.gen.ts
@@ -2082,6 +2082,8 @@ export class TaskInstanceService {
* @param data.dagId
* @param data.dagRunId
* @param data.taskId
+ * @param data.runAfterGte
+ * @param data.runAfterLte
* @param data.logicalDateGte
* @param data.logicalDateLte
* @param data.startDateGte
@@ -2115,6 +2117,8 @@ export class TaskInstanceService {
task_id: data.taskId,
},
query: {
+ run_after_gte: data.runAfterGte,
+ run_after_lte: data.runAfterLte,
logical_date_gte: data.logicalDateGte,
logical_date_lte: data.logicalDateLte,
start_date_gte: data.startDateGte,
@@ -2357,6 +2361,8 @@ export class TaskInstanceService {
* @param data.dagId
* @param data.dagRunId
* @param data.taskId
+ * @param data.runAfterGte
+ * @param data.runAfterLte
* @param data.logicalDateGte
* @param data.logicalDateLte
* @param data.startDateGte
@@ -2389,6 +2395,8 @@ export class TaskInstanceService {
},
query: {
task_id: data.taskId,
+ run_after_gte: data.runAfterGte,
+ run_after_lte: data.runAfterLte,
logical_date_gte: data.logicalDateGte,
logical_date_lte: data.logicalDateLte,
start_date_gte: data.startDateGte,
diff --git a/airflow/ui/openapi-gen/requests/types.gen.ts
b/airflow/ui/openapi-gen/requests/types.gen.ts
index 32858ee802e..fc673756c77 100644
--- a/airflow/ui/openapi-gen/requests/types.gen.ts
+++ b/airflow/ui/openapi-gen/requests/types.gen.ts
@@ -1266,6 +1266,7 @@ export type TaskInstanceResponse = {
dag_run_id: string;
map_index: number;
logical_date: string | null;
+ run_after: string;
start_date: string | null;
end_date: string | null;
duration: number | null;
@@ -1341,6 +1342,8 @@ export type TaskInstancesBatchBody = {
dag_run_ids?: Array<string> | null;
task_ids?: Array<string> | null;
state?: Array<TaskInstanceState | null> | null;
+ run_after_gte?: string | null;
+ run_after_lte?: string | null;
logical_date_gte?: string | null;
logical_date_lte?: string | null;
start_date_gte?: string | null;
@@ -2092,6 +2095,8 @@ export type GetMappedTaskInstancesData = {
orderBy?: string;
pool?: Array<string>;
queue?: Array<string>;
+ runAfterGte?: string | null;
+ runAfterLte?: string | null;
startDateGte?: string | null;
startDateLte?: string | null;
state?: Array<string>;
@@ -2174,6 +2179,8 @@ export type GetTaskInstancesData = {
orderBy?: string;
pool?: Array<string>;
queue?: Array<string>;
+ runAfterGte?: string | null;
+ runAfterLte?: string | null;
startDateGte?: string | null;
startDateLte?: string | null;
state?: Array<string>;
diff --git a/airflow/ui/src/components/DurationChart.tsx
b/airflow/ui/src/components/DurationChart.tsx
index f07247a3d39..6eefcd48005 100644
--- a/airflow/ui/src/components/DurationChart.tsx
+++ b/airflow/ui/src/components/DurationChart.tsx
@@ -136,9 +136,7 @@ export const DurationChart = ({
label: "Run duration",
},
],
- labels: entries.map((entry: RunResponse) =>
- dayjs(entry.logical_date).format("YYYY-MM-DD, hh:mm:ss"),
- ),
+ labels: entries.map((entry: RunResponse) =>
dayjs(entry.run_after).format("YYYY-MM-DD, hh:mm:ss")),
}}
datasetIdKey="id"
options={{
@@ -157,7 +155,7 @@ export const DurationChart = ({
ticks: {
maxTicksLimit: 3,
},
- title: { align: "end", display: true, text: "Logical Date" },
+ title: { align: "end", display: true, text: "Run After" },
},
y: {
diff --git a/airflow/ui/src/pages/Dag/Overview/Overview.tsx
b/airflow/ui/src/pages/Dag/Overview/Overview.tsx
index 3e6e213196b..8cdfae619bd 100644
--- a/airflow/ui/src/pages/Dag/Overview/Overview.tsx
+++ b/airflow/ui/src/pages/Dag/Overview/Overview.tsx
@@ -38,8 +38,8 @@ export const Overview = () => {
const { data: failedTasks, isLoading } =
useTaskInstanceServiceGetTaskInstances({
dagId: dagId ?? "",
dagRunId: "~",
- logicalDateGte: startDate,
- logicalDateLte: endDate,
+ runAfterGte: startDate,
+ runAfterLte: endDate,
state: ["failed"],
});
diff --git a/airflow/ui/src/pages/Dag/Tasks/TaskCard.tsx
b/airflow/ui/src/pages/Dag/Tasks/TaskCard.tsx
index e49f563eef5..1efb1513193 100644
--- a/airflow/ui/src/pages/Dag/Tasks/TaskCard.tsx
+++ b/airflow/ui/src/pages/Dag/Tasks/TaskCard.tsx
@@ -42,7 +42,7 @@ export const TaskCard = ({ dagId, task }: Props) => {
dagId,
dagRunId: "~",
limit: 14,
- orderBy: "-logical_date",
+ orderBy: "-run_after",
taskId: task.task_id ?? "",
},
undefined,
diff --git a/airflow/ui/src/pages/Task/Overview/Overview.tsx
b/airflow/ui/src/pages/Task/Overview/Overview.tsx
index 09f86f569bc..4e4f36d8816 100644
--- a/airflow/ui/src/pages/Task/Overview/Overview.tsx
+++ b/airflow/ui/src/pages/Task/Overview/Overview.tsx
@@ -40,8 +40,8 @@ export const Overview = () => {
dagId,
dagRunId: "~",
limit: 14,
- logicalDateGte: startDate,
- logicalDateLte: endDate,
+ runAfterGte: startDate,
+ runAfterLte: endDate,
state: ["failed"],
taskId,
});
@@ -50,7 +50,7 @@ export const Overview = () => {
dagId,
dagRunId: "~",
limit: 14,
- orderBy: "-logical_date",
+ orderBy: "-run_after",
taskId,
});
diff --git a/airflow/ui/src/pages/TaskInstances.tsx
b/airflow/ui/src/pages/TaskInstances.tsx
index 2e67334f730..76a43dd4e2d 100644
--- a/airflow/ui/src/pages/TaskInstances.tsx
+++ b/airflow/ui/src/pages/TaskInstances.tsx
@@ -62,16 +62,15 @@ const taskInstanceColumns = (
? []
: [
{
- accessorKey: "run_id",
+ accessorKey: "run_after",
cell: ({ row: { original } }: TaskInstanceRow) => (
<Link asChild color="fg.info" fontWeight="bold">
<RouterLink
to={`/dags/${original.dag_id}/runs/${original.dag_run_id}`}>
- {original.dag_run_id}
+ <Time datetime={original.run_after} />
</RouterLink>
</Link>
),
- enableSorting: false,
- header: "Run ID",
+ header: "Dag Run",
},
]),
...(Boolean(taskId)
diff --git a/scripts/ci/pre_commit/check_ti_vs_tis_attributes.py
b/scripts/ci/pre_commit/check_ti_vs_tis_attributes.py
index c8cb358960f..b7d42b7322e 100755
--- a/scripts/ci/pre_commit/check_ti_vs_tis_attributes.py
+++ b/scripts/ci/pre_commit/check_ti_vs_tis_attributes.py
@@ -43,6 +43,7 @@ def compare_attributes(path1, path2):
get_class_attributes(path2, "TaskInstanceHistory")
)
diff = diff - {
+ "run_after",
"_logger_name",
"_task_display_property_value",
"task_instance_note",
diff --git a/tests/api_fastapi/core_api/routes/public/test_task_instances.py
b/tests/api_fastapi/core_api/routes/public/test_task_instances.py
index cae77d3dd24..a28565d451d 100644
--- a/tests/api_fastapi/core_api/routes/public/test_task_instances.py
+++ b/tests/api_fastapi/core_api/routes/public/test_task_instances.py
@@ -201,6 +201,7 @@ class TestGetTaskInstance(TestTaskInstanceEndpoint):
"dag_run_id": "TEST_DAG_RUN_ID",
"rendered_fields": {},
"rendered_map_index": None,
+ "run_after": "2020-01-01T00:00:00Z",
"trigger": None,
"triggerer_job": None,
}
@@ -249,6 +250,7 @@ class TestGetTaskInstance(TestTaskInstanceEndpoint):
"note": None,
"rendered_map_index": None,
"rendered_fields": {},
+ "run_after": mock.ANY,
"trigger": None,
"triggerer_job": None,
"dag_version": {
@@ -316,6 +318,7 @@ class TestGetTaskInstance(TestTaskInstanceEndpoint):
"try_number": 0,
"unixname": getuser(),
"dag_run_id": "TEST_DAG_RUN_ID",
+ "run_after": "2020-01-01T00:00:00Z",
"rendered_fields": {},
"rendered_map_index": None,
"trigger": {
@@ -367,6 +370,7 @@ class TestGetTaskInstance(TestTaskInstanceEndpoint):
"dag_run_id": "TEST_DAG_RUN_ID",
"rendered_fields": {},
"rendered_map_index": None,
+ "run_after": "2020-01-01T00:00:00Z",
"trigger": None,
"triggerer_job": None,
}
@@ -412,6 +416,7 @@ class TestGetTaskInstance(TestTaskInstanceEndpoint):
"dag_run_id": "TEST_DAG_RUN_ID",
"rendered_fields": {"op_args": "()", "op_kwargs": {},
"templates_dict": None},
"rendered_map_index": None,
+ "run_after": "2020-01-01T00:00:00Z",
"trigger": None,
"triggerer_job": None,
}
@@ -514,6 +519,7 @@ class TestGetMappedTaskInstance(TestTaskInstanceEndpoint):
"dag_run_id": "TEST_DAG_RUN_ID",
"rendered_fields": {"op_args": "()", "op_kwargs": {},
"templates_dict": None},
"rendered_map_index": None,
+ "run_after": "2020-01-01T00:00:00Z",
"trigger": None,
"triggerer_job": None,
}
@@ -2304,6 +2310,7 @@ class
TestPostClearTaskInstances(TestTaskInstanceEndpoint):
"scheduled_when": None,
"rendered_fields": {},
"rendered_map_index": None,
+ "run_after": "2020-01-01T00:00:00Z",
"start_date": "2020-01-02T00:00:00Z",
"state": "restarting",
"task_display_name": "print_the_context",
@@ -2943,6 +2950,7 @@ class TestPatchTaskInstance(TestTaskInstanceEndpoint):
"unixname": getuser(),
"rendered_fields": {},
"rendered_map_index": None,
+ "run_after": "2020-01-01T00:00:00Z",
"trigger": None,
"triggerer_job": None,
}
@@ -3139,6 +3147,7 @@ class TestPatchTaskInstance(TestTaskInstanceEndpoint):
"unixname": getuser(),
"rendered_fields": {},
"rendered_map_index": None,
+ "run_after": "2020-01-01T00:00:00Z",
"trigger": None,
"triggerer_job": None,
},
@@ -3240,6 +3249,7 @@ class TestPatchTaskInstance(TestTaskInstanceEndpoint):
"dag_run_id": self.RUN_ID,
"rendered_fields": {},
"rendered_map_index": None,
+ "run_after": "2020-01-01T00:00:00Z",
"trigger": None,
"triggerer_job": None,
}
@@ -3282,6 +3292,7 @@ class TestPatchTaskInstance(TestTaskInstanceEndpoint):
"dag_run_id": self.RUN_ID,
"rendered_fields": {},
"rendered_map_index": None,
+ "run_after": "2020-01-01T00:00:00Z",
"trigger": None,
"triggerer_job": None,
}
@@ -3338,6 +3349,7 @@ class TestPatchTaskInstance(TestTaskInstanceEndpoint):
"dag_run_id": self.RUN_ID,
"rendered_fields": {"op_args": "()", "op_kwargs": {},
"templates_dict": None},
"rendered_map_index": None,
+ "run_after": "2020-01-01T00:00:00Z",
"trigger": None,
"triggerer_job": None,
}
@@ -3437,6 +3449,7 @@ class
TestPatchTaskInstanceDryRun(TestTaskInstanceEndpoint):
"unixname": getuser(),
"rendered_fields": {},
"rendered_map_index": None,
+ "run_after": "2020-01-01T00:00:00Z",
"trigger": None,
"triggerer_job": None,
}
@@ -3660,6 +3673,7 @@ class
TestPatchTaskInstanceDryRun(TestTaskInstanceEndpoint):
"unixname": getuser(),
"rendered_fields": {},
"rendered_map_index": None,
+ "run_after": "2020-01-01T00:00:00Z",
"trigger": None,
"triggerer_job": None,
}