Repository navigation
Retry failed generation-suspend backups behind an admission gate - #349
Draft
mabdelraouf-pplx wants to merge 2 commits into
Draft
mabdelraouf-pplx wants to merge 2 commits into
mabdelraouf-pplx wants to merge 2 commits into
Conversation
Co-authored-by: pplx-teammatebot <devtools+teammatebot@perplexity.ai>
…anged Co-authored-by: pplx-teammatebot <devtools+teammatebot@perplexity.ai>
This was referenced Oct 13, 2026
This branch has not been deployed
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.
Summary
A failed upload attempt must not permanently strand a generation suspend when its immutable local artifact is still usable.
This draft adds default-off automatic re-drive (
SPACE_SUSPEND_BACKUP_REDRIVE_ENABLED=false):submit_artifact_backuppath asEnqueueArtifactBackup.snapshot.backup.redrivefor re-drive submission attempts. No Datadog monitor or non-durable-age gauge is included.Severity: high. A transient storage dependency failure can otherwise become an indefinitely non-durable suspend.
Rollout and related changes — do not enable yet
Keep the flag off until #331's cluster admission fence has shipped and is integrated with this submission path. Main cannot protect the case where an execution has retired only in the control plane, but the old worker still holds an active local generation job and artifact. This PR does not reproduce or replace that remote fence. Local checks alone do not make enabling the flag safe.
ArtifactBackupSubmissionand the teardown driver. Preserve this PR's atomic local admission guard and [backup] refuse teardown-suspend backups from retired executions and release their runtimes #331's durable payload + remote admission fence when reconciling them.The volume-manager time-budget extension is in the separate stacked draft #351. This PR alone still allows its existing five-attempt budget to expire; it repairs the next stage when an independent valid local artifact survives. It never restores missing bytes or marks a partial upload Ready.
Evidence and limitations
Synthetic loopback gRPC regression, on the real
poll_artifact_jobpath:The test holds the remote transfer at
Failed, reproducing the observed terminal boundary; it does not run a real credential authority or claim a complete credential-exhaustion-to-restored-VM test. The matching admission regression exercises the real generation backup method and persisted job submission with a test-owned unavailable cluster credential; a valid source gets a fresh job, while missing/invalid, stale-generation, retired, and wrong-artifact cases do not.Validation:
fmtstage: passed (includes generated shim environment and Rust error-policy checks).cargo arch: passed required checks; advisory findings remain.88a3af1925ef08cca734ea1c0b63d33f4982d379: all checks passed, including full Rust tests, clippy, fmt, gateway traffic, and the aggregate gate.Deliberately deferred API signal
No observed-status schema change here. Proposed follow-up: additive
local_suspend.backup_recovery = pending | terminal_artifact_unavailable | unknown, interpreted only with the exact existing generation + PodUID + local-artifact identity. Absent means unknown; transient inspection/RPC/I/O failure must never publish terminal loss. Consumers must stay conservative until an authoritative writer exists.AI assistance: Perplexity contributed the implementation, tests, and this description.
Created with Perplexity