Skip to content

Commit 38138a6

Browse files
committed
[ntuple] Rename kTypeDAOS to kTypeObject64 and kTypeS3 to kTypeMulti
1 parent a9cc13f commit 38138a6

6 files changed

Lines changed: 54 additions & 27 deletions

File tree

tree/ntuple/doc/BinaryFormatSpecification.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,15 @@ The type can take one of the following values
253253
| 0x01 | Large locator | 64bit size followed by 64bit offset |
254254

255255
Each locator type follows a given format for the payload (see Section "Well-known payload formats" below).
256-
The range 0x02 - 0x7f is reserved for future use.
256+
257+
Currently assigned non-standard locator types:
258+
259+
| Type | Meaning | Payload format |
260+
|------|------------------|-----------------------------------------------------------------|
261+
| 0x02 | Object64 locator | Object64 (64-bit object identifier) |
262+
| 0x03 | Multi locator | Object64 (bit-spliced 64-bit value encoding object ID and byte offset) |
263+
264+
The range 0x04 - 0x7f is reserved for future use.
257265

258266
_Reserved_ is an 8 bit field that can be used by the storage backend corresponding to the type
259267
in order to store additional information about the locator.
@@ -285,6 +293,25 @@ _Content size_: the number of bytes to read, i.e. the compressed size of the ref
285293

286294
_Content offset_: the 64bit byte offset of the referenced byte range counted from the start of the file.
287295

296+
- _Object64_: A 64-bit object identifier used by object-store backends (types 0x02 and 0x03)
297+
```
298+
0 1 2 3
299+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
300+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
301+
| |
302+
+ Content size (optional) +
303+
| |
304+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
305+
| |
306+
+ Object64 value +
307+
| |
308+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
309+
```
310+
311+
The Object64 value is a 64-bit unsigned integer. Its interpretation depends on the locator type:
312+
for type 0x02, it is a plain object identifier; for type 0x03, the upper 32 bits encode
313+
an object identifier and the lower 32 bits encode a byte offset within that object.
314+
288315

289316
## Envelopes
290317

tree/ntuple/inc/ROOT/RNTupleTypes.hxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,8 @@ public:
234234
// The kTypeFile locator may translate to an on-disk standard locator (type 0x00) or a large locator (type 0x01),
235235
// if the size of the referenced data block is >2GB
236236
kTypeFile = 0x00,
237-
kTypeDAOS = 0x02,
238-
kTypeS3 = 0x03,
237+
kTypeObject64 = 0x02,
238+
kTypeMulti = 0x03,
239239

240240
kLastSerializableType = 0x7f,
241241
kTypePageZero = kLastSerializableType + 1,
@@ -249,7 +249,7 @@ private:
249249
static constexpr std::uint64_t kMaskType = 0x07ULL << 61;
250250
static constexpr std::uint64_t kMaskReservedBit = 1ull << 60;
251251

252-
/// To save memory, we use the most significant bits to store the locator type (file, DAOS, zero page,
252+
/// To save memory, we use the most significant bits to store the locator type (file, Object64, zero page,
253253
/// unkown, kTestLocatorType) as well as one "reserved bit" that can be used in future locators.
254254
/// Consequently, we can only store sizes up to 60 bits (1 EB), which in practice won't be an issue.
255255
std::uint64_t fFlagsAndNBytes = 0;
@@ -276,7 +276,7 @@ public:
276276
void SetType(ELocatorType type);
277277
void SetReserved(std::uint8_t reserved);
278278

279-
/// Note that for GetPosition() / SetPosition(), the locator type must correspond (kTypeFile, kTypeDAOS).
279+
/// Note that for GetPosition() / SetPosition(), the locator type must correspond (kTypeFile, kTypeObject64).
280280

281281
template <typename T>
282282
T GetPosition() const

tree/ntuple/src/RNTupleSerialize.cxx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,19 +1086,19 @@ ROOT::Internal::RNTupleSerializer::SerializeLocator(const RNTupleLocator &locato
10861086
size += SerializeLocatorPayloadLarge(locator, payloadp);
10871087
locatorType = 0x01;
10881088
break;
1089-
case RNTupleLocator::kTypeDAOS:
1089+
case RNTupleLocator::kTypeObject64:
10901090
size += SerializeLocatorPayloadObject64(locator, payloadp);
10911091
locatorType = 0x02;
10921092
break;
1093-
case RNTupleLocator::kTypeS3:
1093+
case RNTupleLocator::kTypeMulti:
10941094
size += SerializeLocatorPayloadObject64(locator, payloadp);
10951095
locatorType = 0x03;
10961096
break;
10971097
default:
10981098
if (locator.GetType() == ROOT::Internal::kTestLocatorType) {
10991099
// For the testing locator, use the same payload format as Object64. We won't read it back anyway.
11001100
RNTupleLocator dummy;
1101-
dummy.SetType(RNTupleLocator::kTypeDAOS);
1101+
dummy.SetType(RNTupleLocator::kTypeObject64);
11021102
size += SerializeLocatorPayloadObject64(dummy, payloadp);
11031103
locatorType = 0x7e;
11041104
} else {
@@ -1139,11 +1139,11 @@ ROOT::RResult<std::uint32_t> ROOT::Internal::RNTupleSerializer::DeserializeLocat
11391139
DeserializeLocatorPayloadLarge(bytes, locator);
11401140
break;
11411141
case 0x02:
1142-
locator.SetType(RNTupleLocator::kTypeDAOS);
1142+
locator.SetType(RNTupleLocator::kTypeObject64);
11431143
DeserializeLocatorPayloadObject64(bytes, payloadSize, locator);
11441144
break;
11451145
case 0x03:
1146-
locator.SetType(RNTupleLocator::kTypeS3);
1146+
locator.SetType(RNTupleLocator::kTypeMulti);
11471147
DeserializeLocatorPayloadObject64(bytes, payloadSize, locator);
11481148
break;
11491149
default: locator.SetType(RNTupleLocator::kTypeUnknown);

tree/ntuple/src/RNTupleTypes.cxx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ ROOT::RNTupleLocator::ELocatorType ROOT::RNTupleLocator::GetType() const
4141
std::uint64_t compactType = fFlagsAndNBytes >> 61;
4242
switch (compactType) {
4343
case 0: return kTypeFile;
44-
case 1: return kTypeDAOS;
44+
case 1: return kTypeObject64;
4545
case 2: return kTypePageZero;
4646
case 3: return kTypeUnknown;
47-
case 4: return kTypeS3;
47+
case 4: return kTypeMulti;
4848
case 5: return Internal::kTestLocatorType;
4949
default: break;
5050
}
@@ -57,10 +57,10 @@ void ROOT::RNTupleLocator::SetType(ELocatorType type)
5757
std::uint64_t compactType;
5858
switch (type) {
5959
case kTypeFile: compactType = 0; break;
60-
case kTypeDAOS: compactType = 1; break;
60+
case kTypeObject64: compactType = 1; break;
6161
case kTypePageZero: compactType = 2; break;
6262
case kTypeUnknown: compactType = 3; break;
63-
case kTypeS3: compactType = 4; break;
63+
case kTypeMulti: compactType = 4; break;
6464
default:
6565
if (type == Internal::kTestLocatorType)
6666
compactType = 5;
@@ -80,7 +80,7 @@ void ROOT::RNTupleLocator::SetPosition(std::uint64_t position)
8080

8181
void ROOT::RNTupleLocator::SetPosition(RNTupleLocatorObject64 position)
8282
{
83-
if (GetType() != kTypeDAOS && GetType() != kTypeS3)
83+
if (GetType() != kTypeObject64 && GetType() != kTypeMulti)
8484
throw RException(R__FAIL("cannot set position as 64bit object for type " + std::to_string(GetType())));
8585
fPosition = position.GetLocation();
8686
}
@@ -95,7 +95,7 @@ std::uint64_t ROOT::Internal::RNTupleLocatorHelper<std::uint64_t>::Get(const RNT
9595
ROOT::RNTupleLocatorObject64
9696
ROOT::Internal::RNTupleLocatorHelper<ROOT::RNTupleLocatorObject64>::Get(const RNTupleLocator &loc)
9797
{
98-
if (loc.GetType() != ROOT::RNTupleLocator::kTypeDAOS && loc.GetType() != ROOT::RNTupleLocator::kTypeS3)
98+
if (loc.GetType() != ROOT::RNTupleLocator::kTypeObject64 && loc.GetType() != ROOT::RNTupleLocator::kTypeMulti)
9999
throw RException(R__FAIL("cannot retrieve position as 64bit object for type " + std::to_string(loc.GetType())));
100100
return RNTupleLocatorObject64{loc.fPosition};
101101
}

tree/ntuple/src/RPageStorageDaos.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ ROOT::Experimental::Internal::RPageSinkDaos::CommitSealedPageImpl(ROOT::Descript
305305
}
306306

307307
RNTupleLocator result;
308-
result.SetType(RNTupleLocator::kTypeDAOS);
308+
result.SetType(RNTupleLocator::kTypeObject64);
309309
result.SetNBytesOnStorage(sealedPage.GetDataSize());
310310
result.SetPosition(ROOT::RNTupleLocatorObject64{pageId});
311311
fCounters->fNPageCommitted.Inc();
@@ -341,7 +341,7 @@ ROOT::Experimental::Internal::RPageSinkDaos::CommitSealedPageVImpl(std::span<RPa
341341
it->second.Insert(daosKey.fAkey, pageIov);
342342

343343
RNTupleLocator locator;
344-
locator.SetType(RNTupleLocator::kTypeDAOS);
344+
locator.SetType(RNTupleLocator::kTypeObject64);
345345
locator.SetNBytesOnStorage(s.GetDataSize());
346346
locator.SetPosition(ROOT::RNTupleLocatorObject64{pageId});
347347
locators.push_back(locator);
@@ -382,7 +382,7 @@ ROOT::Experimental::Internal::RPageSinkDaos::CommitClusterGroupImpl(unsigned cha
382382
daos_obj_id_t{kOidLowPageList, static_cast<decltype(daos_obj_id_t::hi)>(fNTupleIndex)}, kDistributionKeyDefault,
383383
offsetData, kCidMetadata);
384384
RNTupleLocator result;
385-
result.SetType(RNTupleLocator::kTypeDAOS);
385+
result.SetType(RNTupleLocator::kTypeObject64);
386386
result.SetNBytesOnStorage(szPageListZip);
387387
result.SetPosition(RNTupleLocatorObject64{offsetData});
388388
fCounters->fSzWritePayload.Add(static_cast<int64_t>(szPageListZip));

tree/ntuple/test/ntuple_serialize.cxx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -377,14 +377,14 @@ TEST(RNTuple, SerializeLocator)
377377
EXPECT_EQ(1u, locator.GetPosition<std::uint64_t>());
378378
EXPECT_EQ(RNTupleLocator::kTypeFile, locator.GetType());
379379

380-
locator.SetType(RNTupleLocator::kTypeDAOS);
380+
locator.SetType(RNTupleLocator::kTypeObject64);
381381
locator.SetPosition(RNTupleLocatorObject64{1337U});
382382
locator.SetNBytesOnStorage(420420U);
383383
locator.SetReserved(0);
384384
EXPECT_EQ(16u, RNTupleSerializer::SerializeLocator(locator, buffer).Unwrap());
385385
locator = RNTupleLocator{};
386386
EXPECT_EQ(16u, RNTupleSerializer::DeserializeLocator(buffer, 16, locator).Unwrap());
387-
EXPECT_EQ(locator.GetType(), RNTupleLocator::kTypeDAOS);
387+
EXPECT_EQ(locator.GetType(), RNTupleLocator::kTypeObject64);
388388
EXPECT_EQ(locator.GetNBytesOnStorage(), 420420U);
389389
EXPECT_EQ(locator.GetReserved(), 0);
390390
EXPECT_EQ(1337U, locator.GetPosition<RNTupleLocatorObject64>().GetLocation());
@@ -394,32 +394,32 @@ TEST(RNTuple, SerializeLocator)
394394
EXPECT_EQ(20u, RNTupleSerializer::SerializeLocator(locator, buffer).Unwrap());
395395
locator = RNTupleLocator{};
396396
EXPECT_EQ(20u, RNTupleSerializer::DeserializeLocator(buffer, 20, locator).Unwrap());
397-
EXPECT_EQ(locator.GetType(), RNTupleLocator::kTypeDAOS);
397+
EXPECT_EQ(locator.GetType(), RNTupleLocator::kTypeObject64);
398398
EXPECT_EQ(locator.GetNBytesOnStorage(), static_cast<std::uint64_t>(std::numeric_limits<std::uint32_t>::max()) + 1);
399399
EXPECT_EQ(locator.GetReserved(), 1);
400400
EXPECT_EQ(1337U, locator.GetPosition<RNTupleLocatorObject64>().GetLocation());
401401

402-
// S3 locator round-trip with 32-bit nBytesOnStorage
402+
// Multi locator round-trip with 32-bit nBytesOnStorage
403403
locator = RNTupleLocator{};
404-
locator.SetType(RNTupleLocator::kTypeS3);
404+
locator.SetType(RNTupleLocator::kTypeMulti);
405405
locator.SetPosition(RNTupleLocatorObject64{42U});
406406
locator.SetNBytesOnStorage(1024U);
407407
locator.SetReserved(0);
408408
EXPECT_EQ(16u, RNTupleSerializer::SerializeLocator(locator, buffer).Unwrap());
409409
locator = RNTupleLocator{};
410410
EXPECT_EQ(16u, RNTupleSerializer::DeserializeLocator(buffer, 16, locator).Unwrap());
411-
EXPECT_EQ(locator.GetType(), RNTupleLocator::kTypeS3);
411+
EXPECT_EQ(locator.GetType(), RNTupleLocator::kTypeMulti);
412412
EXPECT_EQ(locator.GetNBytesOnStorage(), 1024U);
413413
EXPECT_EQ(locator.GetReserved(), 0);
414414
EXPECT_EQ(42U, locator.GetPosition<RNTupleLocatorObject64>().GetLocation());
415415

416-
// S3 locator round-trip with 64-bit nBytesOnStorage and reserved bit
416+
// Multi locator round-trip with 64-bit nBytesOnStorage and reserved bit
417417
locator.SetNBytesOnStorage(static_cast<std::uint64_t>(std::numeric_limits<std::uint32_t>::max()) + 1);
418418
locator.SetReserved(1);
419419
EXPECT_EQ(20u, RNTupleSerializer::SerializeLocator(locator, buffer).Unwrap());
420420
locator = RNTupleLocator{};
421421
EXPECT_EQ(20u, RNTupleSerializer::DeserializeLocator(buffer, 20, locator).Unwrap());
422-
EXPECT_EQ(locator.GetType(), RNTupleLocator::kTypeS3);
422+
EXPECT_EQ(locator.GetType(), RNTupleLocator::kTypeMulti);
423423
EXPECT_EQ(locator.GetNBytesOnStorage(), static_cast<std::uint64_t>(std::numeric_limits<std::uint32_t>::max()) + 1);
424424
EXPECT_EQ(locator.GetReserved(), 1);
425425
EXPECT_EQ(42U, locator.GetPosition<RNTupleLocatorObject64>().GetLocation());

0 commit comments

Comments
 (0)