Conversation
This was referenced Aug 12, 2026
1fanwang
force-pushed
the
oss/links-c-state-store
branch
2 times, most recently
from
August 13, 2026 00:15
1e4e436 to
e2148a5
Compare
1fanwang
marked this pull request as ready for review
August 13, 2026 00:17
1fanwang
requested review from
amoghrajesh,
ashb,
bolkedebruin and
kaxil
as code owners
August 13, 2026 00:17
1fanwang
force-pushed
the
oss/links-c-state-store
branch
from
August 13, 2026 05:00
e2148a5 to
2283d2b
Compare
1fanwang
force-pushed
the
oss/links-c-state-store
branch
from
August 13, 2026 05:01
2283d2b to
a7fb9b7
Compare
Member
|
@amoghrajesh Can you take a look at this, it is like trying to fix the same issue as #73315 |
This was referenced Sep 25, 2026
This was referenced Sep 25, 2026
An operator extra link is cached as a single XCom row under the link's xcom_key, and XComOperatorLink.get_link ignores the try_number on the TaskInstanceKey it is given. A task's XComs are also cleared before every attempt, so that row only ever holds whichever attempt ran last. Asking for an earlier attempt's link therefore returns the latest attempt's URL, and the original attempt's logs cannot be reached from the UI at all. The worker now also writes each attempt's rendered link to the task state store, which a retry does not clear, and the reader prefers that row. The XCom row is left in place and is still the answer for links written before this change. Reading goes through get_state_backend(), the same resolver the execution API uses, so a deployment pointing [state_store] backend elsewhere keeps working. Closes: apache#71471 Signed-off-by: 1fanwang <1fannnw@gmail.com>
1fanwang
force-pushed
the
oss/links-c-state-store
branch
from
September 25, 2026 20:54
0093e77 to
424d516
Compare
Contributor
Author
|
Closing in favor of #73315 — @amoghrajesh's fix solves the same problem (operator extra links surviving across retries) with a simpler, self-contained approach: per-try-suffixed XCom keys plus skipping those keys during XCom clearing. Mine additionally depended on the task-state-store abstraction from #71307/#68936, which is still pending consensus on the mailing list, so 73315 is the better fix to land. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Operator extra links keep only the latest attempt's URL. After a retry, attempt 1 can open attempt 2's logs.
Closes: #71471
Why
The link reader ignores the key's attempt number. The execution API clears task XComs before each attempt, so the row belongs to the latest attempt.
What
The task runner writes each rendered link to the task state store under an attempt key. The reader checks it first and falls back to XCom for older links.
Tests
This SQLite probe stores attempt 1 in the state store and attempt 2 in XCom:
Probe and output
Risk
The task state scope has no attempt field, so the key includes the attempt number. Existing XCom writes and fallback behavior remain unchanged.
Was generative AI tooling used to co-author this PR?
Generated-by: GitHub Copilot CLI (GPT-6 Astra) following the guidelines