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

kaxilnaik pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 73f25ace72dfb44cef258cf5c92f4028e42b4284
Author: Pierre Jeambrun <pierrejb...@gmail.com>
AuthorDate: Fri Sep 12 09:55:12 2025 -0600

    Prevent HITL from emitting reqeust for settled dag and tasks (#55575)
    
    (cherry picked from commit 4c85e279d619217557803b534f3d75ffee958228)
---
 airflow-core/src/airflow/ui/src/components/NeedsReviewButton.tsx | 6 ++++--
 airflow-core/src/airflow/ui/src/pages/Dag/Overview/Overview.tsx  | 8 +++++++-
 airflow-core/src/airflow/ui/src/pages/Task/Overview/Overview.tsx | 7 ++++++-
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/components/NeedsReviewButton.tsx 
b/airflow-core/src/airflow/ui/src/components/NeedsReviewButton.tsx
index 3ceadb7b55a..fcec3a8fe1d 100644
--- a/airflow-core/src/airflow/ui/src/components/NeedsReviewButton.tsx
+++ b/airflow-core/src/airflow/ui/src/components/NeedsReviewButton.tsx
@@ -27,14 +27,16 @@ import { StatsCard } from "./StatsCard";
 
 export const NeedsReviewButton = ({
   dagId,
+  refreshInterval,
   runId,
   taskId,
 }: {
   readonly dagId?: string;
+  readonly refreshInterval?: number | false;
   readonly runId?: string;
   readonly taskId?: string;
 }) => {
-  const refetchInterval = useAutoRefresh({ dagId });
+  const hookAutoRefresh = useAutoRefresh({ dagId });
   const { data: hitlStatsData, isLoading } = 
useHumanInTheLoopServiceGetHitlDetails(
     {
       dagId,
@@ -45,7 +47,7 @@ export const NeedsReviewButton = ({
     },
     undefined,
     {
-      refetchInterval,
+      refetchInterval: refreshInterval ?? hookAutoRefresh,
     },
   );
 
diff --git a/airflow-core/src/airflow/ui/src/pages/Dag/Overview/Overview.tsx 
b/airflow-core/src/airflow/ui/src/pages/Dag/Overview/Overview.tsx
index 8cebcc4ba0b..8de8220a417 100644
--- a/airflow-core/src/airflow/ui/src/pages/Dag/Overview/Overview.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Dag/Overview/Overview.tsx
@@ -35,6 +35,7 @@ import TimeRangeSelector from 
"src/components/TimeRangeSelector";
 import { TrendCountButton } from "src/components/TrendCountButton";
 import { SearchParamsKeys } from "src/constants/searchParams";
 import { useGridRuns } from "src/queries/useGridRuns.ts";
+import { isStatePending, useAutoRefresh } from "src/utils";
 
 const FailedLogs = lazy(() => import("./FailedLogs"));
 
@@ -75,9 +76,14 @@ export const Overview = () => {
     timestampLte: endDate,
   });
 
+  const refetchInterval = useAutoRefresh({});
+
   return (
     <Box m={4} spaceY={4}>
-      <NeedsReviewButton dagId={dagId} />
+      <NeedsReviewButton
+        dagId={dagId}
+        refreshInterval={gridRuns?.some((dr) => isStatePending(dr.state)) ? 
refetchInterval : false}
+      />
       <Box my={2}>
         <TimeRangeSelector
           defaultValue={defaultHour}
diff --git a/airflow-core/src/airflow/ui/src/pages/Task/Overview/Overview.tsx 
b/airflow-core/src/airflow/ui/src/pages/Task/Overview/Overview.tsx
index 3ee154c1392..6eb82b710aa 100644
--- a/airflow-core/src/airflow/ui/src/pages/Task/Overview/Overview.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Task/Overview/Overview.tsx
@@ -72,7 +72,12 @@ export const Overview = () => {
 
   return (
     <Box m={4} spaceY={4}>
-      <NeedsReviewButton taskId={taskId} />
+      <NeedsReviewButton
+        refreshInterval={
+          taskInstances?.task_instances.some((ti) => isStatePending(ti.state)) 
? refetchInterval : false
+        }
+        taskId={taskId}
+      />
       <Box my={2}>
         <TimeRangeSelector
           defaultValue={defaultHour}

Reply via email to