Skip to content

Implement RNTuple redirection from FUSE to XRootD #20213

@amadio

Description

@amadio

Explain what you would like to see improved and how.

In pull request #11644 a redirection was implemented to allow ROOT to bypass FUSE access to EOS and instead open the file via XRootD, which has better performance. Unfortunately, this redirection does not work for RNTuple, as the way it opens TFiles bypasses the place where the hook was created to perform this redirection. It would be nice to create a similar redirection that worked also for RNTuple. The place this has to be done is likely around here:

std::unique_ptr<ROOT::Internal::RPageSourceFile>
ROOT::Internal::RPageSourceFile::CreateFromAnchor(const RNTuple &anchor, const ROOT::RNTupleReadOptions &options)
{
if (!anchor.fFile)
throw RException(R__FAIL("This RNTuple object was not streamed from a ROOT file (TFile or descendant)"));
std::unique_ptr<ROOT::Internal::RRawFile> rawFile;
// For local TFiles, TDavixFile, and TNetXNGFile, we want to open a new RRawFile to take advantage of the faster
// reading. We check the exact class name to avoid classes inheriting in ROOT (for example TMemFile) or in
// experiment frameworks.
std::string className = anchor.fFile->IsA()->GetName();
auto url = anchor.fFile->GetEndpointUrl();
auto protocol = std::string(url->GetProtocol());
if (className == "TFile") {
rawFile = ROOT::Internal::RRawFile::Create(url->GetFile());
} else if (className == "TDavixFile" || className == "TNetXNGFile") {
rawFile = ROOT::Internal::RRawFile::Create(url->GetUrl());
} else {
rawFile.reset(new ROOT::Internal::RRawFileTFile(anchor.fFile));
}
auto pageSource = std::make_unique<RPageSourceFile>("", std::move(rawFile), options);
pageSource->fAnchor = anchor;
// NOTE: fNTupleName gets set only upon Attach().
return pageSource;
}

ROOT version

ROOT 6.36.04

Installation method

emerge

Operating system

Gentoo Linux

Additional context

See also https://root.cern/doc/v628/release-notes.html#faster-reading-from-eos

Metadata

Metadata

Assignees

Projects

Status

No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions