fix(core): preserve temporary error semantics in BatchDeleter zero-success path#7402
Open
TennyZhuang wants to merge 1 commit intofix/batch-deleter-progress-trackingfrom
Open
Conversation
…ccess path When `delete_batch()` returns zero successes but all individual failures are temporary errors, `flush_buffer()` now returns a temporary error instead of a permanent one. Previously, the hardcoded permanent error killed retry semantics, causing callers to give up on items that were only temporarily failing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
43f378d to
344fab1
Compare
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.
Which issue does this PR close?
N/A - Follow-up to #7401. Found through deterministic state machine testing of
BatchDeleter.Rationale
When
delete_batch()returns zero successes but all individual failures are temporary errors,flush_buffer()returns a hardcoded permanent error:This kills retry semantics: callers (including retry layers) see a permanent error and give up, even though all underlying failures are temporary and could succeed on retry.
Changes
flush_buffer()to check whether all failures in the zero-success case are temporary. If so, the returned error is marked temporary viaset_temporary().Are there any user-facing changes?
Retry layers will now correctly retry batch delete operations when all individual failures are temporary, instead of treating them as permanent failures.
This change was generated with the assistance of an AI coding agent.
🤖 Generated with Claude Code