perf(runtime): tombstone deletes default-on again — the #9200 corruption that rolled them back is fixed (26x on populated delete) - #9331
Conversation
…d the PerryTS#9200 corruption that rolled them back PerryTS#9038 shipped O(1) tombstone deletes default-on; PerryTS#9212 returned them to opt-in because PerryTS#9200 let an evacuating minor sweep a deleted receiver's live keys array (an unarmed successor descriptor was the only root). PerryTS#9317 fixed that structurally: every post-birth ShapeId publish routes through stamp_object_shape_id_with_carrier_note, which arms old_carrier for any non-nursery receiver, so the descriptor and its keys array are rooted by construction. The default flips back to ON; PERRY_OBJECT_TOMBSTONES=0 remains the kill switch (the same switch that attributed PerryTS#9108, PerryTS#9110 and PerryTS#9200 each in one command). Verified on this build: both PerryTS#9200 fixtures (tower + oldgen) x five configurations (default, kill, HL=8+FORCE_EVACUATE, HL=4+FORCE+VERIFY, evac+kill) all byte-identical to node, 3/3 runs each; tombstone unit suite 27/27; populated-delete bench (500 keys, 200k delete/re-add rounds, interleaved): default 82-89 ms vs kill-switch 2137-2352 ms — the flip restores a ~26x improvement (node: 24-25 ms on the same box). Claude-Session: https://claude.ai/code/session_01TE3JXAYXtdnKcLu8TCFWR6
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (2)
Included review availability: Your plan provides up to 8 included reviews per hour; 5 remain after this review. 📝 WalkthroughWalkthroughTombstone deletes are now enabled by default. ChangesTombstone delete behavior
Estimated code review effort: 2 (Simple) | ~10 minutes Merge Risk: 🔵 Low · up to This change restores faster default object deletion while retaining an emergency opt-out. The known rooting failure is structurally addressed, but real evacuating-collection behavior and production kill-switch initialization still warrant explicit owner awareness before merge. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Full details: Title checkExplanation The title clearly identifies the main change: restoring tombstone deletes as the default runtime behavior. It also provides relevant context about the prior corruption fix and performance impact, although it is longer than necessary. Full details: Description checkExplanation The description provides a clear summary, concrete change rationale, related issue references, detailed validation results, and benchmark data. It does not use the template headings or include the checklist, but the required information is mostly present. Full details: Docstring CoverageExplanation Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 1 files. (1 skipped: 1 unsupported.) ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Restores #9038's default. The chain of custody:
stamp_object_shape_id_with_carrier_note, which armsold_carrierfor any non-nursery receiver — the descriptor and its keys array are rooted by construction, not by the site remembering to.This PR is the one-hunk default flip plus the changelog.
PERRY_OBJECT_TOMBSTONES=0remains the kill switch — deliberately, since that same switch attributed #9108, #9110 and #9200 each in one command.Verified on this exact build
The five-configuration matrix over both #9200 fixtures — including the precise configuration that broke the old default — all byte-identical to node, 3/3 runs each:
tower_deletetombstone_oldgen_deleteTombstone unit suite: 27/27 with the flipped default.
The win it restores (500-key object, 200k delete/re-add rounds, interleaved on one box; node 24–25 ms):
~26×. Perry remains ~3.4× node on this shape — the residual is the per-delete IC retirement documented in #9064, a separate lane.
Summary by CodeRabbit