Abstract interface to write data into an ntuple.
The page sink takes the list of columns and afterwards a series of page commits and cluster commits. The user is responsible to commit clusters at a consistent point, i.e. when all pages corresponding to data up to the given entry number are committed.
Definition at line 129 of file RPageStorage.hxx.
Public Member Functions | |
RPageSink (const RPageSink &)=delete | |
RPageSink (RPageSink &&)=default | |
RPageSink (std::string_view ntupleName, const RNTupleWriteOptions &options) | |
virtual | ~RPageSink () |
ColumnHandle_t | AddColumn (DescriptorId_t fieldId, const RColumn &column) final |
Register a new column. | |
void | CommitCluster (NTupleSize_t nEntries) |
Finalize the current cluster and create a new one for the following data. | |
void | CommitDataset () |
Finalize the current cluster and the entrire data set. | |
void | CommitPage (ColumnHandle_t columnHandle, const RPage &page) |
Write a page to the storage. The column must have been added before. | |
void | Create (RNTupleModel &model) |
Physically creates the storage container to hold the ntuple (e.g., a keys a TFile or an S3 bucket) To do so, Create() calls CreateImpl() after updating the descriptor. | |
void | DropColumn (ColumnHandle_t) final |
Unregisters a column. | |
EPageStorageType | GetType () final |
Whether the concrete implementation is a sink or a source. | |
RPageSink & | operator= (const RPageSink &)=delete |
RPageSink & | operator= (RPageSink &&)=default |
virtual RPage | ReservePage (ColumnHandle_t columnHandle, std::size_t nElements=0)=0 |
Get a new, empty page for the given column that can be filled with up to nElements. | |
Public Member Functions inherited from ROOT::Experimental::Detail::RPageStorage | |
RPageStorage (const RPageStorage &other)=delete | |
RPageStorage (RPageStorage &&other)=default | |
RPageStorage (std::string_view name) | |
virtual | ~RPageStorage () |
virtual RNTupleMetrics & | GetMetrics () |
Returns an empty metrics. Page storage implementations usually have their own metrics. | |
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) |
Static Public Member Functions | |
static std::unique_ptr< RPageSink > | Create (std::string_view ntupleName, std::string_view location, const RNTupleWriteOptions &options=RNTupleWriteOptions()) |
Guess the concrete derived page source from the file name (location) | |
Protected Member Functions | |
virtual RClusterDescriptor::RLocator | CommitClusterImpl (NTupleSize_t nEntries)=0 |
virtual void | CommitDatasetImpl ()=0 |
virtual RClusterDescriptor::RLocator | CommitPageImpl (ColumnHandle_t columnHandle, const RPage &page)=0 |
virtual void | CreateImpl (const RNTupleModel &model)=0 |
Protected Attributes | |
RNTupleDescriptorBuilder | fDescriptorBuilder |
DescriptorId_t | fLastClusterId = 0 |
DescriptorId_t | fLastColumnId = 0 |
DescriptorId_t | fLastFieldId = 0 |
Building the ntuple descriptor while writing is done in the same way for all the storage sink implementations. | |
std::vector< RClusterDescriptor::RColumnRange > | fOpenColumnRanges |
Keeps track of the number of elements in the currently open cluster. Indexed by column id. | |
std::vector< RClusterDescriptor::RPageRange > | fOpenPageRanges |
Keeps track of the written pages in the currently open cluster. Indexed by column id. | |
RNTupleWriteOptions | fOptions |
NTupleSize_t | fPrevClusterNEntries = 0 |
Protected Attributes inherited from ROOT::Experimental::Detail::RPageStorage | |
std::string | fNTupleName |
RTaskScheduler * | fTaskScheduler = nullptr |
Additional Inherited Members | |
Public Types inherited from ROOT::Experimental::Detail::RPageStorage | |
using | ColumnHandle_t = RColumnHandle |
The column handle identifies a column with the current open page storage. | |
#include <ROOT/RPageStorage.hxx>
ROOT::Experimental::Detail::RPageSink::RPageSink | ( | std::string_view | ntupleName, |
const RNTupleWriteOptions & | options | ||
) |
Definition at line 108 of file RPageStorage.cxx.
|
delete |
|
default |
|
virtual |
Definition at line 113 of file RPageStorage.cxx.
|
finalvirtual |
Register a new column.
When reading, the column must exist in the ntuple on disk corresponding to the meta-data. When writing, every column can only be attached once.
Implements ROOT::Experimental::Detail::RPageStorage.
Definition at line 124 of file RPageStorage.cxx.
void ROOT::Experimental::Detail::RPageSink::CommitCluster | ( | NTupleSize_t | nEntries | ) |
Finalize the current cluster and create a new one for the following data.
Definition at line 188 of file RPageStorage.cxx.
|
protectedpure virtual |
Implemented in ROOT::Experimental::Detail::RPageSinkFile.
|
inline |
Finalize the current cluster and the entrire data set.
Definition at line 176 of file RPageStorage.hxx.
|
protectedpure virtual |
Implemented in ROOT::Experimental::Detail::RPageSinkFile.
void ROOT::Experimental::Detail::RPageSink::CommitPage | ( | ColumnHandle_t | columnHandle, |
const RPage & | page | ||
) |
Write a page to the storage. The column must have been added before.
Definition at line 175 of file RPageStorage.cxx.
|
protectedpure virtual |
Implemented in ROOT::Experimental::Detail::RPageSinkFile.
void ROOT::Experimental::Detail::RPageSink::Create | ( | RNTupleModel & | model | ) |
Physically creates the storage container to hold the ntuple (e.g., a keys a TFile or an S3 bucket) To do so, Create() calls CreateImpl() after updating the descriptor.
Create() associates column handles to the columns referenced by the model
Definition at line 132 of file RPageStorage.cxx.
|
static |
Guess the concrete derived page source from the file name (location)
Definition at line 117 of file RPageStorage.cxx.
|
protectedpure virtual |
Implemented in ROOT::Experimental::Detail::RPageSinkFile.
|
inlinefinalvirtual |
Unregisters a column.
A page source decreases the reference counter for the corresponding active column. For a page sink, dropping columns is currently a no-op.
Implements ROOT::Experimental::Detail::RPageStorage.
Definition at line 165 of file RPageStorage.hxx.
|
inlinefinalvirtual |
Whether the concrete implementation is a sink or a source.
Implements ROOT::Experimental::Detail::RPageStorage.
Definition at line 162 of file RPageStorage.hxx.
|
pure virtual |
Get a new, empty page for the given column that can be filled with up to nElements.
If nElements is zero, the page sink picks an appropriate size.
Implemented in ROOT::Experimental::Detail::RPageSinkFile.
|
protected |
Definition at line 143 of file RPageStorage.hxx.
|
protected |
Definition at line 137 of file RPageStorage.hxx.
|
protected |
Definition at line 136 of file RPageStorage.hxx.
|
protected |
Building the ntuple descriptor while writing is done in the same way for all the storage sink implementations.
Field, column, cluster ids and page indexes per cluster are issued sequentially starting with 0
Definition at line 135 of file RPageStorage.hxx.
|
protected |
Keeps track of the number of elements in the currently open cluster. Indexed by column id.
Definition at line 140 of file RPageStorage.hxx.
|
protected |
Keeps track of the written pages in the currently open cluster. Indexed by column id.
Definition at line 142 of file RPageStorage.hxx.
|
protected |
Definition at line 131 of file RPageStorage.hxx.
|
protected |
Definition at line 138 of file RPageStorage.hxx.