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}