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 a8f2d975983 Fix grid links for tasks with retries (#57063)
a8f2d975983 is described below

commit a8f2d9759831cebfc1fd4f47d7dae737180996cf
Author: Pierre Jeambrun <[email protected]>
AuthorDate: Wed Oct 22 20:09:27 2025 +0200

    Fix grid links for tasks with retries (#57063)
    
    * Fix grid links for tasks with retries
    
    * Update following code review
---
 .../src/airflow/ui/src/layouts/Details/Grid/GridTI.tsx    | 15 +++++++++++----
 .../ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx   |  5 +----
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/GridTI.tsx 
b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/GridTI.tsx
index fe411e15283..ddf294353cb 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/GridTI.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/GridTI.tsx
@@ -20,7 +20,7 @@ import { Badge, Flex } from "@chakra-ui/react";
 import type { MouseEvent } from "react";
 import React, { useCallback } from "react";
 import { useTranslation } from "react-i18next";
-import { Link, useLocation, useParams } from "react-router-dom";
+import { Link, useLocation, useParams, useSearchParams } from 
"react-router-dom";
 
 import type { LightGridTaskInstanceSummary } from "openapi/requests/types.gen";
 import { StateIcon } from "src/components/StateIcon";
@@ -58,16 +58,17 @@ type Props = {
   readonly label: string;
   readonly onClick?: () => void;
   readonly runId: string;
-  readonly search: string;
   readonly taskId: string;
 };
 
-const Instance = ({ dagId, instance, isGroup, isMapped, onClick, runId, 
search, taskId }: Props) => {
+const Instance = ({ dagId, instance, isGroup, isMapped, onClick, runId, taskId 
}: Props) => {
   const { setHoveredTaskId } = useHover();
   const { groupId: selectedGroupId, taskId: selectedTaskId } = useParams();
   const { t: translate } = useTranslation();
   const location = useLocation();
 
+  const [searchParams] = useSearchParams();
+
   const onMouseEnter = handleMouseEnter(setHoveredTaskId);
   const onMouseLeave = handleMouseLeave(taskId, setHoveredTaskId);
 
@@ -84,6 +85,12 @@ const Instance = ({ dagId, instance, isGroup, isMapped, 
onClick, runId, search,
     [dagId, isGroup, isMapped, location.pathname, runId, taskId],
   );
 
+  // Remove try_number query param when navigating to reset to the
+  // latest try of the task instance and avoid issues with invalid try numbers:
+  // https://github.com/apache/airflow/issues/56977
+  searchParams.delete("try_number");
+  const redirectionSearch = searchParams.toString();
+
   return (
     <Flex
       alignItems="center"
@@ -105,7 +112,7 @@ const Instance = ({ dagId, instance, isGroup, isMapped, 
onClick, runId, search,
         replace
         to={{
           pathname: getTaskUrl(),
-          search,
+          search: redirectionSearch,
         }}
       >
         <Tooltip
diff --git 
a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx 
b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx
index 5fdde79a432..c312af33dab 100644
--- 
a/airflow-core/src/airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx
+++ 
b/airflow-core/src/airflow/ui/src/layouts/Details/Grid/TaskInstancesColumn.tsx
@@ -17,7 +17,7 @@
  * under the License.
  */
 import { Box } from "@chakra-ui/react";
-import { useParams, useSearchParams } from "react-router-dom";
+import { useParams } from "react-router-dom";
 
 import type { LightGridTaskInstanceSummary } from "openapi/requests/types.gen";
 
@@ -34,8 +34,6 @@ type Props = {
 
 export const TaskInstancesColumn = ({ nodes, onCellClick, runId, taskInstances 
}: Props) => {
   const { dagId = "" } = useParams();
-  const [searchParams] = useSearchParams();
-  const search = searchParams.toString();
 
   return nodes.map((node) => {
     // todo: how does this work with mapped? same task id for multiple tis
@@ -55,7 +53,6 @@ export const TaskInstancesColumn = ({ nodes, onCellClick, 
runId, taskInstances }
         label={node.label}
         onClick={onCellClick}
         runId={runId}
-        search={search}
         taskId={node.id}
       />
     );

Reply via email to