Storage provider that reads ntuple pages from a DAOS container.
Definition at line 206 of file RPageStorageDaos.hxx.
Classes | |
struct | RClusterInfo |
Summarizes cluster-level information that are necessary to populate a certain page. More... | |
Public Member Functions | |
RPageSourceDaos (std::string_view ntupleName, std::string_view uri, const RNTupleReadOptions &options) | |
~RPageSourceDaos () override | |
std::unique_ptr< RPageSource > | Clone () const final |
The cloned page source creates a new connection to the pool/container. | |
std::string | GetObjectClass () const |
Return the object class used for user data OIDs in this ntuple. | |
std::vector< std::unique_ptr< RCluster > > | LoadClusters (std::span< RCluster::RKey > clusterKeys) final |
Populates all the pages of the given cluster ids and columns; it is possible that some columns do not contain any pages. | |
void | LoadSealedPage (DescriptorId_t physicalColumnId, const RClusterIndex &clusterIndex, RSealedPage &sealedPage) final |
Read the packed and compressed bytes of a page into the memory buffer provided by selaedPage. | |
RPage | PopulatePage (ColumnHandle_t columnHandle, const RClusterIndex &clusterIndex) final |
Another version of PopulatePage that allows to specify cluster-relative indexes. | |
RPage | PopulatePage (ColumnHandle_t columnHandle, NTupleSize_t globalIndex) final |
Allocates and fills a page that contains the index-th element. | |
void | ReleasePage (RPage &page) final |
Every page store needs to be able to free pages it handed out. | |
![]() | |
RPageSource (const RPageSource &)=delete | |
RPageSource (RPageSource &&)=delete | |
RPageSource (std::string_view ntupleName, const RNTupleReadOptions &fOptions) | |
~RPageSource () override | |
ColumnHandle_t | AddColumn (DescriptorId_t fieldId, const RColumn &column) override |
Register a new column. | |
void | Attach () |
Open the physical storage container for the tree. | |
virtual std::unique_ptr< RPageSource > | Clone () const =0 |
Open the same storage multiple time, e.g. for reading in multiple threads. | |
void | DropColumn (ColumnHandle_t columnHandle) override |
Unregisters a column. | |
ColumnId_t | GetColumnId (ColumnHandle_t columnHandle) |
RNTupleMetrics & | GetMetrics () override |
Returns the default metrics object. Subclasses might alternatively override the method and provide their own metrics object. | |
NTupleSize_t | GetNElements (ColumnHandle_t columnHandle) |
NTupleSize_t | GetNEntries () |
const RNTupleReadOptions & | GetReadOptions () const |
const RSharedDescriptorGuard | GetSharedDescriptorGuard () const |
Takes the read lock for the descriptor. | |
EPageStorageType | GetType () final |
Whether the concrete implementation is a sink or a source. | |
virtual std::vector< std::unique_ptr< RCluster > > | LoadClusters (std::span< RCluster::RKey > clusterKeys)=0 |
Populates all the pages of the given cluster ids and columns; it is possible that some columns do not contain any pages. | |
virtual void | LoadSealedPage (DescriptorId_t physicalColumnId, const RClusterIndex &clusterIndex, RSealedPage &sealedPage)=0 |
Read the packed and compressed bytes of a page into the memory buffer provided by selaedPage. | |
RPageSource & | operator= (const RPageSource &)=delete |
RPageSource & | operator= (RPageSource &&)=delete |
virtual RPage | PopulatePage (ColumnHandle_t columnHandle, const RClusterIndex &clusterIndex)=0 |
Another version of PopulatePage that allows to specify cluster-relative indexes. | |
virtual RPage | PopulatePage (ColumnHandle_t columnHandle, NTupleSize_t globalIndex)=0 |
Allocates and fills a page that contains the index-th element. | |
void | UnzipCluster (RCluster *cluster) |
Parallel decompression and unpacking of the pages in the given cluster. | |
![]() | |
RPageStorage (const RPageStorage &other)=delete | |
RPageStorage (RPageStorage &&other)=default | |
RPageStorage (std::string_view name) | |
virtual | ~RPageStorage () |
virtual ColumnHandle_t | AddColumn (DescriptorId_t fieldId, const RColumn &column)=0 |
Register a new column. | |
virtual void | DropColumn (ColumnHandle_t columnHandle)=0 |
Unregisters a column. | |
virtual RNTupleMetrics & | GetMetrics ()=0 |
Page storage implementations have their own metrics. | |
const std::string & | GetNTupleName () const |
Returns the NTuple name. | |
virtual EPageStorageType | GetType ()=0 |
Whether the concrete implementation is a sink or a source. | |
RPageStorage & | operator= (const RPageStorage &other)=delete |
RPageStorage & | operator= (RPageStorage &&other)=default |
virtual void | ReleasePage (RPage &page)=0 |
Every page store needs to be able to free pages it handed out. | |
void | SetTaskScheduler (RTaskScheduler *taskScheduler) |
Protected Member Functions | |
RNTupleDescriptor | AttachImpl () final |
void | UnzipClusterImpl (RCluster *cluster) final |
![]() | |
virtual RNTupleDescriptor | AttachImpl ()=0 |
void | EnableDefaultMetrics (const std::string &prefix) |
Enables the default set of metrics provided by RPageSource. | |
RExclDescriptorGuard | GetExclDescriptorGuard () |
Note that the underlying lock is not recursive. See GetSharedDescriptorGuard() for further information. | |
std::unique_ptr< unsigned char[]> | UnsealPage (const RSealedPage &sealedPage, const RColumnElementBase &element) |
Helper for unstreaming a page. | |
virtual void | UnzipClusterImpl (RCluster *) |
![]() | |
void | WaitForAllTasks () |
Private Member Functions | |
RPage | PopulatePageFromCluster (ColumnHandle_t columnHandle, const RClusterInfo &clusterInfo, ClusterSize_t::ValueType idxInCluster) |
Private Attributes | |
std::unique_ptr< RClusterPool > | fClusterPool |
The cluster pool asynchronously preloads the next few clusters. | |
RCluster * | fCurrentCluster = nullptr |
The last cluster from which a page got populated. Points into fClusterPool->fPool. | |
std::unique_ptr< RDaosContainer > | fDaosContainer |
A container that stores object data (header/footer, pages, etc.) | |
RNTupleDescriptorBuilder | fDescriptorBuilder |
ntuple_index_t | fNTupleIndex {0} |
std::unique_ptr< RPageAllocatorDaos > | fPageAllocator |
Populated pages might be shared; the memory buffer is managed by the RPageAllocatorDaos. | |
std::shared_ptr< RPagePool > | fPagePool |
The page pool might, at some point, be used by multiple page sources. | |
std::string | fURI |
A URI to a DAOS pool of the form 'daos://pool-label/container-label'. | |
Additional Inherited Members | |
![]() | |
using | ColumnHandle_t = RColumnHandle |
The column handle identifies a column with the current open page storage. | |
using | SealedPageSequence_t = std::deque< RSealedPage > |
![]() | |
static std::unique_ptr< RPageSource > | Create (std::string_view ntupleName, std::string_view location, const RNTupleReadOptions &options=RNTupleReadOptions()) |
Guess the concrete derived page source from the file name (location) | |
![]() | |
RActivePhysicalColumns | fActivePhysicalColumns |
The active columns are implicitly defined by the model fields or views. | |
std::unique_ptr< RCounters > | fCounters |
std::unique_ptr< RNTupleDecompressor > | fDecompressor |
Helper to unzip pages and header/footer; comprises a 16MB (kMAXZIPBUF) unzip buffer. | |
RNTupleMetrics | fMetrics |
Wraps the I/O counters and is observed by the RNTupleReader metrics. | |
RNTupleReadOptions | fOptions |
![]() | |
std::string | fNTupleName |
RTaskScheduler * | fTaskScheduler = nullptr |
#include <ROOT/RPageStorageDaos.hxx>
ROOT::Experimental::Detail::RPageSourceDaos::RPageSourceDaos | ( | std::string_view | ntupleName, |
std::string_view | uri, | ||
const RNTupleReadOptions & | options | ||
) |
Definition at line 475 of file RPageStorageDaos.cxx.
|
overridedefault |
|
finalprotectedvirtual |
Implements ROOT::Experimental::Detail::RPageSource.
Definition at line 491 of file RPageStorageDaos.cxx.
|
finalvirtual |
The cloned page source creates a new connection to the pool/container.
The meta-data (header and footer) is reread and parsed by the clone.
Implements ROOT::Experimental::Detail::RPageSource.
Definition at line 681 of file RPageStorageDaos.cxx.
std::string ROOT::Experimental::Detail::RPageSourceDaos::GetObjectClass | ( | ) | const |
Return the object class used for user data OIDs in this ntuple.
Definition at line 531 of file RPageStorageDaos.cxx.
|
finalvirtual |
Populates all the pages of the given cluster ids and columns; it is possible that some columns do not contain any pages.
The page source may load more columns than the minimal necessary set from columns
. To indicate which columns have been loaded, LoadClusters() must mark them with SetColumnAvailable(). That includes the ones from the columns
that don't have pages; otherwise subsequent requests for the cluster would assume an incomplete cluster and trigger loading again. LoadClusters() is typically called from the I/O thread of a cluster pool, i.e. the method runs concurrently to other methods of the page source.
Implements ROOT::Experimental::Detail::RPageSource.
Definition at line 688 of file RPageStorageDaos.cxx.
|
finalvirtual |
Read the packed and compressed bytes of a page into the memory buffer provided by selaedPage.
The sealed page can be used subsequently in a call to RPageSink::CommitSealedPage. The fSize and fNElements member of the sealedPage parameters are always set. If sealedPage.fBuffer is nullptr, no data will be copied but the returned size information can be used by the caller to allocate a large enough buffer and call LoadSealedPage again.
Implements ROOT::Experimental::Detail::RPageSource.
Definition at line 536 of file RPageStorageDaos.cxx.
|
finalvirtual |
Another version of PopulatePage that allows to specify cluster-relative indexes.
Implements ROOT::Experimental::Detail::RPageSource.
Definition at line 653 of file RPageStorageDaos.cxx.
|
finalvirtual |
Allocates and fills a page that contains the index-th element.
Implements ROOT::Experimental::Detail::RPageSource.
Definition at line 629 of file RPageStorageDaos.cxx.
|
private |
Definition at line 566 of file RPageStorageDaos.cxx.
|
finalvirtual |
Every page store needs to be able to free pages it handed out.
But Sinks and sources have different means of allocating pages.
Implements ROOT::Experimental::Detail::RPageStorage.
Definition at line 676 of file RPageStorageDaos.cxx.
|
finalprotectedvirtual |
Reimplemented from ROOT::Experimental::Detail::RPageSource.
Definition at line 803 of file RPageStorageDaos.cxx.
|
private |
The cluster pool asynchronously preloads the next few clusters.
Definition at line 232 of file RPageStorageDaos.hxx.
|
private |
The last cluster from which a page got populated. Points into fClusterPool->fPool.
Definition at line 226 of file RPageStorageDaos.hxx.
|
private |
A container that stores object data (header/footer, pages, etc.)
Definition at line 228 of file RPageStorageDaos.hxx.
|
private |
Definition at line 234 of file RPageStorageDaos.hxx.
|
private |
Definition at line 218 of file RPageStorageDaos.hxx.
|
private |
Populated pages might be shared; the memory buffer is managed by the RPageAllocatorDaos.
Definition at line 221 of file RPageStorageDaos.hxx.
|
private |
The page pool might, at some point, be used by multiple page sources.
Definition at line 224 of file RPageStorageDaos.hxx.
|
private |
A URI to a DAOS pool of the form 'daos://pool-label/container-label'.
Definition at line 230 of file RPageStorageDaos.hxx.