Extract entries by reference from LTX. - #5411
Open
dmkozh wants to merge 1 commit into
Open
Conversation
dmkozh
force-pushed
the
get_all_entries_refs
branch
4 times, most recently
from
August 14, 2026 20:11
6ed9eb2 to
8f40d52
Compare
dmkozh
marked this pull request as ready for review
August 14, 2026 20:15
Contributor
There was a problem hiding this comment.
Pull request overview
Replaces copied ledger transaction entries with borrowed references to reduce ledger-close overhead.
Changes:
- Adds non-owning ledger entry/key reference views.
- Propagates reference views through bucket and Soroban state paths.
- Updates tests and fuzzing callers.
Reviewed changes
Copilot reviewed 20 out of 20 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
src/ledger/LedgerEntryRefs.h |
Defines reference vectors and views. |
src/ledger/LedgerTxn.h |
Exposes borrowing API. |
src/ledger/LedgerTxnImpl.h |
Declares implementation API. |
src/ledger/LedgerTxn.cpp |
Extracts references while sealing. |
src/ledger/LedgerManagerImpl.h |
Accepts reference views. |
src/ledger/LedgerManagerImpl.cpp |
Uses borrowed entries during finalization. |
src/ledger/InMemorySorobanState.h |
Updates state API types. |
src/ledger/InMemorySorobanState.cpp |
Iterates referenced entries. |
src/bucket/BucketManager.h |
Updates live-batch API. |
src/bucket/BucketManager.cpp |
Forwards reference views. |
src/bucket/BucketListBase.cpp |
Updates template instantiation. |
src/bucket/LiveBucket.h |
Adds reference-based bucket APIs. |
src/bucket/LiveBucket.cpp |
Converts referenced entries into buckets. |
src/bucket/LiveBucketList.h |
Adds reference-view batch overload. |
src/bucket/LiveBucketList.cpp |
Implements batch adapters. |
src/bucket/test/BucketTestUtils.h |
Declares test adapters. |
src/bucket/test/BucketTestUtils.cpp |
Converts test vectors to references. |
src/invariant/test/BucketListIsConsistentWithDatabaseTests.cpp |
Uses borrowed transaction entries. |
src/ledger/test/LedgerTxnTests.cpp |
Updates sealing tests. |
src/test/fuzz/targets/TxFuzzTarget.cpp |
Adapts fuzz setup extraction. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Currently `getAllEntries` call seals the LTX and unnecessarily copies every entry, which adds up to a few ms if thousands of entries are involved. With this change we just return the references to all the entries. Since this call is used just once in the 'production' path, and the results are only used in a couple of read-only calls, it shouldn't be hard to maintain the lifetime correctness for this method.
dmkozh
force-pushed
the
get_all_entries_refs
branch
from
August 14, 2026 20:41
8f40d52 to
c246a5f
Compare
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.
Description
Currently
getAllEntriescall seals the LTX and unnecessarily copies every entry, which adds up to a few ms if thousands of entries are involved.With this change we just return the references to all the entries. Since this call is used just once in the 'production' path, and the results are only used in a couple of read-only calls, it shouldn't be hard to maintain the lifetime correctness for this method.
This was inspired by an AI-generated change that parallelized the copy; there is actually no need to do the copy in the first place.
Checklist
clang-formatv8.0.0 (viamake formator the Visual Studio extension)