|
1 | 1 | --- |
2 | 2 | id: 0014 |
3 | 3 | title: Dual-Tree Secondary Index |
4 | | -status: proposal |
| 4 | +status: implemented |
5 | 5 | tags: [storage, index, checkpoint, recovery] |
6 | 6 | created: 2026-04-12 |
7 | 7 | github_issue: 550 |
@@ -443,7 +443,7 @@ SAFETY:` comments, and run the repository lint gate. [D10], [C4], [C7] |
443 | 443 | catalog-table changes, storage version compatibility with older table-meta |
444 | 444 | payloads, and removal of the existing single-tree index. |
445 | 445 | - Task Doc: `docs/tasks/000117-disk-tree-format-and-roots.md` |
446 | | - - Task Issue: `#0` |
| 446 | + - Task Issue: `#552` |
447 | 447 | - Phase Status: done |
448 | 448 | - Implementation Summary: Implemented Phase 1 DiskTree root metadata and persisted unique/non-unique DiskTree primitives [Task Resolve Sync: docs/tasks/000117-disk-tree-format-and-roots.md @ 2026-04-12] |
449 | 449 |
|
@@ -620,13 +620,34 @@ SAFETY:` comments, and run the repository lint gate. [D10], [C4], [C7] |
620 | 620 | - Non-unique scans add implementation work to enforce deterministic merge and |
621 | 621 | duplicate-suppression logic across two trees. |
622 | 622 |
|
| 623 | +## Post-Implementation Notes |
| 624 | + |
| 625 | +- Non-unique `DiskTree` keeps row-id-oriented public prefix scan behavior while |
| 626 | + exposing internal encoded exact-entry scan helpers where the composite |
| 627 | + secondary-index merge needs deterministic `(logical_key, row_id)` ordering. |
| 628 | +- The implementation reused B+Tree node layout, key/value encoders, scan |
| 629 | + helpers, and `BTreeNil` support where practical, but it deliberately avoided |
| 630 | + a generic backend-independent CoW B+Tree refactor. |
| 631 | + |
623 | 632 | ## Open Questions |
624 | 633 |
|
625 | | -- Given the fixed non-unique exact-entry merge contract, should DiskTree scan |
626 | | - APIs expose encoded keys for deterministic merge tests, or should merge order |
627 | | - be hidden behind row-id vectors? |
628 | | -- How much of `GenericBTree` search/cursor logic can be safely reused without |
629 | | - broadening this RFC into a generic CoW B+Tree refactor? |
| 634 | +None. |
| 635 | + |
| 636 | +## Deferred Follow-up Backlogs |
| 637 | + |
| 638 | +The implementation intentionally deferred the following non-blocking work. These |
| 639 | +items remain open for future task/RFC planning and are not required to close RFC |
| 640 | +0014: |
| 641 | + |
| 642 | +- `docs/backlogs/000083-full-disk-tree-compaction-policy.md` |
| 643 | +- `docs/backlogs/000084-parallel-secondary-disk-tree-checkpoint-application.md` |
| 644 | +- `docs/backlogs/000085-disk-tree-prefix-compression.md` |
| 645 | +- `docs/backlogs/000086-secondary-index-dual-tree-access-path.md` |
| 646 | +- `docs/backlogs/000087-refactor-recovery-process-parallel-log-replay.md` |
| 647 | +- `docs/backlogs/000088-remove-recovery-skip-option.md` |
| 648 | +- `docs/backlogs/000089-checkpoint-old-root-retention.md` |
| 649 | +- `docs/backlogs/000090-protect-disk-tree-root-lifetime.md` |
| 650 | +- `docs/backlogs/000091-page-level-secondary-mem-index-cleanup-scan.md` |
630 | 651 |
|
631 | 652 | ## Future Work |
632 | 653 |
|
|
0 commit comments