Repository navigation
Harden transfer contracts and isolate cold-cache failures - #8
Merged
Merged
Conversation
Prefer already-bound registration slots, label an unlinked RDMA attempt as a TCP fallback, and record fill finish, failure, and fence as notices that carry no payload. A failed cold drain keeps its job, and a wrong-tenant refill does not download the block. Mooncake stays unlinked and the bench reports still contain no timings. Co-authored-by: RustFS <hello@rustfs.com>
…ooncake-reverse-optimizations-54fd
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.
Change
A permanently denied cold write previously returned to the queue head on every drain and prevented healthy jobs from publishing. The sink now processes a bounded snapshot fairly, retries transient errors up to three total attempts, and isolates terminal failures for individual retrieval.
drain_reportexposes partial progress;drainreturns the first error after processing the round. Pending and failed jobs share the same byte and job admission limits, with a hard ceiling of 4,096 retained jobs.Cold publication and refill also enforce the following contracts:
CacheIdentity. All four public refill APIs require the expected identity from the upstream authenticated request. Tenant and identity mismatches return no payload and cause no payload-range download.The transfer-contract work remains in this PR: registered-slot reuse and atomic batch admission, overflow-safe fencing, bounded payload-free fill notices, explicit CPU TCP fallback receipts, and honest Mooncake comparison labels. Mooncake and libnixl are not linked. See ADR 0009, the data paths, and the test matrix.
Validation
Exact tested commit:
02178a55617391b273ff17021457596ee6b91e30, with a clean working tree.python3 scripts/ci/vm_regression.py --profile cpu --offline --output artifacts/pr8-regression-02178a5: 18/18 gates PASS locally.Grok/VM reproduction from a clean checkout:
Keep
environment.json,capabilities.json,results.json,summary.md,junit.xml, all logs and the process exit code. See the VM runbook.Compatibility and failure behavior
Refill signatures now require
expected: &CacheIdentity; tenant-only and identity-free payload access are removed. RawObjectStoreaccess remains a trusted internal capability. Identity matching does not authenticate the caller or prove the producer's model computation. Upstream authentication and authorization remain required.Manifest v3 and digest-derived keys require cold-cache repopulation. The hot protocol and object format remain unchanged. A full failed queue applies admission backpressure until
take_failedorcancelreleases its credits. A PUT failure can leave an orphan; the sink does not claim automatic reference-safe garbage collection. The byte budget bounds requested refill bodies at the trait boundary, not backend wire/RSS usage: the existing HTTP probe'sheadfetches a body to calculate its checksum.Evidence limits and scope
This is CPU correctness evidence, not a VM backtest or a device performance result. GPU engine export/import, RDMA, GDS, DOCA, SPDK, BlueField offload and live RustFS remain
NOT_RUN_HARDWARE.TCO_UNKNOWNandNOT_EVALUATEDremain unchanged. ARM/QEMU CPU execution is not a DPU test.The cold crate remains off the hot path. No hot-tier erasure coding or durability replicas are added. Callers fall back to recompute when cold refill is unavailable or incompatible; legacy entries are not rewritten or deleted by this migration.