From 4eb426700c6ce4b105368eba6ed6d4ec8ae09fcb Mon Sep 17 00:00:00 2001 From: Jakob Blomer Date: Mon, 28 Oct 2024 16:35:58 +0100 Subject: [PATCH 1/5] [NFC][ntuple] bump specification to v1.0.0.0 (cherry picked from commit 1640f119e092197ea6a347c5138a8f6defa496e4) --- tree/ntuple/v7/doc/BinaryFormatSpecification.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tree/ntuple/v7/doc/BinaryFormatSpecification.md b/tree/ntuple/v7/doc/BinaryFormatSpecification.md index 96565c818e9e1..28165d0e36b36 100644 --- a/tree/ntuple/v7/doc/BinaryFormatSpecification.md +++ b/tree/ntuple/v7/doc/BinaryFormatSpecification.md @@ -1,6 +1,4 @@ -# RNTuple Binary Format Specification 0.3.0.0 - -**Note:** This is work in progress. The RNTuple specification is not yet finalized. +# RNTuple Binary Format Specification 1.0.0.0 ## Versioning Notes @@ -9,7 +7,7 @@ It uses the following scheme: EPOCH.MAJOR.MINOR.PATCH _Epoch_: an increment of the epoch indicates backward-incompatible changes. The RNTuple pre-release has epoch 0. -The first public release will get epoch 1. +The first public release has epoch 1. There is currently no further epoch foreseen. _Major_: an increment of the major version indicates forward-incompatible changes. From 3d6d01681a86df133e94d294ff68154427074c80 Mon Sep 17 00:00:00 2001 From: Jakob Blomer Date: Mon, 28 Oct 2024 16:36:17 +0100 Subject: [PATCH 2/5] [ntuple] bump anchor version to v1.0.0.0 (cherry picked from commit eb6cf6a9436462f105274cbaab487803eddaed97) --- tree/ntuple/v7/inc/ROOT/RNTuple.hxx | 4 ++-- tree/ntuple/v7/src/RPageStorageDaos.cxx | 7 ------- tree/ntuple/v7/src/RPageStorageFile.cxx | 6 ------ 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/tree/ntuple/v7/inc/ROOT/RNTuple.hxx b/tree/ntuple/v7/inc/ROOT/RNTuple.hxx index bb73537acc509..638c6cd56b92f 100644 --- a/tree/ntuple/v7/inc/ROOT/RNTuple.hxx +++ b/tree/ntuple/v7/inc/ROOT/RNTuple.hxx @@ -76,8 +76,8 @@ class RNTuple final { std::uint64_t nbytesFooter, std::uint64_t lenFooter, std::uint64_t maxKeySize); public: - static constexpr std::uint16_t kVersionEpoch = 0; - static constexpr std::uint16_t kVersionMajor = 3; + static constexpr std::uint16_t kVersionEpoch = 1; + static constexpr std::uint16_t kVersionMajor = 0; static constexpr std::uint16_t kVersionMinor = 0; static constexpr std::uint16_t kVersionPatch = 0; diff --git a/tree/ntuple/v7/src/RPageStorageDaos.cxx b/tree/ntuple/v7/src/RPageStorageDaos.cxx index 10bac2f2d481f..6b75d5867b77f 100644 --- a/tree/ntuple/v7/src/RPageStorageDaos.cxx +++ b/tree/ntuple/v7/src/RPageStorageDaos.cxx @@ -172,13 +172,6 @@ struct RDaosContainerNTupleLocator { throw ROOT::Experimental::RException( R__FAIL("unsupported RNTuple epoch version: " + std::to_string(anchor.fVersionEpoch))); } - if (anchor.fVersionEpoch == 0) { - static std::once_flag once; - std::call_once(once, [&anchor]() { - R__LOG_WARNING(ROOT::Experimental::NTupleLog()) - << "Pre-release format version: RC " << anchor.fVersionMajor; - }); - } builder.SetOnDiskHeaderSize(anchor.fNBytesHeader); buffer = std::make_unique(anchor.fLenHeader); diff --git a/tree/ntuple/v7/src/RPageStorageFile.cxx b/tree/ntuple/v7/src/RPageStorageFile.cxx index 903aa1ea1c6e1..b0f311812c35b 100644 --- a/tree/ntuple/v7/src/RPageStorageFile.cxx +++ b/tree/ntuple/v7/src/RPageStorageFile.cxx @@ -322,12 +322,6 @@ void ROOT::Experimental::Internal::RPageSourceFile::LoadStructureImpl() if (fAnchor->GetVersionEpoch() != RNTuple::kVersionEpoch) { throw RException(R__FAIL("unsupported RNTuple epoch version: " + std::to_string(fAnchor->GetVersionEpoch()))); } - if (fAnchor->GetVersionEpoch() == 0) { - static std::once_flag once; - std::call_once(once, [this]() { - R__LOG_WARNING(NTupleLog()) << "Pre-release format version: RC " << fAnchor->GetVersionMajor(); - }); - } fDescriptorBuilder.SetOnDiskHeaderSize(fAnchor->GetNBytesHeader()); fDescriptorBuilder.AddToOnDiskFooterSize(fAnchor->GetNBytesFooter()); From 2fec52c99806c82b45fd53d7de64b773b7f9d024 Mon Sep 17 00:00:00 2001 From: Jakob Blomer Date: Mon, 28 Oct 2024 17:35:07 +0100 Subject: [PATCH 3/5] [ntuple] remove pre-release warnings (cherry picked from commit 763a6347535b597fccb8d121171ce748a80f5eb3) --- core/testsupport/src/TestSupport.cxx | 10 ---------- tree/ntuple/v7/src/RPageStorageFile.cxx | 5 ----- tree/ntuple/v7/test/ntuple_merger.cxx | 4 ---- tree/ntuple/v7/test/ntuple_storage_daos.cxx | 1 - tree/ntuple/v7/test/rfield_class.cxx | 2 -- 5 files changed, 22 deletions(-) diff --git a/core/testsupport/src/TestSupport.cxx b/core/testsupport/src/TestSupport.cxx index 402f57e83a820..9889a432f408f 100644 --- a/core/testsupport/src/TestSupport.cxx +++ b/core/testsupport/src/TestSupport.cxx @@ -57,16 +57,6 @@ static struct ForbidDiagnostics { } // FIXME: RNTuple warns that it's in beta stage. - if (level == kWarning - && strstr(msg, "The RNTuple file format will change. Do not store real data with this version of RNTuple!") != nullptr) { - std::cerr << "Warning in " << location << " " << msg << std::endl; - return; - } - if (level == kWarning - && strstr(msg, "Pre-release format version: RC ") != nullptr) { - std::cerr << "Warning in " << location << " " << msg << std::endl; - return; - } if (level == kWarning && strstr(msg, "Merging RNTuples is experimental") != nullptr) { std::cerr << "Warning in " << location << " " << msg << std::endl; return; diff --git a/tree/ntuple/v7/src/RPageStorageFile.cxx b/tree/ntuple/v7/src/RPageStorageFile.cxx index b0f311812c35b..b58b1461e6568 100644 --- a/tree/ntuple/v7/src/RPageStorageFile.cxx +++ b/tree/ntuple/v7/src/RPageStorageFile.cxx @@ -47,11 +47,6 @@ ROOT::Experimental::Internal::RPageSinkFile::RPageSinkFile(std::string_view ntup const RNTupleWriteOptions &options) : RPagePersistentSink(ntupleName, options) { - static std::once_flag once; - std::call_once(once, []() { - R__LOG_WARNING(NTupleLog()) << "The RNTuple file format will change. " - << "Do not store real data with this version of RNTuple!"; - }); fCompressor = std::make_unique(); EnableDefaultMetrics("RPageSinkFile"); fFeatures.fCanMergePages = true; diff --git a/tree/ntuple/v7/test/ntuple_merger.cxx b/tree/ntuple/v7/test/ntuple_merger.cxx index 7ff51a13eede5..8bae95f1fecc1 100644 --- a/tree/ntuple/v7/test/ntuple_merger.cxx +++ b/tree/ntuple/v7/test/ntuple_merger.cxx @@ -734,8 +734,6 @@ TEST(RNTupleMerger, MergeThroughTFileMergerIncremental) TEST(RNTupleMerger, MergeThroughTFileMergerKey) { ROOT::TestSupport::CheckDiagsRAII diags; - diags.optionalDiag(kWarning, "RPageSinkFile", "The RNTuple file format will change.", false); - diags.optionalDiag(kWarning, "[ROOT.NTuple]", "Pre-release format version: RC 2", false); diags.requiredDiag(kWarning, "TFileMerger", "Merging RNTuples is experimental"); diags.requiredDiag(kError, "RNTuple::Merge", "Output file already has key, but not of type RNTuple!"); diags.requiredDiag(kError, "TFileMerger", "Could NOT merge RNTuples!"); @@ -774,8 +772,6 @@ TEST(RNTupleMerger, MergeThroughTFileMergerKey) TEST(RNTupleMerger, MergeThroughTBufferMerger) { ROOT::TestSupport::CheckDiagsRAII diags; - diags.optionalDiag(kWarning, "RPageSinkFile", "The RNTuple file format will change.", false); - diags.optionalDiag(kWarning, "[ROOT.NTuple]", "Pre-release format version: RC 2", false); diags.requiredDiag(kWarning, "TFileMerger", "Merging RNTuples is experimental"); diags.requiredDiag(kWarning, "TBufferMergerFile", "not attached to the directory", false); diff --git a/tree/ntuple/v7/test/ntuple_storage_daos.cxx b/tree/ntuple/v7/test/ntuple_storage_daos.cxx index 40201fdd8842c..4a49da6699fff 100644 --- a/tree/ntuple/v7/test/ntuple_storage_daos.cxx +++ b/tree/ntuple/v7/test/ntuple_storage_daos.cxx @@ -26,7 +26,6 @@ class RPageStorageDaos : public ::testing::Test { // Initialized at the start of each test to expect diagnostic messages from TestSupport fRootDiags.optionalDiag(kWarning, "ROOT::Experimental::Internal::RPageSinkDaos::RPageSinkDaos", "The DAOS backend is experimental and still under development.", false); - fRootDiags.optionalDiag(kWarning, "[ROOT.NTuple]", "Pre-release format version: RC 3", false); fRootDiags.optionalDiag(kWarning, "in int daos_init()", "This RNTuple build uses libdaos_mock. Use only for testing!"); } diff --git a/tree/ntuple/v7/test/rfield_class.cxx b/tree/ntuple/v7/test/rfield_class.cxx index 832649111754b..532d867f686c4 100644 --- a/tree/ntuple/v7/test/rfield_class.cxx +++ b/tree/ntuple/v7/test/rfield_class.cxx @@ -233,8 +233,6 @@ TEST(RNTuple, TClassReadRules) { ROOT::TestSupport::CheckDiagsRAII diags; diags.requiredDiag(kWarning, "[ROOT.NTuple]", "ignoring I/O customization rule with non-transient member: a", false); - diags.optionalDiag(kWarning, "[ROOT.NTuple]", "The RNTuple file format will change.", false); - diags.optionalDiag(kWarning, "[ROOT.NTuple]", "Pre-release format version: RC 2", false); FileRaii fileGuard("test_ntuple_tclassrules.root"); char c[4] = {'R', 'O', 'O', 'T'}; From ff3b9a5e6a4fbc097422301586ec6093f007e39c Mon Sep 17 00:00:00 2001 From: Jakob Blomer Date: Wed, 30 Oct 2024 08:51:45 +0100 Subject: [PATCH 4/5] [ntuple] update links to input files to v1 (cherry picked from commit 9c626483e718f99aa56264b0fa9b2c7701ed1486) --- tree/ntuple/v7/test/ntuple_storage.cxx | 2 +- tutorials/v7/ntuple/ntpl004_dimuon.C | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tree/ntuple/v7/test/ntuple_storage.cxx b/tree/ntuple/v7/test/ntuple_storage.cxx index b93a23263cd40..26f229f424197 100644 --- a/tree/ntuple/v7/test/ntuple_storage.cxx +++ b/tree/ntuple/v7/test/ntuple_storage.cxx @@ -487,7 +487,7 @@ TEST(RNTuple, WritePageBudget) #ifdef R__HAS_DAVIX TEST(RNTuple, OpenHTTP) { - std::unique_ptr file(TFile::Open("http://root.cern/files/tutorials/ntpl004_dimuon_v1rc3.root")); + std::unique_ptr file(TFile::Open("http://root.cern/files/tutorials/ntpl004_dimuon_v1.root")); auto Events = std::unique_ptr(file->Get("Events")); auto model = RNTupleModel::Create(); model->MakeField>("nMuon"); diff --git a/tutorials/v7/ntuple/ntpl004_dimuon.C b/tutorials/v7/ntuple/ntpl004_dimuon.C index df526b8fddd89..a080a7b9b9828 100644 --- a/tutorials/v7/ntuple/ntpl004_dimuon.C +++ b/tutorials/v7/ntuple/ntpl004_dimuon.C @@ -37,7 +37,7 @@ // Import classes from experimental namespace for the time being using RNTupleDS = ROOT::Experimental::RNTupleDS; -constexpr char const *kNTupleFileName = "http://root.cern/files/tutorials/ntpl004_dimuon_v1rc3.root"; +constexpr char const *kNTupleFileName = "http://root.cern/files/tutorials/ntpl004_dimuon_v1.root"; using namespace ROOT::VecOps; From 8315e2c975b76b52e417eab68a1ccdc28c96463d Mon Sep 17 00:00:00 2001 From: Jakob Blomer Date: Wed, 6 Nov 2024 14:14:49 +0100 Subject: [PATCH 5/5] [ntuple] update tutorials disclaimer Reflect the fact that the on-disk format is stable. Only the API is still considered experimental. (cherry picked from commit 92e1aab5dd45642634d0c1b3adca15ccb1d50782) --- tutorials/v7/ntuple/ntpl001_staff.C | 3 +-- tutorials/v7/ntuple/ntpl002_vector.C | 3 +-- tutorials/v7/ntuple/ntpl004_dimuon.C | 3 +-- tutorials/v7/ntuple/ntpl005_introspection.C | 3 +-- tutorials/v7/ntuple/ntpl006_friends.C | 3 +-- tutorials/v7/ntuple/ntpl007_mtFill.C | 3 +-- tutorials/v7/ntuple/ntpl008_import.C | 3 +-- tutorials/v7/ntuple/ntpl009_parallelWriter.C | 3 +-- tutorials/v7/ntuple/ntpl010_skim.C | 3 +-- tutorials/v7/ntuple/ntpl011_global_temperatures.C | 4 ++-- tutorials/v7/ntuple/ntpl012_processor.C | 3 +-- tutorials/v7/ntuple/ntpl013_staged.C | 3 +-- tutorials/v7/ntuple/ntpl014_framework.C | 3 +-- 13 files changed, 14 insertions(+), 26 deletions(-) diff --git a/tutorials/v7/ntuple/ntpl001_staff.C b/tutorials/v7/ntuple/ntpl001_staff.C index 6b32cf103b0d5..fc98d78d0c848 100644 --- a/tutorials/v7/ntuple/ntpl001_staff.C +++ b/tutorials/v7/ntuple/ntpl001_staff.C @@ -12,8 +12,7 @@ /// \author The ROOT Team // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! +// Functionality and interface are still subject to changes. #include #include diff --git a/tutorials/v7/ntuple/ntpl002_vector.C b/tutorials/v7/ntuple/ntpl002_vector.C index fbfc2a332bd7c..1f1f8ae37bd95 100644 --- a/tutorials/v7/ntuple/ntpl002_vector.C +++ b/tutorials/v7/ntuple/ntpl002_vector.C @@ -10,8 +10,7 @@ /// \author The ROOT Team // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! +// Functionality and interface are still subject to changes. #include #include diff --git a/tutorials/v7/ntuple/ntpl004_dimuon.C b/tutorials/v7/ntuple/ntpl004_dimuon.C index a080a7b9b9828..cbd16354675fb 100644 --- a/tutorials/v7/ntuple/ntpl004_dimuon.C +++ b/tutorials/v7/ntuple/ntpl004_dimuon.C @@ -14,8 +14,7 @@ /// \author The ROOT Team // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! +// Functionality and interface are still subject to changes. #include #include diff --git a/tutorials/v7/ntuple/ntpl005_introspection.C b/tutorials/v7/ntuple/ntpl005_introspection.C index 6f5f698c50c84..4dc090f126751 100644 --- a/tutorials/v7/ntuple/ntpl005_introspection.C +++ b/tutorials/v7/ntuple/ntpl005_introspection.C @@ -11,8 +11,7 @@ /// \author The ROOT Team // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! +// Functionality and interface are still subject to changes. #include #include diff --git a/tutorials/v7/ntuple/ntpl006_friends.C b/tutorials/v7/ntuple/ntpl006_friends.C index d47167352a7e7..7525f8b8f85d7 100644 --- a/tutorials/v7/ntuple/ntpl006_friends.C +++ b/tutorials/v7/ntuple/ntpl006_friends.C @@ -10,8 +10,7 @@ /// \author The ROOT Team // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! +// Functionality and interface are still subject to changes. #include #include diff --git a/tutorials/v7/ntuple/ntpl007_mtFill.C b/tutorials/v7/ntuple/ntpl007_mtFill.C index b9957539e547e..5e4558b893e90 100644 --- a/tutorials/v7/ntuple/ntpl007_mtFill.C +++ b/tutorials/v7/ntuple/ntpl007_mtFill.C @@ -10,8 +10,7 @@ /// \author The ROOT Team // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! +// Functionality and interface are still subject to changes. #include #include diff --git a/tutorials/v7/ntuple/ntpl008_import.C b/tutorials/v7/ntuple/ntpl008_import.C index c5638457788ae..f03f443d29f43 100644 --- a/tutorials/v7/ntuple/ntpl008_import.C +++ b/tutorials/v7/ntuple/ntpl008_import.C @@ -10,8 +10,7 @@ /// \author The ROOT Team // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! +// Functionality and interface are still subject to changes. #include #include diff --git a/tutorials/v7/ntuple/ntpl009_parallelWriter.C b/tutorials/v7/ntuple/ntpl009_parallelWriter.C index 186fcb5096f8e..a6ba4c2801622 100644 --- a/tutorials/v7/ntuple/ntpl009_parallelWriter.C +++ b/tutorials/v7/ntuple/ntpl009_parallelWriter.C @@ -10,8 +10,7 @@ /// \author The ROOT Team // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! +// Functionality and interface are still subject to changes. #include #include diff --git a/tutorials/v7/ntuple/ntpl010_skim.C b/tutorials/v7/ntuple/ntpl010_skim.C index 7ac16c614b5fa..84ca49b0d6724 100644 --- a/tutorials/v7/ntuple/ntpl010_skim.C +++ b/tutorials/v7/ntuple/ntpl010_skim.C @@ -10,8 +10,7 @@ /// \author The ROOT Team // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! +// Functionality and interface are still subject to changes. #include #include diff --git a/tutorials/v7/ntuple/ntpl011_global_temperatures.C b/tutorials/v7/ntuple/ntpl011_global_temperatures.C index 233f3943d20d7..49f85017534f9 100644 --- a/tutorials/v7/ntuple/ntpl011_global_temperatures.C +++ b/tutorials/v7/ntuple/ntpl011_global_temperatures.C @@ -14,8 +14,8 @@ /// \author John Yoon // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! During ROOT setup, configure the following flags: +// Functionality and interface are still subject to changes. +// During ROOT setup, configure the following flags: // `-DCMAKE_CXX_STANDARD=17 -Droot7=ON -Dwebgui=ON` #include diff --git a/tutorials/v7/ntuple/ntpl012_processor.C b/tutorials/v7/ntuple/ntpl012_processor.C index 39817fc3bd5be..b7d1c934a5624 100644 --- a/tutorials/v7/ntuple/ntpl012_processor.C +++ b/tutorials/v7/ntuple/ntpl012_processor.C @@ -10,8 +10,7 @@ /// \author The ROOT Team // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! +// Functionality and interface are still subject to changes. #include #include diff --git a/tutorials/v7/ntuple/ntpl013_staged.C b/tutorials/v7/ntuple/ntpl013_staged.C index 2f3ec1cdbac6e..75d5ffcc80e8b 100644 --- a/tutorials/v7/ntuple/ntpl013_staged.C +++ b/tutorials/v7/ntuple/ntpl013_staged.C @@ -9,8 +9,7 @@ /// \author The ROOT Team // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! +// Functionality and interface are still subject to changes. #include #include diff --git a/tutorials/v7/ntuple/ntpl014_framework.C b/tutorials/v7/ntuple/ntpl014_framework.C index eda411e79e4c8..bc326ba91f120 100644 --- a/tutorials/v7/ntuple/ntpl014_framework.C +++ b/tutorials/v7/ntuple/ntpl014_framework.C @@ -25,8 +25,7 @@ /// \author The ROOT Team // NOTE: The RNTuple classes are experimental at this point. -// Functionality, interface, and data format is still subject to changes. -// Do not use for real data! +// Functionality and interface are still subject to changes. #include #include