Skip to content

[PartitionStore] Allow table key prefix builders to use references#4561

Open
AhmedSoliman wants to merge 6 commits intomainfrom
pr4561
Open

[PartitionStore] Allow table key prefix builders to use references#4561
AhmedSoliman wants to merge 6 commits intomainfrom
pr4561

Conversation

@AhmedSoliman
Copy link
Copy Markdown
Contributor

@AhmedSoliman AhmedSoliman commented Apr 3, 2026

  • Allows key prefixes and (get) operations no partition store to be encoded without the extra clone into the builder (via the new builder_ref() type).
  • Allows table key designers to use Option by implementing their own KeyEncode trait with their own semantic of what "None" means.

Stack created with Sapling. Best reviewed with ReviewStack.

Introduces InternedReString, a wrapper around ReString that deduplicates
long strings via a per-thread HashSet. Strings longer than size_of::<String>()
are stored as Arc<str> and looked up on construction and during deserialization
(serde and bilrost), so repeated values share a single heap allocation.

Short strings are stored inline and bypass the interner entirely.

The bilrost decode path is optimized with a fast path for contiguous buffers:
when chunk() covers the full string, we read directly as &str and query the
interner without allocating a temporary buffer.
A macro utility for efficiently formatting a restring which may optimize out the heap allocation if the string can be inlined (<= 24 bytes)
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 3, 2026

Test Results

  7 files   -  1    7 suites   - 1   2m 36s ⏱️ - 1m 7s
 47 tests  -  6   47 ✅  -  6  0 💤 ±0  0 ❌ ±0 
200 runs   - 33  200 ✅  - 33  0 💤 ±0  0 ❌ ±0 

Results for commit b33c373. ± Comparison against base commit 6725361.

This pull request removes 6 tests.
dev.restate.sdktesting.tests.Combinators ‑ awakeableOrTimeoutUsingAwaitAny(Client)
dev.restate.sdktesting.tests.Combinators ‑ firstSuccessfulCompletedAwakeable(Client)
dev.restate.sdktesting.tests.UserErrors ‑ failSeveralTimesWithMetadata(URI)
dev.restate.sdktesting.tests.UserErrors ‑ internalCallFailurePropagationWithMetadata(URI)
dev.restate.sdktesting.tests.UserErrors ‑ invokeTerminallyFailingCallWithMetadata(URI)
dev.restate.sdktesting.tests.UserErrors ‑ sideEffectWithTerminalErrorWithMetadata(URI)

♻️ This comment has been updated with latest results.

@AhmedSoliman AhmedSoliman changed the title Introducing locks table [PartitionStore] Allow table key prefix builders to use references Apr 4, 2026
@AhmedSoliman AhmedSoliman marked this pull request as ready for review April 4, 2026 13:19
ServiceName uses the new `InternedReString` for thread-local checked interning when it makes sense.

LockName will be used for representing the new service locking mechanism for vqueues that will be introduced in the next commit(s).
- Allows key prefixes and (get) operations no partition store to be encoded without the extra clone into the builder (via the new builder_ref() type).
- Allows table key designers to use Option<T> by implementing their own KeyEncode trait with their own semantic of what "None" means.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant