Skip to content

[ntuple] Streamline RPageSource class hierarchy#22681

Open
jblomer wants to merge 5 commits into
root-project:masterfrom
jblomer:ntuple-cgcb
Open

[ntuple] Streamline RPageSource class hierarchy#22681
jblomer wants to merge 5 commits into
root-project:masterfrom
jblomer:ntuple-cgcb

Conversation

@jblomer

@jblomer jblomer commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Further streamlining of the page source in preparation of huge file support.

  • Properly implement LoadStructureImpl() for the DAOS page source
  • Add a new RPageSource::LoadPageListImpl() abstract method so that concrete page sources don't need to populate the cluster group descriptor themselves but they only need to know how to load a page list.

@jblomer jblomer requested review from enirolf, hahnjo and pcanal June 22, 2026 13:29
@jblomer jblomer self-assigned this Jun 22, 2026
@jblomer jblomer requested a review from silverweed as a code owner June 22, 2026 13:29
@jblomer jblomer force-pushed the ntuple-cgcb branch 2 times, most recently from b0570d5 to b651605 Compare June 22, 2026 18:19
jblomer added 5 commits June 22, 2026 20:20
Make use of the dedicated callback that loads the compressed header and
footer, instead of leaving it squashed in AttachImpl().
A new callback that loads a particular page list from the backend
storage. As a result, the logic to load the page lists and to
populate the cluster group descriptor has been moved from the
concrete page source implementations to the RPageSource base class.

Moving on, this will allow to decouple loading the page lists from
attaching the storage.
@github-actions

Copy link
Copy Markdown

Test Results

    22 files      22 suites   3d 14h 19m 16s ⏱️
 3 872 tests  3 871 ✅ 0 💤 1 ❌
77 370 runs  77 369 ✅ 0 💤 1 ❌

For more details on these failures, see this check.

Results for commit b651605.

virtual void UnzipClusterImpl(ROOT::Internal::RCluster *cluster);
// Loads a page list into the provided buffer. The buffer parameter needs to point to a memory region large enough
// to hold the compressed page list.
virtual void LoadPageListImpl(const RNTupleLocator &locator, void *buffer) = 0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we also pass the buffer size, to validate the requirement stated by the comment?
Also, since the buffer will be treated as a blob of bytes both by the caller and the callee, maybe we can mark it as a std::byte * for convenience...(similarly to the Serializer functions that use unsigned char; in fact, even though byte is better in principle we might still want to use unsigned char for consistency)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants