Skip to content

Commit a9cc13f

Browse files
committed
[ntuple] remove EDaosMapping
The per-cluster/per-page OID mapping option was already unused (hard-coded). Going forward, the DAOS backend should only use the one-object-per-page option.
1 parent 13a352d commit a9cc13f

2 files changed

Lines changed: 47 additions & 32 deletions

File tree

tree/ntuple/src/RPageStorageDaos.cxx

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,6 @@ using ROOT::Internal::RNTupleCompressor;
4949
using ROOT::Internal::RNTupleDecompressor;
5050
using ROOT::Internal::RNTupleSerializer;
5151

52-
/// \brief RNTuple page-DAOS mappings
53-
enum EDaosMapping {
54-
kOidPerCluster,
55-
kOidPerPage
56-
};
57-
5852
struct RDaosKey {
5953
daos_obj_id_t fOid;
6054
DistributionKey_t fDkey;
@@ -77,21 +71,11 @@ static constexpr decltype(daos_obj_id_t::lo) kOidLowPageList = -2;
7771

7872
static constexpr daos_oclass_id_t kCidMetadata = OC_SX;
7973

80-
static constexpr EDaosMapping kDefaultDaosMapping = kOidPerCluster;
81-
82-
template <EDaosMapping mapping>
83-
RDaosKey GetPageDaosKey(ROOT::Experimental::Internal::ntuple_index_t ntplId, long unsigned clusterId,
84-
long unsigned columnId, long unsigned pageCount)
74+
RDaosKey GetPageDaosKey(ROOT::Experimental::Internal::ntuple_index_t ntplId, long unsigned pageCount)
8575
{
86-
if constexpr (mapping == kOidPerCluster) {
87-
return RDaosKey{daos_obj_id_t{static_cast<decltype(daos_obj_id_t::lo)>(clusterId),
88-
static_cast<decltype(daos_obj_id_t::hi)>(ntplId)},
89-
static_cast<DistributionKey_t>(columnId), static_cast<AttributeKey_t>(pageCount)};
90-
} else if constexpr (mapping == kOidPerPage) {
91-
return RDaosKey{daos_obj_id_t{static_cast<decltype(daos_obj_id_t::lo)>(pageCount),
92-
static_cast<decltype(daos_obj_id_t::hi)>(ntplId)},
93-
kDistributionKeyDefault, kAttributeKeyDefault};
94-
}
76+
return RDaosKey{daos_obj_id_t{static_cast<decltype(daos_obj_id_t::lo)>(pageCount),
77+
static_cast<decltype(daos_obj_id_t::hi)>(ntplId)},
78+
kDistributionKeyDefault, kAttributeKeyDefault};
9579
}
9680

9781
struct RDaosURI {
@@ -308,15 +292,14 @@ ROOT::RNTupleLocator ROOT::Experimental::Internal::RPageSinkDaos::CommitPageImpl
308292
}
309293

310294
ROOT::RNTupleLocator
311-
ROOT::Experimental::Internal::RPageSinkDaos::CommitSealedPageImpl(ROOT::DescriptorId_t physicalColumnId,
295+
ROOT::Experimental::Internal::RPageSinkDaos::CommitSealedPageImpl(ROOT::DescriptorId_t,
312296
const RPageStorage::RSealedPage &sealedPage)
313297
{
314298
auto pageId = fPageId.fetch_add(1);
315-
ROOT::DescriptorId_t clusterId = fDescriptorBuilder.GetDescriptor().GetNActiveClusters();
316299

317300
{
318301
Detail::RNTupleAtomicTimer timer(fCounters->fTimeWallWrite, fCounters->fTimeCpuWrite);
319-
RDaosKey daosKey = GetPageDaosKey<kDefaultDaosMapping>(fNTupleIndex, clusterId, physicalColumnId, pageId);
302+
RDaosKey daosKey = GetPageDaosKey(fNTupleIndex, pageId);
320303
fDaosContainer->WriteSingleAkey(sealedPage.GetBuffer(), sealedPage.GetBufferSize(), daosKey.fOid, daosKey.fDkey,
321304
daosKey.fAkey);
322305
}
@@ -340,7 +323,6 @@ ROOT::Experimental::Internal::RPageSinkDaos::CommitSealedPageVImpl(std::span<RPa
340323
auto nPages = mask.size();
341324
locators.reserve(nPages);
342325

343-
ROOT::DescriptorId_t clusterId = fDescriptorBuilder.GetDescriptor().GetNActiveClusters();
344326
int64_t payloadSz = 0;
345327

346328
/// Aggregate batch of requests by object ID and distribution key, determined by the ntuple-DAOS mapping
@@ -353,8 +335,7 @@ ROOT::Experimental::Internal::RPageSinkDaos::CommitSealedPageVImpl(std::span<RPa
353335
d_iov_t pageIov;
354336
d_iov_set(&pageIov, const_cast<void *>(s.GetBuffer()), s.GetBufferSize());
355337

356-
RDaosKey daosKey =
357-
GetPageDaosKey<kDefaultDaosMapping>(fNTupleIndex, clusterId, range.fPhysicalColumnId, pageId);
338+
RDaosKey daosKey = GetPageDaosKey(fNTupleIndex, pageId);
358339
auto odPair = RDaosContainer::ROidDkeyPair{daosKey.fOid, daosKey.fDkey};
359340
auto [it, ret] = writeRequests.emplace(odPair, RDaosContainer::RWOperation(odPair));
360341
it->second.Insert(daosKey.fAkey, pageIov);
@@ -515,9 +496,12 @@ std::string ROOT::Experimental::Internal::RPageSourceDaos::GetObjectClass() cons
515496
return fDaosContainer->GetDefaultObjectClass().ToString();
516497
}
517498

518-
void ROOT::Experimental::Internal::RPageSourceDaos::LoadSealedPageImpl(const RNTupleLocator &, RSealedPage &)
499+
void ROOT::Experimental::Internal::RPageSourceDaos::LoadSealedPageImpl(const RNTupleLocator &locator,
500+
RSealedPage &sealedPage)
519501
{
520-
throw ROOT::RException(R__FAIL("temporarily not implemented"));
502+
RDaosKey daosKey = GetPageDaosKey(fNTupleIndex, locator.GetPosition<RNTupleLocatorObject64>().GetLocation());
503+
fDaosContainer->ReadSingleAkey(const_cast<void *>(sealedPage.GetBuffer()), sealedPage.GetBufferSize(), daosKey.fOid,
504+
daosKey.fDkey, daosKey.fAkey);
521505
}
522506

523507
ROOT::Internal::RPageRef ROOT::Experimental::Internal::RPageSourceDaos::LoadPageImpl(ColumnHandle_t columnHandle,
@@ -539,8 +523,8 @@ ROOT::Internal::RPageRef ROOT::Experimental::Internal::RPageSourceDaos::LoadPage
539523

540524
if (fOptions.GetClusterCache() == ROOT::RNTupleReadOptions::EClusterCache::kOff) {
541525
directReadBuffer = MakeUninitArray<unsigned char>(sealedPage.GetBufferSize());
542-
RDaosKey daosKey = GetPageDaosKey<kDefaultDaosMapping>(
543-
fNTupleIndex, clusterId, columnId, pageInfo.GetLocator().GetPosition<RNTupleLocatorObject64>().GetLocation());
526+
RDaosKey daosKey =
527+
GetPageDaosKey(fNTupleIndex, pageInfo.GetLocator().GetPosition<RNTupleLocatorObject64>().GetLocation());
544528
fDaosContainer->ReadSingleAkey(directReadBuffer.get(), sealedPage.GetBufferSize(), daosKey.fOid, daosKey.fDkey,
545529
daosKey.fAkey);
546530
fCounters->fNPageRead.Inc();
@@ -633,8 +617,7 @@ ROOT::Experimental::Internal::RPageSourceDaos::LoadClusters(std::span<RCluster::
633617
d_iov_t iov;
634618
d_iov_set(&iov, clusterBuffer, sealedLoc.fBufferSize);
635619

636-
RDaosKey daosKey = GetPageDaosKey<kDefaultDaosMapping>(fNTupleIndex, sealedLoc.fClusterId, sealedLoc.fColumnId,
637-
sealedLoc.fPageId);
620+
RDaosKey daosKey = GetPageDaosKey(fNTupleIndex, sealedLoc.fPageId);
638621
auto odPair = RDaosContainer::ROidDkeyPair{daosKey.fOid, daosKey.fDkey};
639622
auto [itReq, ret] = readRequests.emplace(odPair, RDaosContainer::RWOperation(odPair));
640623
itReq->second.Insert(daosKey.fAkey, iov);

tree/ntuple/test/ntuple_storage_daos.cxx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,38 @@ TEST_F(RPageStorageDaos, Options)
158158
EXPECT_EQ(1U, source.GetNEntries());
159159
}
160160

161+
TEST_F(RPageStorageDaos, LoadSealedPage)
162+
{
163+
std::string daosUri = RegisterLabel("ntuple-test-load-sealed-page");
164+
const std::string_view ntupleName("ntuple");
165+
166+
{
167+
auto model = RNTupleModel::Create();
168+
auto ptrPt = model->MakeField<float>("pt");
169+
170+
RNTupleWriteOptions options;
171+
options.SetCompression(0);
172+
auto writer = RNTupleWriter::Recreate(std::move(model), ntupleName, daosUri, options);
173+
*ptrPt = 1.0;
174+
writer->Fill();
175+
}
176+
177+
ROOT::Experimental::Internal::RPageSourceDaos source(ntupleName, daosUri, ROOT::RNTupleReadOptions());
178+
source.Attach();
179+
RPageStorage::RSealedPage sealedPage;
180+
source.LoadSealedPage(0, RNTupleLocalIndex{0, 0}, sealedPage);
181+
EXPECT_TRUE(sealedPage.GetHasChecksum());
182+
ASSERT_EQ(12u, sealedPage.GetBufferSize());
183+
184+
unsigned char buffer[12];
185+
sealedPage.SetBuffer(buffer);
186+
source.LoadSealedPage(0, RNTupleLocalIndex{0, 0}, sealedPage);
187+
188+
float pt = 0;
189+
memcpy(&pt, sealedPage.GetBuffer(), sizeof(pt));
190+
EXPECT_FLOAT_EQ(1.0, pt);
191+
}
192+
161193
TEST_F(RPageStorageDaos, MultipleNTuplesPerContainer)
162194
{
163195
std::string daosUri = RegisterLabel("ntuple-test-multiple");

0 commit comments

Comments
 (0)