Repository navigation
Bound reconnect recovery on unpublished local suspends - #350
Draft
mabdelraouf-pplx wants to merge 1 commit into
Draft
mabdelraouf-pplx wants to merge 1 commit into
mabdelraouf-pplx wants to merge 1 commit into
Conversation
Return a retryable publication prerequisite instead of waiting on an absent runtime. Preserve durable restores and the existing no-source precondition contract. Co-authored-by: pplx-teammatebot <devtools+teammatebot@perplexity.ai>
This was referenced Oct 13, 2026
api, cluster-controller: sort the tests that use the Direct substrate as a fixture (tests only)
#402
Merged
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
Bound reconnect recovery when the current execution has published a local suspend but its full artifact has not become durable. Return a typed 503 + Retry-After instead of claiming/joining recovery or polling the absent runtime to the readiness deadline.
Self-assessed severity: high — repeated reconnects can leave a session unavailable despite a potentially recoverable retained artifact. This change does not declare that artifact lost or discard it.
Behavior and source of truth
node_facet_observed_status.local_suspendobservation together with the active execution and snapshot storage rows. Require the same source node, execution generation, and Pod UID; reject superseded activity. Match the observed artifact, not an older committed suspend marker.wake_in_progress / restore / restore_source_pending.docs/ecw.md.Deliberately incomplete terminal-loss classification: failed upload jobs are node-local, and a failed/missing cluster snapshot alone does not prove retained bytes are gone. No authoritative terminal local-artifact-loss verdict is currently published to this API. This PR therefore adds 503-only handling for this state; the existing no-verified-restore-source 412 contract is unchanged. A future generation/Pod-UID/artifact-fenced terminal verdict is required before adding new 412 responses. Missing observations retain existing behavior.
Proof and validation
Baseline:
67e3ab347d68056edac89d2f550b9bcd85ec0282, with only the regression-test changes.Elapsed(())); failed/missing registration cases returned the genericUnavailabledisposition rather than the typed publication wait.0005d59a10b46d298e2779d45030414f242e44fa.SPACE_CI_REQUIRE_TEST_DEPS=1 cargo nextest run --locked -p pplx-space-api -p pplx-space-db-test-fixtures --all-features --test-threads 8 --run-ignored all: 1,731 passed, 0 skipped, including the seven regression cases and the 14-case publication/identity/activity fencing matrix.ci/scripts/run-rust-checks.sh fmt: passed (generated environment contract, Rust error policy, workspace formatting).ci/scripts/run-rust-checks.sh clippy: passed (workspace/all-targets/all-features plus the runner's isolated-feature checks).cargo arch: passed, 0 required / 37 advisory findings.CARGO_PROFILE_TEST_DEBUG=0 CARGO_PROFILE_DEV_DEBUG=0 CARGO_BUILD_JOBS=20; the full workspace test inventory is left to CI rather than claimed from the affected-package run.This is synthetic path-level evidence, not a live Firecracker/Kind restore or production rollout. No live infrastructure was queried or changed.
Interactions
AI assistance: Perplexity contributed implementation, tests, documentation, and this description. Kept draft as requested.
Created with Perplexity