Skip to content

Archive worker-reported end date and rendered map index on task retry - #69248

Merged
jason810496 merged 4 commits into
apache:mainfrom
jason810496:fix/tih-retry-snapshot-followup
Jul 6, 2026
Merged

Archive worker-reported end date and rendered map index on task retry#69248
jason810496 merged 4 commits into
apache:mainfrom
jason810496:fix/tih-retry-snapshot-followup

Conversation

@jason810496

Copy link
Copy Markdown
Member

What

  • Consolidate the duplicated ti_patch_payload.retry_reason[:500] if ti_patch_payload.retry_reason else None statement.
  • Correct the task_instance_history.end_date, it didn't respect the end_date passed from worker (Execution API).
  • The final rendered_map_index carried in the retry payload should also be snapshotted to the TIH table.

Was generative AI tooling used to co-author this PR?
  • Yes — Claude Code (Fable 5)

Generated-by: Claude Code (Fable 5) following the guidelines

Follow-up to apache#69235. The task_instance_history row for a retried try
stamped archive-time utcnow() as end_date instead of the end date the
worker reported, and missed the final rendered map index when the
mid-run update was suppressed (e.g. template errors during failure
handling). Snapshot both onto the TI before archiving, and let
record_ti() respect a pre-set end_date so the audit trail reflects
when the try actually ended.
@boring-cyborg boring-cyborg Bot added area:API Airflow's REST/HTTP API area:task-sdk labels Jul 2, 2026
@jason810496 jason810496 self-assigned this Jul 2, 2026
@jason810496
jason810496 requested a review from vatsrahul1001 July 2, 2026 10:57
@jason810496 jason810496 added the backport-to-v3-3-test Backport to v3-3-test label Jul 2, 2026
@jason810496 jason810496 added this to the Airflow 3.3.0 milestone Jul 3, 2026
Comment thread airflow-core/src/airflow/models/taskinstancehistory.py
Cover the conditional branch where record_ti() archives a non-finished
TI with end_date=None, verifying it gets stamped with utcnow() and
duration is computed correctly.
Comment thread airflow-core/src/airflow/models/taskinstancehistory.py Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR improves the fidelity of task_instance_history snapshots for retry transitions coming from the Execution API, ensuring the archived “finished try” reflects worker-reported values instead of archive-time defaults.

Changes:

  • Update TaskInstanceHistory.record_ti() to only stamp end_date/duration when end_date is unset, allowing callers (e.g. Execution API) to preserve worker-reported end times.
  • In the Execution API retry handler, populate the in-memory TaskInstance with retry-related fields (and timing/map-index fields) before archiving, so TIH captures them.
  • Extend/adjust regression tests to assert end-date/duration and rendered_map_index are archived as expected.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
airflow-core/tests/unit/models/test_taskinstance.py Adds a unit test covering record_ti() end_date/duration stamping behavior.
airflow-core/tests/unit/api_fastapi/execution_api/versions/head/test_task_instances.py Extends retry-history regression test to assert end_date, duration, and rendered_map_index.
airflow-core/src/airflow/models/taskinstancehistory.py Changes record_ti() to avoid overwriting worker-provided end_date/duration when present.
airflow-core/src/airflow/api_fastapi/execution_api/routes/task_instances.py Sets retry snapshot fields on the in-memory TI before archiving; consolidates retry_reason truncation.

@jason810496
jason810496 marked this pull request as draft July 6, 2026 08:27

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@jason810496
jason810496 marked this pull request as ready for review July 6, 2026 08:44
@jason810496
jason810496 merged commit 66b803d into apache:main Jul 6, 2026
135 of 140 checks passed
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Backport successfully created: v3-3-test

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

Status Branch Result
v3-3-test PR Link

github-actions Bot pushed a commit to aws-mwaa/upstream-to-airflow that referenced this pull request Jul 6, 2026
…n task retry (apache#69248)

* Archive worker-reported end date and rendered map index on task retry

Follow-up to apache#69235. The task_instance_history row for a retried try
stamped archive-time utcnow() as end_date instead of the end date the
worker reported, and missed the final rendered map index when the
mid-run update was suppressed (e.g. template errors during failure
handling). Snapshot both onto the TI before archiving, and let
record_ti() respect a pre-set end_date so the audit trail reflects
when the try actually ended.

* Add test for record_ti fallback end_date stamping

Cover the conditional branch where record_ti() archives a non-finished
TI with end_date=None, verifying it gets stamped with utcnow() and
duration is computed correctly.

* Clarify record_ti comment covers pre-set duration too

* Snapshot rendered_map_index in TIH when a retry explicitly clears it
(cherry picked from commit 66b803d)

Co-authored-by: Jason(Zhe-You) Liu <68415893+jason810496@users.noreply.github.com>
aws-airflow-bot pushed a commit to aws-mwaa/upstream-to-airflow that referenced this pull request Jul 6, 2026
…n task retry (apache#69248)

* Archive worker-reported end date and rendered map index on task retry

Follow-up to apache#69235. The task_instance_history row for a retried try
stamped archive-time utcnow() as end_date instead of the end date the
worker reported, and missed the final rendered map index when the
mid-run update was suppressed (e.g. template errors during failure
handling). Snapshot both onto the TI before archiving, and let
record_ti() respect a pre-set end_date so the audit trail reflects
when the try actually ended.

* Add test for record_ti fallback end_date stamping

Cover the conditional branch where record_ti() archives a non-finished
TI with end_date=None, verifying it gets stamped with utcnow() and
duration is computed correctly.

* Clarify record_ti comment covers pre-set duration too

* Snapshot rendered_map_index in TIH when a retry explicitly clears it
(cherry picked from commit 66b803d)

Co-authored-by: Jason(Zhe-You) Liu <68415893+jason810496@users.noreply.github.com>
henry3260 pushed a commit that referenced this pull request Jul 6, 2026
…n task retry (#69248) (#69458)

* Archive worker-reported end date and rendered map index on task retry

Follow-up to #69235. The task_instance_history row for a retried try
stamped archive-time utcnow() as end_date instead of the end date the
worker reported, and missed the final rendered map index when the
mid-run update was suppressed (e.g. template errors during failure
handling). Snapshot both onto the TI before archiving, and let
record_ti() respect a pre-set end_date so the audit trail reflects
when the try actually ended.

* Add test for record_ti fallback end_date stamping

Cover the conditional branch where record_ti() archives a non-finished
TI with end_date=None, verifying it gets stamped with utcnow() and
duration is computed correctly.

* Clarify record_ti comment covers pre-set duration too

* Snapshot rendered_map_index in TIH when a retry explicitly clears it
(cherry picked from commit 66b803d)

Co-authored-by: Jason(Zhe-You) Liu <68415893+jason810496@users.noreply.github.com>
vatsrahul1001 pushed a commit that referenced this pull request Jul 7, 2026
…n task retry (#69248) (#69458)

* Archive worker-reported end date and rendered map index on task retry

Follow-up to #69235. The task_instance_history row for a retried try
stamped archive-time utcnow() as end_date instead of the end date the
worker reported, and missed the final rendered map index when the
mid-run update was suppressed (e.g. template errors during failure
handling). Snapshot both onto the TI before archiving, and let
record_ti() respect a pre-set end_date so the audit trail reflects
when the try actually ended.

* Add test for record_ti fallback end_date stamping

Cover the conditional branch where record_ti() archives a non-finished
TI with end_date=None, verifying it gets stamped with utcnow() and
duration is computed correctly.

* Clarify record_ti comment covers pre-set duration too

* Snapshot rendered_map_index in TIH when a retry explicitly clears it
(cherry picked from commit 66b803d)

Co-authored-by: Jason(Zhe-You) Liu <68415893+jason810496@users.noreply.github.com>
vatsrahul1001 pushed a commit that referenced this pull request Jul 9, 2026
…n task retry (#69248) (#69458)

* Archive worker-reported end date and rendered map index on task retry

Follow-up to #69235. The task_instance_history row for a retried try
stamped archive-time utcnow() as end_date instead of the end date the
worker reported, and missed the final rendered map index when the
mid-run update was suppressed (e.g. template errors during failure
handling). Snapshot both onto the TI before archiving, and let
record_ti() respect a pre-set end_date so the audit trail reflects
when the try actually ended.

* Add test for record_ti fallback end_date stamping

Cover the conditional branch where record_ti() archives a non-finished
TI with end_date=None, verifying it gets stamped with utcnow() and
duration is computed correctly.

* Clarify record_ti comment covers pre-set duration too

* Snapshot rendered_map_index in TIH when a retry explicitly clears it
(cherry picked from commit 66b803d)

Co-authored-by: Jason(Zhe-You) Liu <68415893+jason810496@users.noreply.github.com>
vatsrahul1001 pushed a commit that referenced this pull request Aug 5, 2026
…n task retry (#69248) (#69458)

* Archive worker-reported end date and rendered map index on task retry

Follow-up to #69235. The task_instance_history row for a retried try
stamped archive-time utcnow() as end_date instead of the end date the
worker reported, and missed the final rendered map index when the
mid-run update was suppressed (e.g. template errors during failure
handling). Snapshot both onto the TI before archiving, and let
record_ti() respect a pre-set end_date so the audit trail reflects
when the try actually ended.

* Add test for record_ti fallback end_date stamping

Cover the conditional branch where record_ti() archives a non-finished
TI with end_date=None, verifying it gets stamped with utcnow() and
duration is computed correctly.

* Clarify record_ti comment covers pre-set duration too

* Snapshot rendered_map_index in TIH when a retry explicitly clears it
(cherry picked from commit 66b803d)

Co-authored-by: Jason(Zhe-You) Liu <68415893+jason810496@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:API Airflow's REST/HTTP API area:task-sdk backport-to-v3-3-test Backport to v3-3-test

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants