Uh oh!
There was an error while loading. Please reload this page.
fix(ui): prevent duplicate TI summary stream refreshes after mutations - #67892
Conversation
bbovenzi
commented
Jun 3, 2026
Good catch! |
choo121600
commented
Jun 6, 2026
Nice! It looks like the static check is failing. |
6578fe3 to
3e96f24CompareUh oh!
There was an error while loading. Please reload this page.
Awesome work, congrats on your first merged pull request! You are invited to check our Issue Tracker for additional contributions. |
Backport failed to create: v3-2-test. View the failure log Run detailsNote: As of Merging PRs targeted for Airflow 3.X In matter of doubt please ask in #release-management Slack channel.
You can attempt to backport this manually by running: cherry_picker 2e5af2a v3-2-testThis should apply the commit to the v3-2-test branch and leave the commit in conflict state marking After you have resolved the conflicts, you can continue the backport process by running: cherry_picker --continueIf you don't have cherry-picker installed, see the installation guide. |
Summary
Closes#67884
This fixes a UI freeze regression introduced after #67212 where Task Instance mutation actions (Mark success/failed, etc.) triggered multiple overlapping TI summary stream refreshes and excessive React state updates.
Previously:
This update introduces deterministic refresh coalescing, active stream deduplication, and NDJSON state batching to significantly reduce render churn while preserving query freshness and the stale badge fix introduced in #67212.
Root Cause
The cache subscriber added in #67212 relied on a fragile timing-based debounce using setTimeout(..., 0).
Under mutation-heavy invalidation flows:
This resulted in dozens of rapid re-renders on already expensive UI surfaces.
Changes
Deterministic Refresh Coalescing
Active Stream Deduplication
NDJSON State Batching
Tests Added
Added comprehensive tests covering:
Verification
Validated with:
bash npx vitest run src/queries/useGridTISummaries.test.tsx pnpm lint
No lint or type errors remain.