-
Notifications
You must be signed in to change notification settings - Fork 1.4k
[ntuple] Add some internal utilities to the storage layer #19904
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Test Results 22 files 22 suites 3d 19h 53m 2s ⏱️ For more details on these failures, see this check. Results for commit 722b86a. ♻️ This comment has been updated with latest results. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we really need GetUnderlyingDirectory()
? Since the attribute anchor is a hidden key, we can just store it in the ROOT file's root directory.
Not sure...the reason I need it in the full PR is to create the AttrSetWriter which then uses it create a PageSinkFile using it. Even if we wanted to store the key in the root directory we'd still need the underlying TFile for it... |
3675b97
to
8cc71a8
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some comments inline. I'm not actually sure it helps to review internal methods and additions to the RPageStorage
abstraction layer without seeing the immediate need. Maybe one has to look at the final PR all the time, but that is quite some mental overhead. It feels like we are now vertically building the implementation, instead of in logical chunks...
f5e1b8c
to
79698ad
Compare
I split it like this because this way it could be reviewed in parallel with the other PR rather than being blocked by it, but if you prefer I can also close this, wait for the other to be merged and then put this change together with the parts that use it (probably doing one PR for attribute reading, one for attribute writing and one for merging) |
virtual std::vector<std::unique_ptr<ROOT::Internal::RCluster>> | ||
LoadClusters(std::span<ROOT::Internal::RCluster::RKey> clusterKeys) = 0; | ||
|
||
virtual RMiniFileReader *GetUnderlyingReader() { return nullptr; } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need that? Aren't we using the reader only within ReadAttrSet
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is also used by the RNTupleMerger, since we need to fetch the Anchor when opening the attribute sets during merging (see https://github.com/root-project/root/pull/19153/files#diff-3fe10805b28dcc612504e58728446c32a3f70f4e42b5a6d62e46d07facd46766R127)
Will be used by the RNTupleAttributes.
Also update the outdated comment about GetNEntries()
79698ad
to
722b86a
Compare
Add a bunch of functions to poke through the abstraction of the storage classes (specifically, to get the underlying TDirectory and RMiniFileReader). These functionalities (all Internal) will be needed by the RNTuple Attributes (see the full PR for details)
Checklist: