This is an automated email from the ASF dual-hosted git repository.

bbovenzi 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 7ba6d9f7163 feat(task_instances): add try_number as filter (#54695)
7ba6d9f7163 is described below

commit 7ba6d9f7163f7d94de47a282a0e61fd3fef9c683
Author: Wei Lee <[email protected]>
AuthorDate: Sat Aug 23 00:00:26 2025 +0800

    feat(task_instances): add try_number as filter (#54695)
---
 .../src/airflow/api_fastapi/common/parameters.py         |  9 +++++++++
 .../core_api/openapi/v2-rest-api-generated.yaml          | 16 ++++++++++++++++
 .../api_fastapi/core_api/routes/public/task_instances.py | 11 ++++++++++-
 .../src/airflow/ui/openapi-gen/queries/common.ts         | 10 ++++++----
 .../airflow/ui/openapi-gen/queries/ensureQueryData.ts    | 12 ++++++++----
 .../src/airflow/ui/openapi-gen/queries/prefetch.ts       | 12 ++++++++----
 .../src/airflow/ui/openapi-gen/queries/queries.ts        | 12 ++++++++----
 .../src/airflow/ui/openapi-gen/queries/suspense.ts       | 12 ++++++++----
 .../src/airflow/ui/openapi-gen/requests/services.gen.ts  |  4 ++++
 .../src/airflow/ui/openapi-gen/requests/types.gen.ts     |  2 ++
 .../core_api/routes/public/test_task_instances.py        | 15 +++++++++++++++
 11 files changed, 94 insertions(+), 21 deletions(-)

diff --git a/airflow-core/src/airflow/api_fastapi/common/parameters.py 
b/airflow-core/src/airflow/api_fastapi/common/parameters.py
index 4e98d028aa8..4ee000a2173 100644
--- a/airflow-core/src/airflow/api_fastapi/common/parameters.py
+++ b/airflow-core/src/airflow/api_fastapi/common/parameters.py
@@ -733,6 +733,15 @@ QueryTIDagVersionFilter = Annotated[
         )
     ),
 ]
+QueryTITryNumberFilter = Annotated[
+    FilterParam[list[int]],
+    Depends(
+        filter_param_factory(
+            TaskInstance.try_number, list[int], FilterOptionEnum.ANY_EQUAL, 
default_factory=list
+        )
+    ),
+]
+
 
 # XCom
 QueryXComKeyPatternSearch = Annotated[
diff --git 
a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml
 
b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml
index f8e48b93917..8797232263e 100644
--- 
a/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml
+++ 
b/airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml
@@ -5264,6 +5264,14 @@ paths:
           items:
             type: integer
           title: Version Number
+      - name: try_number
+        in: query
+        required: false
+        schema:
+          type: array
+          items:
+            type: integer
+          title: Try Number
       - name: limit
         in: query
         required: false
@@ -5942,6 +5950,14 @@ paths:
           items:
             type: integer
           title: Version Number
+      - name: try_number
+        in: query
+        required: false
+        schema:
+          type: array
+          items:
+            type: integer
+          title: Try Number
       - name: limit
         in: query
         required: false
diff --git 
a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/task_instances.py 
b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/task_instances.py
index fd5155bb89b..32887038ae5 100644
--- 
a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/task_instances.py
+++ 
b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/task_instances.py
@@ -46,6 +46,8 @@ from airflow.api_fastapi.common.parameters import (
     QueryTIQueueFilter,
     QueryTIStateFilter,
     QueryTITaskDisplayNamePatternSearch,
+    QueryTITryNumberFilter,
+    # QueryTTTaskFilter,
     Range,
     RangeFilter,
     SortParam,
@@ -96,7 +98,10 @@ task_instances_prefix = "/dagRuns/{dag_run_id}/taskInstances"
     dependencies=[Depends(requires_access_dag(method="GET", 
access_entity=DagAccessEntity.TASK_INSTANCE))],
 )
 def get_task_instance(
-    dag_id: str, dag_run_id: str, task_id: str, session: SessionDep
+    dag_id: str,
+    dag_run_id: str,
+    task_id: str,
+    session: SessionDep,
 ) -> TaskInstanceResponse:
     """Get task instance."""
     query = (
@@ -142,6 +147,7 @@ def get_mapped_task_instances(
     queue: QueryTIQueueFilter,
     executor: QueryTIExecutorFilter,
     version_number: QueryTIDagVersionFilter,
+    try_number: QueryTITryNumberFilter,
     limit: QueryLimit,
     offset: QueryOffset,
     order_by: Annotated[
@@ -210,6 +216,7 @@ def get_mapped_task_instances(
             queue,
             executor,
             version_number,
+            try_number,
         ],
         order_by=order_by,
         offset=offset,
@@ -400,6 +407,7 @@ def get_task_instances(
     queue: QueryTIQueueFilter,
     executor: QueryTIExecutorFilter,
     version_number: QueryTIDagVersionFilter,
+    try_number: QueryTITryNumberFilter,
     limit: QueryLimit,
     offset: QueryOffset,
     order_by: Annotated[
@@ -476,6 +484,7 @@ def get_task_instances(
             task_display_name_pattern,
             version_number,
             readable_ti_filter,
+            try_number,
         ],
         order_by=order_by,
         offset=offset,
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts 
b/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts
index c23f1dc8c83..3e16c25e85c 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/common.ts
@@ -353,7 +353,7 @@ export const UseTaskInstanceServiceGetTaskInstanceKeyFn = 
({ dagId, dagRunId, ta
 export type TaskInstanceServiceGetMappedTaskInstancesDefaultResponse = 
Awaited<ReturnType<typeof TaskInstanceService.getMappedTaskInstances>>;
 export type TaskInstanceServiceGetMappedTaskInstancesQueryResult<TData = 
TaskInstanceServiceGetMappedTaskInstancesDefaultResponse, TError = unknown> = 
UseQueryResult<TData, TError>;
 export const useTaskInstanceServiceGetMappedTaskInstancesKey = 
"TaskInstanceServiceGetMappedTaskInstances";
-export const UseTaskInstanceServiceGetMappedTaskInstancesKeyFn = ({ dagId, 
dagRunId, durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, updatedAtGte, 
updatedAtLte, versionNumber }: {
+export const UseTaskInstanceServiceGetMappedTaskInstancesKeyFn = ({ dagId, 
dagRunId, durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, tryNumber, 
updatedAtGte, updatedAtLte, versionNumber }: {
   dagId: string;
   dagRunId: string;
   durationGte?: number;
@@ -374,10 +374,11 @@ export const 
UseTaskInstanceServiceGetMappedTaskInstancesKeyFn = ({ dagId, dagRu
   startDateLte?: string;
   state?: string[];
   taskId: string;
+  tryNumber?: number[];
   updatedAtGte?: string;
   updatedAtLte?: string;
   versionNumber?: number[];
-}, queryKey?: Array<unknown>) => 
[useTaskInstanceServiceGetMappedTaskInstancesKey, ...(queryKey ?? [{ dagId, 
dagRunId, durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, updatedAtGte, 
updatedAtLte, versionNumber }])];
+}, queryKey?: Array<unknown>) => 
[useTaskInstanceServiceGetMappedTaskInstancesKey, ...(queryKey ?? [{ dagId, 
dagRunId, durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, tryNumber, 
updatedAtGte, updatedAtLte, versionNumber }])];
 export type 
TaskInstanceServiceGetTaskInstanceDependenciesByMapIndexDefaultResponse = 
Awaited<ReturnType<typeof 
TaskInstanceService.getTaskInstanceDependenciesByMapIndex>>;
 export type 
TaskInstanceServiceGetTaskInstanceDependenciesByMapIndexQueryResult<TData = 
TaskInstanceServiceGetTaskInstanceDependenciesByMapIndexDefaultResponse, TError 
= unknown> = UseQueryResult<TData, TError>;
 export const useTaskInstanceServiceGetTaskInstanceDependenciesByMapIndexKey = 
"TaskInstanceServiceGetTaskInstanceDependenciesByMapIndex";
@@ -426,7 +427,7 @@ export const 
UseTaskInstanceServiceGetMappedTaskInstanceKeyFn = ({ dagId, dagRun
 export type TaskInstanceServiceGetTaskInstancesDefaultResponse = 
Awaited<ReturnType<typeof TaskInstanceService.getTaskInstances>>;
 export type TaskInstanceServiceGetTaskInstancesQueryResult<TData = 
TaskInstanceServiceGetTaskInstancesDefaultResponse, TError = unknown> = 
UseQueryResult<TData, TError>;
 export const useTaskInstanceServiceGetTaskInstancesKey = 
"TaskInstanceServiceGetTaskInstances";
-export const UseTaskInstanceServiceGetTaskInstancesKeyFn = ({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, 
updatedAtGte, updatedAtLte, versionNumber }: {
+export const UseTaskInstanceServiceGetTaskInstancesKeyFn = ({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, 
tryNumber, updatedAtGte, updatedAtLte, versionNumber }: {
   dagId: string;
   dagRunId: string;
   durationGte?: number;
@@ -448,10 +449,11 @@ export const UseTaskInstanceServiceGetTaskInstancesKeyFn 
= ({ dagId, dagRunId, d
   state?: string[];
   taskDisplayNamePattern?: string;
   taskId?: string;
+  tryNumber?: number[];
   updatedAtGte?: string;
   updatedAtLte?: string;
   versionNumber?: number[];
-}, queryKey?: Array<unknown>) => [useTaskInstanceServiceGetTaskInstancesKey, 
...(queryKey ?? [{ dagId, dagRunId, durationGte, durationLte, endDateGte, 
endDateLte, executor, limit, logicalDateGte, logicalDateLte, offset, orderBy, 
pool, queue, runAfterGte, runAfterLte, startDateGte, startDateLte, state, 
taskDisplayNamePattern, taskId, updatedAtGte, updatedAtLte, versionNumber }])];
+}, queryKey?: Array<unknown>) => [useTaskInstanceServiceGetTaskInstancesKey, 
...(queryKey ?? [{ dagId, dagRunId, durationGte, durationLte, endDateGte, 
endDateLte, executor, limit, logicalDateGte, logicalDateLte, offset, orderBy, 
pool, queue, runAfterGte, runAfterLte, startDateGte, startDateLte, state, 
taskDisplayNamePattern, taskId, tryNumber, updatedAtGte, updatedAtLte, 
versionNumber }])];
 export type TaskInstanceServiceGetTaskInstanceTryDetailsDefaultResponse = 
Awaited<ReturnType<typeof TaskInstanceService.getTaskInstanceTryDetails>>;
 export type TaskInstanceServiceGetTaskInstanceTryDetailsQueryResult<TData = 
TaskInstanceServiceGetTaskInstanceTryDetailsDefaultResponse, TError = unknown> 
= UseQueryResult<TData, TError>;
 export const useTaskInstanceServiceGetTaskInstanceTryDetailsKey = 
"TaskInstanceServiceGetTaskInstanceTryDetails";
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts 
b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts
index 512239d6fe8..1f9f575e4d8 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts
@@ -678,13 +678,14 @@ export const 
ensureUseTaskInstanceServiceGetTaskInstanceData = (queryClient: Que
 * @param data.queue
 * @param data.executor
 * @param data.versionNumber
+* @param data.tryNumber
 * @param data.limit
 * @param data.offset
 * @param data.orderBy
 * @returns TaskInstanceCollectionResponse Successful Response
 * @throws ApiError
 */
-export const ensureUseTaskInstanceServiceGetMappedTaskInstancesData = 
(queryClient: QueryClient, { dagId, dagRunId, durationGte, durationLte, 
endDateGte, endDateLte, executor, limit, logicalDateGte, logicalDateLte, 
offset, orderBy, pool, queue, runAfterGte, runAfterLte, startDateGte, 
startDateLte, state, taskId, updatedAtGte, updatedAtLte, versionNumber }: {
+export const ensureUseTaskInstanceServiceGetMappedTaskInstancesData = 
(queryClient: QueryClient, { dagId, dagRunId, durationGte, durationLte, 
endDateGte, endDateLte, executor, limit, logicalDateGte, logicalDateLte, 
offset, orderBy, pool, queue, runAfterGte, runAfterLte, startDateGte, 
startDateLte, state, taskId, tryNumber, updatedAtGte, updatedAtLte, 
versionNumber }: {
   dagId: string;
   dagRunId: string;
   durationGte?: number;
@@ -705,10 +706,11 @@ export const 
ensureUseTaskInstanceServiceGetMappedTaskInstancesData = (queryClie
   startDateLte?: string;
   state?: string[];
   taskId: string;
+  tryNumber?: number[];
   updatedAtGte?: string;
   updatedAtLte?: string;
   versionNumber?: number[];
-}) => queryClient.ensureQueryData({ queryKey: 
Common.UseTaskInstanceServiceGetMappedTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, updatedAtGte, 
updatedAtLte, versionNumber }), queryFn: () => 
TaskInstanceService.getMappedTaskInstances({ dagId, dagRunId, durationGte, 
durationLte, endDateGte, endDateLte, [...]
+}) => queryClient.ensureQueryData({ queryKey: 
Common.UseTaskInstanceServiceGetMappedTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, tryNumber, 
updatedAtGte, updatedAtLte, versionNumber }), queryFn: () => 
TaskInstanceService.getMappedTaskInstances({ dagId, dagRunId, durationGte, 
durationLte, endDateGte,  [...]
 /**
 * Get Task Instance Dependencies
 * Get dependencies blocking task from getting scheduled.
@@ -821,13 +823,14 @@ export const 
ensureUseTaskInstanceServiceGetMappedTaskInstanceData = (queryClien
 * @param data.queue
 * @param data.executor
 * @param data.versionNumber
+* @param data.tryNumber
 * @param data.limit
 * @param data.offset
 * @param data.orderBy
 * @returns TaskInstanceCollectionResponse Successful Response
 * @throws ApiError
 */
-export const ensureUseTaskInstanceServiceGetTaskInstancesData = (queryClient: 
QueryClient, { dagId, dagRunId, durationGte, durationLte, endDateGte, 
endDateLte, executor, limit, logicalDateGte, logicalDateLte, offset, orderBy, 
pool, queue, runAfterGte, runAfterLte, startDateGte, startDateLte, state, 
taskDisplayNamePattern, taskId, updatedAtGte, updatedAtLte, versionNumber }: {
+export const ensureUseTaskInstanceServiceGetTaskInstancesData = (queryClient: 
QueryClient, { dagId, dagRunId, durationGte, durationLte, endDateGte, 
endDateLte, executor, limit, logicalDateGte, logicalDateLte, offset, orderBy, 
pool, queue, runAfterGte, runAfterLte, startDateGte, startDateLte, state, 
taskDisplayNamePattern, taskId, tryNumber, updatedAtGte, updatedAtLte, 
versionNumber }: {
   dagId: string;
   dagRunId: string;
   durationGte?: number;
@@ -849,10 +852,11 @@ export const 
ensureUseTaskInstanceServiceGetTaskInstancesData = (queryClient: Qu
   state?: string[];
   taskDisplayNamePattern?: string;
   taskId?: string;
+  tryNumber?: number[];
   updatedAtGte?: string;
   updatedAtLte?: string;
   versionNumber?: number[];
-}) => queryClient.ensureQueryData({ queryKey: 
Common.UseTaskInstanceServiceGetTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, 
updatedAtGte, updatedAtLte, versionNumber }), queryFn: () => 
TaskInstanceService.getTaskInstances({ dagId, dagRunId, durationGte, 
durationLte, endDateGte, [...]
+}) => queryClient.ensureQueryData({ queryKey: 
Common.UseTaskInstanceServiceGetTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, 
tryNumber, updatedAtGte, updatedAtLte, versionNumber }), queryFn: () => 
TaskInstanceService.getTaskInstances({ dagId, dagRunId, durationGte, 
durationLte,  [...]
 /**
 * Get Task Instance Try Details
 * Get task instance details by try number.
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts 
b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts
index e2189434a07..83b2327c84f 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts
@@ -678,13 +678,14 @@ export const 
prefetchUseTaskInstanceServiceGetTaskInstance = (queryClient: Query
 * @param data.queue
 * @param data.executor
 * @param data.versionNumber
+* @param data.tryNumber
 * @param data.limit
 * @param data.offset
 * @param data.orderBy
 * @returns TaskInstanceCollectionResponse Successful Response
 * @throws ApiError
 */
-export const prefetchUseTaskInstanceServiceGetMappedTaskInstances = 
(queryClient: QueryClient, { dagId, dagRunId, durationGte, durationLte, 
endDateGte, endDateLte, executor, limit, logicalDateGte, logicalDateLte, 
offset, orderBy, pool, queue, runAfterGte, runAfterLte, startDateGte, 
startDateLte, state, taskId, updatedAtGte, updatedAtLte, versionNumber }: {
+export const prefetchUseTaskInstanceServiceGetMappedTaskInstances = 
(queryClient: QueryClient, { dagId, dagRunId, durationGte, durationLte, 
endDateGte, endDateLte, executor, limit, logicalDateGte, logicalDateLte, 
offset, orderBy, pool, queue, runAfterGte, runAfterLte, startDateGte, 
startDateLte, state, taskId, tryNumber, updatedAtGte, updatedAtLte, 
versionNumber }: {
   dagId: string;
   dagRunId: string;
   durationGte?: number;
@@ -705,10 +706,11 @@ export const 
prefetchUseTaskInstanceServiceGetMappedTaskInstances = (queryClient
   startDateLte?: string;
   state?: string[];
   taskId: string;
+  tryNumber?: number[];
   updatedAtGte?: string;
   updatedAtLte?: string;
   versionNumber?: number[];
-}) => queryClient.prefetchQuery({ queryKey: 
Common.UseTaskInstanceServiceGetMappedTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, updatedAtGte, 
updatedAtLte, versionNumber }), queryFn: () => 
TaskInstanceService.getMappedTaskInstances({ dagId, dagRunId, durationGte, 
durationLte, endDateGte, endDateLte, e [...]
+}) => queryClient.prefetchQuery({ queryKey: 
Common.UseTaskInstanceServiceGetMappedTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, tryNumber, 
updatedAtGte, updatedAtLte, versionNumber }), queryFn: () => 
TaskInstanceService.getMappedTaskInstances({ dagId, dagRunId, durationGte, 
durationLte, endDateGte, en [...]
 /**
 * Get Task Instance Dependencies
 * Get dependencies blocking task from getting scheduled.
@@ -821,13 +823,14 @@ export const 
prefetchUseTaskInstanceServiceGetMappedTaskInstance = (queryClient:
 * @param data.queue
 * @param data.executor
 * @param data.versionNumber
+* @param data.tryNumber
 * @param data.limit
 * @param data.offset
 * @param data.orderBy
 * @returns TaskInstanceCollectionResponse Successful Response
 * @throws ApiError
 */
-export const prefetchUseTaskInstanceServiceGetTaskInstances = (queryClient: 
QueryClient, { dagId, dagRunId, durationGte, durationLte, endDateGte, 
endDateLte, executor, limit, logicalDateGte, logicalDateLte, offset, orderBy, 
pool, queue, runAfterGte, runAfterLte, startDateGte, startDateLte, state, 
taskDisplayNamePattern, taskId, updatedAtGte, updatedAtLte, versionNumber }: {
+export const prefetchUseTaskInstanceServiceGetTaskInstances = (queryClient: 
QueryClient, { dagId, dagRunId, durationGte, durationLte, endDateGte, 
endDateLte, executor, limit, logicalDateGte, logicalDateLte, offset, orderBy, 
pool, queue, runAfterGte, runAfterLte, startDateGte, startDateLte, state, 
taskDisplayNamePattern, taskId, tryNumber, updatedAtGte, updatedAtLte, 
versionNumber }: {
   dagId: string;
   dagRunId: string;
   durationGte?: number;
@@ -849,10 +852,11 @@ export const 
prefetchUseTaskInstanceServiceGetTaskInstances = (queryClient: Quer
   state?: string[];
   taskDisplayNamePattern?: string;
   taskId?: string;
+  tryNumber?: number[];
   updatedAtGte?: string;
   updatedAtLte?: string;
   versionNumber?: number[];
-}) => queryClient.prefetchQuery({ queryKey: 
Common.UseTaskInstanceServiceGetTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, 
updatedAtGte, updatedAtLte, versionNumber }), queryFn: () => 
TaskInstanceService.getTaskInstances({ dagId, dagRunId, durationGte, 
durationLte, endDateGte, e [...]
+}) => queryClient.prefetchQuery({ queryKey: 
Common.UseTaskInstanceServiceGetTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, 
tryNumber, updatedAtGte, updatedAtLte, versionNumber }), queryFn: () => 
TaskInstanceService.getTaskInstances({ dagId, dagRunId, durationGte, 
durationLte, en [...]
 /**
 * Get Task Instance Try Details
 * Get task instance details by try number.
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts 
b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts
index bb0afe4e25e..324f01c4e7e 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts
@@ -678,13 +678,14 @@ export const useTaskInstanceServiceGetTaskInstance = 
<TData = Common.TaskInstanc
 * @param data.queue
 * @param data.executor
 * @param data.versionNumber
+* @param data.tryNumber
 * @param data.limit
 * @param data.offset
 * @param data.orderBy
 * @returns TaskInstanceCollectionResponse Successful Response
 * @throws ApiError
 */
-export const useTaskInstanceServiceGetMappedTaskInstances = <TData = 
Common.TaskInstanceServiceGetMappedTaskInstancesDefaultResponse, TError = 
unknown, TQueryKey extends Array<unknown> = unknown[]>({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, updatedAtGte, 
updatedAtLte, versionNumber }: {
+export const useTaskInstanceServiceGetMappedTaskInstances = <TData = 
Common.TaskInstanceServiceGetMappedTaskInstancesDefaultResponse, TError = 
unknown, TQueryKey extends Array<unknown> = unknown[]>({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, tryNumber, 
updatedAtGte, updatedAtLte, versionNumber }: {
   dagId: string;
   dagRunId: string;
   durationGte?: number;
@@ -705,10 +706,11 @@ export const useTaskInstanceServiceGetMappedTaskInstances 
= <TData = Common.Task
   startDateLte?: string;
   state?: string[];
   taskId: string;
+  tryNumber?: number[];
   updatedAtGte?: string;
   updatedAtLte?: string;
   versionNumber?: number[];
-}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, 
"queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: 
Common.UseTaskInstanceServiceGetMappedTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, updatedAtGte, 
updatedAtLte, versionNumber }, queryKey), queryFn: () => TaskInstanc [...]
+}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, 
"queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: 
Common.UseTaskInstanceServiceGetMappedTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, tryNumber, 
updatedAtGte, updatedAtLte, versionNumber }, queryKey), queryFn: () =>  [...]
 /**
 * Get Task Instance Dependencies
 * Get dependencies blocking task from getting scheduled.
@@ -821,13 +823,14 @@ export const useTaskInstanceServiceGetMappedTaskInstance 
= <TData = Common.TaskI
 * @param data.queue
 * @param data.executor
 * @param data.versionNumber
+* @param data.tryNumber
 * @param data.limit
 * @param data.offset
 * @param data.orderBy
 * @returns TaskInstanceCollectionResponse Successful Response
 * @throws ApiError
 */
-export const useTaskInstanceServiceGetTaskInstances = <TData = 
Common.TaskInstanceServiceGetTaskInstancesDefaultResponse, TError = unknown, 
TQueryKey extends Array<unknown> = unknown[]>({ dagId, dagRunId, durationGte, 
durationLte, endDateGte, endDateLte, executor, limit, logicalDateGte, 
logicalDateLte, offset, orderBy, pool, queue, runAfterGte, runAfterLte, 
startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, 
updatedAtGte, updatedAtLte, versionNumber }: {
+export const useTaskInstanceServiceGetTaskInstances = <TData = 
Common.TaskInstanceServiceGetTaskInstancesDefaultResponse, TError = unknown, 
TQueryKey extends Array<unknown> = unknown[]>({ dagId, dagRunId, durationGte, 
durationLte, endDateGte, endDateLte, executor, limit, logicalDateGte, 
logicalDateLte, offset, orderBy, pool, queue, runAfterGte, runAfterLte, 
startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, tryNumber, 
updatedAtGte, updatedAtLte, versionNumber }: {
   dagId: string;
   dagRunId: string;
   durationGte?: number;
@@ -849,10 +852,11 @@ export const useTaskInstanceServiceGetTaskInstances = 
<TData = Common.TaskInstan
   state?: string[];
   taskDisplayNamePattern?: string;
   taskId?: string;
+  tryNumber?: number[];
   updatedAtGte?: string;
   updatedAtLte?: string;
   versionNumber?: number[];
-}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, 
"queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: 
Common.UseTaskInstanceServiceGetTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, 
updatedAtGte, updatedAtLte, versionNumber }, queryKey), queryFn: [...]
+}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, 
"queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: 
Common.UseTaskInstanceServiceGetTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, 
tryNumber, updatedAtGte, updatedAtLte, versionNumber }, queryKey [...]
 /**
 * Get Task Instance Try Details
 * Get task instance details by try number.
diff --git a/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts 
b/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts
index 4abb3f7b916..8613bd6e9d4 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts
@@ -678,13 +678,14 @@ export const 
useTaskInstanceServiceGetTaskInstanceSuspense = <TData = Common.Tas
 * @param data.queue
 * @param data.executor
 * @param data.versionNumber
+* @param data.tryNumber
 * @param data.limit
 * @param data.offset
 * @param data.orderBy
 * @returns TaskInstanceCollectionResponse Successful Response
 * @throws ApiError
 */
-export const useTaskInstanceServiceGetMappedTaskInstancesSuspense = <TData = 
Common.TaskInstanceServiceGetMappedTaskInstancesDefaultResponse, TError = 
unknown, TQueryKey extends Array<unknown> = unknown[]>({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, updatedAtGte, 
updatedAtLte, versionNumber }: {
+export const useTaskInstanceServiceGetMappedTaskInstancesSuspense = <TData = 
Common.TaskInstanceServiceGetMappedTaskInstancesDefaultResponse, TError = 
unknown, TQueryKey extends Array<unknown> = unknown[]>({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, tryNumber, 
updatedAtGte, updatedAtLte, versionNumber }: {
   dagId: string;
   dagRunId: string;
   durationGte?: number;
@@ -705,10 +706,11 @@ export const 
useTaskInstanceServiceGetMappedTaskInstancesSuspense = <TData = Com
   startDateLte?: string;
   state?: string[];
   taskId: string;
+  tryNumber?: number[];
   updatedAtGte?: string;
   updatedAtLte?: string;
   versionNumber?: number[];
-}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, 
"queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: 
Common.UseTaskInstanceServiceGetMappedTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, updatedAtGte, 
updatedAtLte, versionNumber }, queryKey), queryFn: () => Tas [...]
+}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, 
"queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: 
Common.UseTaskInstanceServiceGetMappedTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskId, tryNumber, 
updatedAtGte, updatedAtLte, versionNumber }, queryKey), queryFn [...]
 /**
 * Get Task Instance Dependencies
 * Get dependencies blocking task from getting scheduled.
@@ -821,13 +823,14 @@ export const 
useTaskInstanceServiceGetMappedTaskInstanceSuspense = <TData = Comm
 * @param data.queue
 * @param data.executor
 * @param data.versionNumber
+* @param data.tryNumber
 * @param data.limit
 * @param data.offset
 * @param data.orderBy
 * @returns TaskInstanceCollectionResponse Successful Response
 * @throws ApiError
 */
-export const useTaskInstanceServiceGetTaskInstancesSuspense = <TData = 
Common.TaskInstanceServiceGetTaskInstancesDefaultResponse, TError = unknown, 
TQueryKey extends Array<unknown> = unknown[]>({ dagId, dagRunId, durationGte, 
durationLte, endDateGte, endDateLte, executor, limit, logicalDateGte, 
logicalDateLte, offset, orderBy, pool, queue, runAfterGte, runAfterLte, 
startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, 
updatedAtGte, updatedAtLte, versionNumber }: {
+export const useTaskInstanceServiceGetTaskInstancesSuspense = <TData = 
Common.TaskInstanceServiceGetTaskInstancesDefaultResponse, TError = unknown, 
TQueryKey extends Array<unknown> = unknown[]>({ dagId, dagRunId, durationGte, 
durationLte, endDateGte, endDateLte, executor, limit, logicalDateGte, 
logicalDateLte, offset, orderBy, pool, queue, runAfterGte, runAfterLte, 
startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, tryNumber, 
updatedAtGte, updatedAtLte, versionNumber }: {
   dagId: string;
   dagRunId: string;
   durationGte?: number;
@@ -849,10 +852,11 @@ export const 
useTaskInstanceServiceGetTaskInstancesSuspense = <TData = Common.Ta
   state?: string[];
   taskDisplayNamePattern?: string;
   taskId?: string;
+  tryNumber?: number[];
   updatedAtGte?: string;
   updatedAtLte?: string;
   versionNumber?: number[];
-}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, 
"queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: 
Common.UseTaskInstanceServiceGetTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, 
updatedAtGte, updatedAtLte, versionNumber }, queryKey),  [...]
+}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, 
"queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: 
Common.UseTaskInstanceServiceGetTaskInstancesKeyFn({ dagId, dagRunId, 
durationGte, durationLte, endDateGte, endDateLte, executor, limit, 
logicalDateGte, logicalDateLte, offset, orderBy, pool, queue, runAfterGte, 
runAfterLte, startDateGte, startDateLte, state, taskDisplayNamePattern, taskId, 
tryNumber, updatedAtGte, updatedAtLte, versionNumber },  [...]
 /**
 * Get Task Instance Try Details
 * Get task instance details by try number.
diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts 
b/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts
index 106193c55b8..a94f7397619 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts
@@ -1981,6 +1981,7 @@ export class TaskInstanceService {
      * @param data.queue
      * @param data.executor
      * @param data.versionNumber
+     * @param data.tryNumber
      * @param data.limit
      * @param data.offset
      * @param data.orderBy
@@ -2014,6 +2015,7 @@ export class TaskInstanceService {
                 queue: data.queue,
                 executor: data.executor,
                 version_number: data.versionNumber,
+                try_number: data.tryNumber,
                 limit: data.limit,
                 offset: data.offset,
                 order_by: data.orderBy
@@ -2247,6 +2249,7 @@ export class TaskInstanceService {
      * @param data.queue
      * @param data.executor
      * @param data.versionNumber
+     * @param data.tryNumber
      * @param data.limit
      * @param data.offset
      * @param data.orderBy
@@ -2281,6 +2284,7 @@ export class TaskInstanceService {
                 queue: data.queue,
                 executor: data.executor,
                 version_number: data.versionNumber,
+                try_number: data.tryNumber,
                 limit: data.limit,
                 offset: data.offset,
                 order_by: data.orderBy
diff --git a/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts 
b/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
index 2ed7cb77985..c425e586bb9 100644
--- a/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
+++ b/airflow-core/src/airflow/ui/openapi-gen/requests/types.gen.ts
@@ -2515,6 +2515,7 @@ export type GetMappedTaskInstancesData = {
     startDateLte?: string | null;
     state?: Array<(string)>;
     taskId: string;
+    tryNumber?: Array<(number)>;
     updatedAtGte?: string | null;
     updatedAtLte?: string | null;
     versionNumber?: Array<(number)>;
@@ -2603,6 +2604,7 @@ export type GetTaskInstancesData = {
      */
     taskDisplayNamePattern?: string | null;
     taskId?: string | null;
+    tryNumber?: Array<(number)>;
     updatedAtGte?: string | null;
     updatedAtLte?: string | null;
     versionNumber?: Array<(number)>;
diff --git 
a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_task_instances.py
 
b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_task_instances.py
index 0284667273e..1100d9f25bf 100644
--- 
a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_task_instances.py
+++ 
b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_task_instances.py
@@ -1133,6 +1133,21 @@ class TestGetTaskInstances(TestTaskInstanceEndpoint):
                 # the create_task_instances method
                 id="test multiple version numbers filter",
             ),
+            pytest.param(
+                [
+                    {"try_number": 0},
+                    {"try_number": 0},
+                    {"try_number": 1},
+                    {"try_number": 1},
+                    {"try_number": 1},
+                    {"try_number": 2},
+                ],
+                True,
+                
("/dags/example_python_operator/dagRuns/TEST_DAG_RUN_ID/taskInstances"),
+                {"try_number": [0, 1]},
+                5,
+                id="test_try_number_filter",
+            ),
         ],
     )
     @pytest.mark.usefixtures("make_dag_with_multiple_versions")


Reply via email to