Conversation
1962719 to
9850e91
Compare
|
Follow-up qualification and hardening (commit 9393caf):
The Kubernetes 5,000-commit stress artifact remains explicitly negative at the 500-commit fetch/repack boundary because the interrupted pre-fix repository state still requires a large historical pack; it is not being reported as parity proof. Hosted-provider, multipart, replica/tiering, mount/browser, S3 gateway, migration/recovery, and backup/restore rows remain release gates. |
|
Parity follow-up (commit d6431f8): removed the stale client rejection for protected pushes carrying a v2 mirror-plan ID. The plan ID is already authenticated in |
|
Added |
|
Documentation follow-up (commit 0233c25): the main capsule publication design now records the authenticated external thin-base rule and protected mirror-plan receipt path alongside the parity inventory and RustFS evidence. |
0233c25 to
6ad3b0b
Compare
V1 parity passImplemented and pushed in
Proof after rebase:
Remaining release blockers are intentionally explicit: hosted-provider checksum/multipart and 5,000-commit current-format replay; managed replica failover/repair; tier/archive restore; mount range/cancellation/unmount; browser/HTTP load and fault matrix; S3 gateway operation/concurrency/restart matrix; lifecycle/workflow/admin inventory; backup/restore export inventory; and migration fault/resume/provider plus older-Git/interrupted/adversarial qualification. Full v1 production parity is not claimed until those Level-3 gates pass. |
|
Parity closure update (c2d87d8):
Local proof after this change:
This closes the local wiring gap, but is not a claim of complete v1 production parity. Release gates remain: live S3/GCS/Azure lifecycle and restore behavior; replica readiness/failover/repair; restored-content verification; the full FUSE/NFS range/cache/cancellation matrix; browser and smart-HTTP load/fault coverage; S3 gateway restart/concurrency/request-count coverage; and migration, backup inventory, and delete/restore qualification on populated v1/v2 repositories. |
|
Follow-up test hardening: the focused mount module now passes 122/122. I also serialized the unmount test's HOME override through the existing test guard; this removes a process-global HOME race that could make |
|
Final local rerun after the test-only race fix: |
4b94ade to
cc8700f
Compare
|
Layered-pack qualification update (commit 1640af9):
The 5,000-commit replay with 500-commit fetch/repack checkpoints and hosted-provider matrix remain explicit release gates; v1 is not being retired until those pass. |
|
Follow-up pushed in The first fresh PR-208 5,000-commit run found a correctness blocker before replay could continue: an append-only in-memory visibility dictionary could be non-canonical when serialized into the layered capsule ( Proof for the fix:
I am rebuilding the exact release binary from this commit and rerunning the fresh local-RustFS qualification. The earlier run remains recorded as a failed negative qualification at seed + replay 1; no 5,000-commit success is claimed until all replay, checkpoint fetch/repack, clone, and fsck gates pass. |
|
Layered-pack follow-up pushed in
The PR is updated with the fixes and evidence, but v1 is not retired and the 5,000-commit/multi-pack cold-clone gates remain open until the authenticated multi-member install or equivalent whole-member union path is implemented and requalified. |
|
Post-push test completion for
The branch remains clean apart from the pre-existing untracked local |
|
Updated in commit 1cfdd63 (perf(fetch): preload layered locators for cold clones).\n\nWhat changed:\n- Complete layered views now coalesce and authenticate index, reverse-index, and kind-bearing locator sidecars, then expose inline locators to the planner.\n- Ordinary incremental haves stay on the footer/tip-bound path; cold, filtered, shallow, and tag requests promote only when complete visibility is required.\n- Multi-member cold clones no longer fall back to per-object visibility reads; direct one-pack installation remains fail-closed.\n- Design history and qualification evidence are recorded in crab/docs/design/capsule-layered-packs.md.\n\nVerification:\n- crab-read: 200 passed.\n- remote-helper: 139 passed.\n- upload-pack wire: 39 passed.\n- Local RustFS, Kubernetes-derived fixture: blob:none clone 14.50 s with 173 ms planning; cache-miss shallow blob:none clone 6.12 s with 1,095 planning reads and 372 terminal response-pack reads; unfiltered multi-member clone 85.94 s, exact source tip, native git fsck --full clean.\n- Full, filtered, and shallow clone tips all match the source.\n\nThe fresh 5,000-push/fetch/repack matrix, hosted-provider latency, and v1-retirement gates remain open; this update does not claim those are complete. |
|
CI follow-up: GitHub did not emit a synchronize run for the new head, so I manually dispatched the current commit (1cfdd63) against the repository workflows:\n- CI: https://github.com/crabbuild/crab/actions/runs/35675208869\n- Git protocol v2 partial-clone qualification: https://github.com/crabbuild/crab/actions/runs/35675210814\n- Large repository RustFS qualification: https://github.com/crabbuild/crab/actions/runs/35675212409\n\nAt this update they are queued, not yet green; the prior completed run was for an older head. |
|
Pushed dba2cb4 (fix(protocol-v2): retain negotiated fetch haves). What changed:
Proof:
Qualification status remains honest: the replay later reached an existing 503,980,520-byte Crab/Xet pointer commit and stopped with CRAB-E0086 because the replay harness had not staged its local chunks. The 5,000-push/xorb qualification gate is still open; this is a staging-contract failure, not evidence that the haves fix is incorrect. |
|
Pushed follow-up commit 1696f53 to PR 208. The fresh full-history GitHub-origin Kubernetes RustFS qualification (pr208-v2-fresh-github-smoke2-20260921, binary dba2cb4) passed seed publication, protocol-v2 incremental fetches at pushes 1/5/10, exact tip checks, cold and warm full clones, and native fsck. Measured incremental fetches were 33.457s / 15,494 storage range reads / 50.1MB response at push 1 and 24.227s / 16,999 reads / 55.5MB response at push 5. Cold full clone was 217.5s with 10 store requests; warm clone was 99.8s with zero store requests. The run stopped only at the blobless-clone qualification assertion blob-none-ordinal-metadata-lookup: the exact ordinal-metadata lookup branch emitted no locator_lookup_mode event, so the harness observed zero metadata events even though the request completed through the catalog-filter plan. The new commit adds that trace at the crab-metadata reader boundary; no data-path or authorization behavior changes. Focused crab-metadata tests pass (212/212). Fresh workflows have been dispatched at this new head:
I am not marking the PR green until those runs complete. |
|
Pushed This fixes the v2 incremental-fetch regression caused by generation-owner checkpoint compaction: the control-only reader previously saw no live capsule transitions after compaction and fell back to a visibility traversal. Layered checkpoints now carry a bounded, authenticated recent per-ref transition suffix in the footer. Control-only fetches consume that suffix; older/incomplete have chains still fail closed to the existing catalog/traversal planner. The complete ordinal visibility body remains authoritative for cold/strict paths. Proof:
Fresh manual workflows for this commit:
|
|
Qualification update for
|
|
Update: pushed
Known local gate: workspace |
|
Qualification update from the exact |
|
Focused regression gate from |
|
Qualification update: the 1,500-boundary checkpoint completed with 1,501/1,501 pushes successful. Owner maintenance was 511.8 s (peak child RSS ~1.69 GiB, two active packs). The incremental fetch then completed in 15.4 s with 146 storage requests and 17,445 logical objects; visibility planning was 1 ms. This reinforces the outstanding protocol-v2 response-pack scaling gap; correctness remains intact and the 5,000 replay is continuing. |
|
Qualification update: the 2,000-boundary checkpoint completed with 2,001/2,001 pushes successful. Owner maintenance was 659.3 s (peak child RSS ~0.79 GiB, two active packs). Incremental fetch completed in 5.88 s with 126 storage requests and 20,279 logical objects; visibility planning was 3 ms. Fetch wall time varied versus the 1,500 sample, but the request count remains dominated by protocol-v2 response-pack reads. The 5,000 replay continues with no correctness failure. |
Pin Cellule's provider rotation preflight and wire Crab's enrolled-member liveness check. Expired follower leases now rotate the host-owned epoch through the existing safe replacement path. Depends on crabbuild/cellule#43.
Status
Protocol v2 includes per-ref publication, Xet xorbs/shards, stable layered packs, and exact-tip fetch. This PR is still under qualification; v1 should remain available until correctness, performance, and product-parity gates are met. Current head:
13ff72520faef3fc3468b65ff5f5a05e945344c9.Incremental-fetch object-store request count is diagnostic, not a pass/fail threshold. The latest 500-commit fetch completed correctly in 5.55 s and installed one pack with 27 object-store requests; that request count is acceptable for this workload. Correctness, fetch latency, push scaling, and clone behavior remain relevant qualification measures.
RustFS qualification evidence
A Kubernetes-derived 5,000-commit replay passed exact-tip checks, strict Git and Crab fsck, cold/warm clones, and sampled blob-digest verification. Push mean/p95/p99 was about 335/579/932 ms with about 7.062 mean origin requests. Ten fetch/repack intervals completed in about 3.1–6.3 s and installed one pack each. Full evidence:
crab/docs/benchmarks/capsule-v2-kubernetes-5000-rustfs-ga.md.Before the current copy-on-write change, the cold clone took 68.149 s and warm clone took 25.703 s. The current head adds copy-on-write materialization for cached Git packs, with verified-copy fallback and no hard links. This should avoid copying cached pack contents on supported filesystems, but a full post-change clone benchmark has not yet measured the effect; no speedup is claimed yet.
A separate 100 GiB Xet workload passed 3,850 file-byte comparisons, but the metered seed push saw three 60-second proxy timeouts on duplicate xorb PUTs. The cause was not established. Cold 100 GiB hydration took 37.9 minutes, so Xet performance is not qualified. Evidence:
crab/docs/benchmarks/capsule-v2-xet-100g-rustfs-ga.md.Remaining gates
Design and release gates:
crab/docs/design/capsule-layered-packs.mdandcrab/docs/design/capsule-xorbs-shards.md.