Merged
Conversation
This was referenced Feb 9, 2026
Contributor
Author
Merging this PR will not alter performance
Comparing Footnotes
|
Collaborator
Stats from current PR🔴 1 regression
📊 All Metrics📖 Metrics GlossaryDev Server Metrics:
Build Metrics:
Change Thresholds:
⚡ Dev Server
📦 Dev Server (Webpack) (Legacy)📦 Dev Server (Webpack)
⚡ Production Builds
📦 Production Builds (Webpack) (Legacy)📦 Production Builds (Webpack)
📦 Bundle SizesBundle Sizes⚡ TurbopackClient Main Bundles: **401 kB** → **401 kB** ✅ -23 B80 files with content-based hashes (individual files not comparable between builds) Server Middleware
Build DetailsBuild Manifests
📦 WebpackClient Main Bundles
Polyfills
Pages
Server Edge SSR
Middleware
Build DetailsBuild Manifests
Build Cache
🔄 Shared (bundler-independent)Runtimes
📝 Changed Files (4 files)Files with changes:
View diffspages-api-tu..ntime.dev.jsDiff too large to display pages-turbo...ntime.dev.jsDiff too large to display pages-api.ru..time.prod.jsDiff too large to display pages.runtime.prod.jsDiff too large to display 📎 Tarball URL |
d3a61c1 to
39412f8
Compare
lukesandberg
commented
Feb 11, 2026
lukesandberg
commented
Feb 11, 2026
lukesandberg
commented
Feb 11, 2026
lukesandberg
commented
Feb 11, 2026
lukesandberg
commented
Feb 11, 2026
lukesandberg
commented
Feb 11, 2026
lukesandberg
commented
Feb 11, 2026
lukesandberg
commented
Feb 11, 2026
lukesandberg
commented
Feb 11, 2026
lukesandberg
commented
Feb 11, 2026
lukesandberg
commented
Feb 11, 2026
lukesandberg
commented
Feb 11, 2026
lukesandberg
commented
Feb 11, 2026
265ed0d to
d58d20d
Compare
d58d20d to
aba07f9
Compare
d97fc10 to
6f0fe12
Compare
sokra
reviewed
Feb 17, 2026
sokra
reviewed
Feb 17, 2026
sokra
reviewed
Feb 17, 2026
sokra
reviewed
Feb 17, 2026
sokra
reviewed
Feb 17, 2026
sokra
reviewed
Feb 17, 2026
sokra
reviewed
Feb 17, 2026
sokra
reviewed
Feb 17, 2026
sokra
reviewed
Feb 17, 2026
sokra
reviewed
Feb 17, 2026
55f873e to
df59d07
Compare
lukesandberg
commented
Mar 1, 2026
lukesandberg
commented
Mar 1, 2026
8c46c90 to
267e7d2
Compare
267e7d2 to
33486a5
Compare
sokra
reviewed
Mar 2, 2026
sokra
reviewed
Mar 2, 2026
sokra
reviewed
Mar 2, 2026
sokra
reviewed
Mar 2, 2026
- Drop value deduplication: DB no longer deduplicates multi-values; that responsibility moves to callers - Strict collector semantics: Delete only shadows pre-existing keys; duplicate inserts in SingleValue families trigger debug assertion - Tombstone ordering: Collector places tombstones last in key groups for correct MergeIter compaction behavior - Meta file tombstone handling: Early return when tombstone found in FIND_ALL mode to avoid searching older SSTs - SST lookup update: Updated FIND_ALL scan for tombstone-last ordering - Compaction split boundary: Don't split SSTs mid-key-group by only checking fullness at key boundaries - Simplified get_impl tombstone handling by returning directly - Updated tests to reflect new WriteBatch invariants
5740e92 to
c944fe9
Compare
A race condition in get_or_create_persistent_task() can cause the same (task_type, task_id) pair to be pushed to persisted_task_cache_log twice when two threads concurrently miss the task_cache fast path. This causes a WriteBatch invariant violation (duplicate key in SingleValue family) in the turbo-persistence collector. Fix by tracking seen TaskIds with an FxHashSet in both the concurrent and serial write paths of save_snapshot, skipping duplicates before they reach WriteBatch::put().
Replace per-test-case family numbers with a unique prefix byte on family 0 to avoid key collisions when test cases share a single database. The "Families" test case is unchanged since it specifically tests multi-family support.
sokra
approved these changes
Mar 3, 2026
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.

What
Add support for multi-valued tables in
turbo-persistence.A multi-valued table allows multiple distinct values to be associated with a single key. Each family is independently configured as
SingleValue(existing behavior) orMultiValuevia the newFamilyKindenum.Why
This will support the
TaskCachetable (implemented in #88904), where keys will change to be hashes instead of fullTaskTypevalues. This greatly decreases DB size and speeds up queries due to smaller key sizes, at the cost of hash collisions requiring multiple values per key.How
API
FamilyKindenum (SingleValue/MultiValue) and per-familyFamilyConfiginDbConfigget()for single-valued families (panics if called on multi-valued)get_multiple()for multi-valued families, returnsSmallVec<[ArcBytes; 1]>— stack-allocated for the common 0–1 result case, heap-scales when neededput()anddelete()are unchanged — the family kind controls dedup/compaction behaviorWrite path & compaction
MergeItersemantics were changed so it produces 'newest' entries firstRead path
FIND_ALLconst generic on the internal lookup methodsFIND_ALL=false): binary search, return last match, stopFIND_ALL=true): scan all matching entries in the SST block, then continue to older SSTs. If a tombstone is found, stop searching older layers.