Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
5a42b3b
fix: quiesce workers before dropping RocksDB tables
kriszyp Aug 18, 2026
b2f9870
fix: harden table drop quiescence retries
kriszyp Aug 18, 2026
b6b057c
test: tighten table drop drain scope
kriszyp Aug 18, 2026
25b3b3c
fix: close table drop quiescence gaps
kriszyp Aug 18, 2026
182e0ce
fix: make drop quiescence cancellation-safe
kriszyp Aug 18, 2026
69b6a11
fix: guard cancelled history iterator resumption
kriszyp Aug 18, 2026
2e694c2
fix: scope ITC readiness to managed workers
kriszyp Aug 18, 2026
bd38b75
fix(deps): sync structon root lock metadata
kriszyp Aug 18, 2026
0dda484
test: make drop worker teardown failure-safe
kriszyp Aug 18, 2026
7e3a2f9
fix: accept confirmed worker exits during drop barriers
kriszyp Aug 18, 2026
a076039
fix: reject self-draining table drops
kriszyp Aug 18, 2026
88b44d8
test: isolate forced worker-exit database
kriszyp Aug 18, 2026
8c94dac
fix: reject self-draining read drops
kriszyp Aug 18, 2026
1eb8a62
fix: quiesce tombstoned classes during reconcile
kriszyp Aug 18, 2026
a44ccc1
fix: drain cleanup writes before table drop
kriszyp Aug 18, 2026
5a4cc65
fix: release all drop drain blockers on abort
kriszyp Aug 18, 2026
7024115
fix: drain audit delete removals before table drop
kriszyp Aug 18, 2026
178abfa
fix: preserve shared drop handles and removals
kriszyp Aug 18, 2026
5f69c08
fix: drain bounded maintenance removals
kriszyp Aug 19, 2026
933d51e
fix: release eviction reads before table drain
kriszyp Aug 19, 2026
2c8071a
fix: complete settled eviction transactions
kriszyp Aug 19, 2026
aa504a9
fix: release conflicted eviction transactions
kriszyp Aug 19, 2026
abc7517
fix: drain allocation and commit failure paths
kriszyp Aug 19, 2026
603afaf
fix: guarantee abort tracking cleanup
kriszyp Aug 19, 2026
8461c4f
test: format drop quiescence coverage
kriszyp Aug 19, 2026
fd92647
fix: abort synchronous commit failures
kriszyp Aug 19, 2026
226f180
fix: preserve iterators after replay commit failure
kriszyp Aug 19, 2026
9bba698
fix: release audit table handles on drop
kriszyp Aug 19, 2026
b222e17
fix: preserve replay iterators through wrapper failures
kriszyp Aug 19, 2026
90ec145
fix: drain indexing and failed transaction chains
kriszyp Aug 19, 2026
34f447f
fix: close terminal drop recovery gaps
kriszyp Aug 19, 2026
9fd985c
fix: reject self-blocking table drops
kriszyp Aug 19, 2026
31d0ea6
perf: avoid drop tracking on joined transactions
kriszyp Aug 19, 2026
45cf9d6
perf: stop drop-only write overhead
kriszyp Aug 19, 2026
21a4dc2
fix: drain every submitted index write
kriszyp Aug 19, 2026
9bae876
fix: enforce drop barrier participation
kriszyp Aug 19, 2026
390952d
fix: broadcast drop admission before draining
kriszyp Aug 19, 2026
c055a90
fix: release read drains after abort errors
kriszyp Aug 19, 2026
944ce99
fix: retain failed drop preparations
kriszyp Aug 19, 2026
b558fb1
fix: preserve LMDB scans during table drops
kriszyp Aug 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 14 additions & 8 deletions DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,14 +194,20 @@ If the table needs `audit: true`, set it both in the schema (for fresh installs)

A table is a set of RocksDB column families (`T/` plus `T/<attr>`) and a set of catalog rows
in the `__dbis__` store, with no transaction spanning the two. `Table.dropTable()` therefore
persists a `dropping: true` flag on the table's primary catalog entry (`T/`) before any
destructive work, then drops the column families (awaited - a failed drop must surface as the
operation's error, never a swallowed rejection), then removes the catalog rows. If the process
dies or a drop fails partway, the tombstone survives; both the boot-time schema load in
`databases.ts` (`completeInterruptedDrop`) and a same-name `table()` create complete the
interrupted drop instead of resurrecting the table. Without this, surviving catalog rows are
silently re-opened with create-if-missing on the next start, which resurrects "deleted" tables
(with their data, if the column families were never actually removed).
persists a `dropping: true` flag, a unique `dropGeneration`, and the current process incarnation on
the table's primary catalog entry (`T/`) before any destructive work. It then starts the local drain
and strict cross-worker barrier together, so every worker stops admission even if the coordinator's
own drain fails. Each worker drains table reads, writes, scans, and index backfills and closes its
column-family handles. Only after every worker acknowledges does the coordinator set
`dropQuiesced: true`, drop the column families, and remove the catalog rows.

The tombstone survives a partial failure. An unquiesced tombstone from the current process is not
safe to complete or recreate because another worker may still hold a handle; the table remains
unavailable and Harper must restart. After a clean restart the process incarnation differs, so
boot-time reconciliation can finish the drop. A same-name `table()` create may finish only a
quiesced drop or one left by an older process. These checks prevent surviving catalog rows from
being re-opened with create-if-missing and resurrecting a deleted table or an undiscoverable
"ghost" column family.

## MCP protocol surface (`components/mcp/`)

Expand Down
84 changes: 36 additions & 48 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading