16#ifndef ROOT7_RPageStorageFile
17#define ROOT7_RPageStorageFile
40namespace Experimental {
44class RPageAllocatorHeap;
61 std::unique_ptr<Internal::RNTupleFileWriter>
fWriter;
73 std::size_t bytesPacked);
107 static RPage NewPage(
ColumnId_t columnId,
void *mem, std::size_t elementSize, std::size_t nElements);
108 static void DeletePage(
const RPage& page);
122 static constexpr std::size_t kMaxPageSize = 1024 * 1024;
132 std::unique_ptr<ROOT::Internal::RRawFile>
fFile;
146 std::unique_ptr<RCluster> PrepareSingleCluster(
148 std::vector<ROOT::Internal::RRawFile::RIOVec> &readRequests);
152 void UnzipClusterImpl(
RCluster *cluster) final;
168 void ReleasePage(
RPage &page) final;
173 std::vector<std::unique_ptr<
RCluster>> LoadClusters(std::span<
RCluster::RKey> clusterKeys) final;
An in-memory subset of the packed and compressed pages of a cluster.
Manages pages read from a the file.
Storage provider that write ntuple pages into a file.
RNTupleLocator CommitSealedPageImpl(DescriptorId_t columnId, const RPageStorage::RSealedPage &sealedPage) final
RPage ReservePage(ColumnHandle_t columnHandle, std::size_t nElements) final
Get a new, empty page for the given column that can be filled with up to nElements.
std::uint64_t fNBytesCurrentCluster
Number of bytes committed to storage in the current cluster.
RNTupleLocator CommitPageImpl(ColumnHandle_t columnHandle, const RPage &page) final
void CreateImpl(const RNTupleModel &model) final
std::uint64_t CommitClusterImpl(NTupleSize_t nEntries) final
Returns the number of bytes written to storage (excluding metadata)
void ReleasePage(RPage &page) final
Every page store needs to be able to free pages it handed out.
std::unique_ptr< RPageAllocatorHeap > fPageAllocator
std::uint64_t fClusterMinOffset
Byte offset of the first page of the current cluster.
void CommitDatasetImpl() final
std::unique_ptr< Internal::RNTupleFileWriter > fWriter
std::uint64_t fClusterMaxOffset
Byte offset of the end of the last page of the current cluster.
RNTupleLocator WriteSealedPage(const RPageStorage::RSealedPage &sealedPage, std::size_t bytesPacked)
Internal::RNTupleSerializer::RContext fSerializationContext
Used to keep the column and field IDs issued during header serialization for the footer serialization...
Abstract interface to write data into an ntuple.
Storage provider that reads ntuple pages from a file.
Internal::RMiniFileReader fReader
Takes the fFile to read ntuple blobs from it.
std::unique_ptr< RClusterPool > fClusterPool
The cluster pool asynchronously preloads the next few clusters.
std::shared_ptr< RPagePool > fPagePool
The page pool might, at some point, be used by multiple page sources.
std::unique_ptr< ROOT::Internal::RRawFile > fFile
An RRawFile is used to request the necessary byte ranges from a local or a remote file.
std::unique_ptr< RPageAllocatorFile > fPageAllocator
Populated pages might be shared; there memory buffer is managed by the RPageAllocatorFile.
Abstract interface to read data from an ntuple.
A page is a slice of a column that is mapped into memory.
Read RNTuple data blocks from a TFile container, provided by a RRawFile.
The serialization context is used for the piecewise serialization of a descriptor.
Meta-data for a set of ntuple clusters.
Addresses a column element or field item relative to a particular cluster, instead of a global NTuple...
The on-storage meta-data of an ntuple.
The RNTupleModel encapulates the schema of an ntuple.
Common user-tunable settings for reading ntuples.
Common user-tunable settings for storing ntuples.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
std::uint64_t NTupleSize_t
Integer type long enough to hold the maximum number of entries in a column.
std::uint64_t DescriptorId_t
Distriniguishes elements of the same type within a descriptor, e.g. different fields.
std::int64_t ColumnId_t
Uniquely identifies a physical column within the scope of the current process, used to tag pages.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
The identifiers that specifies the content of a (partial) cluster.
A sealed page contains the bytes of a page as written to storage (packed & compressed).
Generic information about the physical location of data.