Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion DataFormats/TestObjects/interface/SchemaEvolutionTestObjects.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#ifndef DataFormats_TestObjects_SchemaEvolutionTestObjects_h
#define DataFormats_TestObjects_SchemaEvolutionTestObjects_h

#include <memory>
#include <vector>

// Don't delete the following comment line.
Expand All @@ -23,7 +24,6 @@

#include <array>
#include <list>
#include <memory>
#include <unordered_map>

#endif
Expand Down Expand Up @@ -208,6 +208,37 @@ namespace edmtest {
#endif
};

class SchemaEvolutionAutoPtrToUniquePtr {
public:
SchemaEvolutionAutoPtrToUniquePtr(SchemaEvolutionAutoPtrToUniquePtr&&) = delete;
SchemaEvolutionAutoPtrToUniquePtr& operator=(SchemaEvolutionAutoPtrToUniquePtr const&) = delete;
SchemaEvolutionAutoPtrToUniquePtr& operator=(SchemaEvolutionAutoPtrToUniquePtr&&) = delete;

SchemaEvolutionAutoPtrToUniquePtr() : a_(0), b_(0) {}
~SchemaEvolutionAutoPtrToUniquePtr() {}
#if defined DataFormats_TestObjects_USE_OLD
SchemaEvolutionAutoPtrToUniquePtr(SchemaEvolutionAutoPtrToUniquePtr const& other)
: a_(other.a_), b_(other.b_), contained_(new SchemaEvolutionContained(other.contained_->c_)) {}

SchemaEvolutionAutoPtrToUniquePtr(int a, int b, int c)
: a_(a), b_(b), contained_(new SchemaEvolutionContained(c)) {}
int a_;
int b_;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
std::auto_ptr<SchemaEvolutionContained> contained_;
#pragma GCC diagnostic pop
#else
SchemaEvolutionAutoPtrToUniquePtr(int a, int b, int c)
: a_(a), b_(b), contained_(std::make_unique<SchemaEvolutionContained>(c)) {}
SchemaEvolutionAutoPtrToUniquePtr(SchemaEvolutionAutoPtrToUniquePtr const& other)
: a_(other.a_), b_(other.b_), contained_(std::make_unique<SchemaEvolutionContained>(other.contained_->c_)) {}
int a_;
int b_;
std::unique_ptr<SchemaEvolutionContained> contained_;
#endif
};

class SchemaEvolutionCArrayToStdArray {
public:
#if defined DataFormats_TestObjects_USE_OLD
Expand Down Expand Up @@ -285,6 +316,7 @@ namespace edmtest {
SchemaEvolutionAddBase const&,
SchemaEvolutionPointerToMember const&,
SchemaEvolutionPointerToUniquePtr const&,
SchemaEvolutionAutoPtrToUniquePtr const&,
SchemaEvolutionCArrayToStdArray const&,
// SchemaEvolutionCArrayToStdVector const&,
SchemaEvolutionVectorToList const&,
Expand All @@ -305,6 +337,7 @@ namespace edmtest {
SchemaEvolutionAddBase addBase_;
SchemaEvolutionPointerToMember pointerToMember_;
SchemaEvolutionPointerToUniquePtr pointerToUniquePtr_;
SchemaEvolutionAutoPtrToUniquePtr autoPtrToUniquePtr_;
SchemaEvolutionCArrayToStdArray cArrayToStdArray_;
// This one is commented out because it fails reading an old format
// input file with an executable built with the modified format.
Expand Down
2 changes: 2 additions & 0 deletions DataFormats/TestObjects/src/SchemaEvolutionTestObjects.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ namespace edmtest {
SchemaEvolutionAddBase const& addBase,
SchemaEvolutionPointerToMember const& pointerToMember,
SchemaEvolutionPointerToUniquePtr const& pointerToUniquePtr,
SchemaEvolutionAutoPtrToUniquePtr const& autoPtrToUniquePtr,
SchemaEvolutionCArrayToStdArray const& cArrayToStdArray,
// SchemaEvolutionCArrayToStdVector const& cArrayToStdVector,
SchemaEvolutionVectorToList const& vectorToList,
Expand All @@ -27,6 +28,7 @@ namespace edmtest {
addBase_(addBase),
pointerToMember_(pointerToMember),
pointerToUniquePtr_(pointerToUniquePtr),
autoPtrToUniquePtr_(autoPtrToUniquePtr),
cArrayToStdArray_(cArrayToStdArray),
// cArrayToStdVector_(cArrayToStdVector),
vectorToList_(vectorToList),
Expand Down
20 changes: 20 additions & 0 deletions DataFormats/TestObjects/src/classes.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,23 @@

#include <list>
#include <algorithm>

// related to SchemaEvolutionTestObjects.h
#ifndef DataFormats_TestObjects_USE_OLD

// The following is from an example by Jakob Blomer from the ROOT team
namespace edmtest::compat {
template <typename T>
struct deprecated_auto_ptr {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Dr15Jones We should think if we want to have this class defined in some more central place so that it could be used for both in this test and in SimDataFormats/GeneratorProducts, or just copy the code there in different namespace.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After a quick chat we're leaning towards copying the class to SimDataFormats/GeneratorProducts.

// We use compat_auto_ptr only to assign the wrapped raw pointer
// to a unique pointer in an I/O customization rule.
// Therefore, we don't delete on destruction (because ownership
// gets transferred to the unique pointer).

// ~deprecated_auto_ptr() { delete _M_ptr; }

T *_M_ptr = nullptr;
};
} // namespace edmtest::compat

#endif
65 changes: 48 additions & 17 deletions DataFormats/TestObjects/src/classes_def.xml
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,20 @@ exception when running testMissingDictionaryChecking_cfg.py.
</class>
<class name="edm::Wrapper<edmtest::VectorVectorTop>"/>

<!-- about VectorVectorElement versioning below

* v3 is with DataFormats_TestObjects_USE_OLD defined in
SchemaEvolutionTestObjects.h, but without
SchemaEvolutionAutoPtrToUniquePtr member. It was used for the 13_0_0
test file that did not include ROOT StreamerInfo in some cases.
* v4 is with DataFormats_TestObjects_USE_OLD defined in
SchemaEvolutionTestObjects.h and with
SchemaEvolutionAutoPtrToUniquePtr member
* v5 is with DataFormats_TestObjects_USE_OLD undefined in
SchemaEvolutionTestObjects.h and with
SchemaEvolutionAutoPtrToUniquePtr member
-->

<!--
<class name="edmtest::SchemaEvolutionChangeOrder" ClassVersion="3">
<version ClassVersion="3" checksum="3343384061"/>
Expand Down Expand Up @@ -329,6 +343,10 @@ exception when running testMissingDictionaryChecking_cfg.py.
<class name="edmtest::SchemaEvolutionPointerToUniquePtr" ClassVersion="3">
<version ClassVersion="3" checksum="1545257825"/>
</class>
<class name="std::auto_ptr<edmtest::SchemaEvolutionContained>"/>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If std::auto_ptr actually goes away for some compiler, what will happen for this line?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line is in a commented out section that is needed only to create the input files of the test. If auto_ptr really goes away, we wouldn't be able to create/update the input files in those future CMSSW releases (or, we'd have to use old-enough CMSSW to create/update those files).

More generally the structure of these schema evolution tests made updating them to e.g. include new data types to be tested a bit complicated, so for RNTuple we might want to re-think about the test structure.

<class name="edmtest::SchemaEvolutionAutoPtrToUniquePtr" ClassVersion="3">
<version ClassVersion="3" checksum="1427898213"/>
</class>
<class name="edmtest::SchemaEvolutionCArrayToStdArray" ClassVersion="3">
<version ClassVersion="3" checksum="2848265407"/>
</class>
Expand All @@ -341,7 +359,8 @@ exception when running testMissingDictionaryChecking_cfg.py.
<class name="edmtest::SchemaEvolutionMapToUnorderedMap" ClassVersion="3">
<version ClassVersion="3" checksum="4049010227"/>
</class>
<class name="edmtest::VectorVectorElement" ClassVersion="3">
<class name="edmtest::VectorVectorElement" ClassVersion="4">
<version ClassVersion="4" checksum="1382603781"/>
<version ClassVersion="3" checksum="62209940"/>
</class>
<class name="edmtest::VectorVectorElementNonSplit" ClassVersion="3">
Expand All @@ -350,70 +369,82 @@ exception when running testMissingDictionaryChecking_cfg.py.
-->

<class name="edmtest::SchemaEvolutionChangeOrder" ClassVersion="4">
<version ClassVersion="3" checksum="3343384061"/>
<version ClassVersion="4" checksum="3343403663"/>
<version ClassVersion="3" checksum="3343384061"/>
</class>
<class name="edmtest::SchemaEvolutionAddMember" ClassVersion="4">
<version ClassVersion="3" checksum="1610659294"/>
<version ClassVersion="4" checksum="548196481"/>
<version ClassVersion="3" checksum="1610659294"/>
</class>
<class name="edmtest::SchemaEvolutionRemoveMember" ClassVersion="4">
<version ClassVersion="3" checksum="868607665"/>
<version ClassVersion="4" checksum="2937585049"/>
<version ClassVersion="3" checksum="868607665"/>
</class>
<class name="edmtest::SchemaEvolutionMoveToBase" ClassVersion="4">
<version ClassVersion="3" checksum="765817207"/>
<version ClassVersion="4" checksum="288892591"/>
<version ClassVersion="3" checksum="765817207"/>
</class>
<class name="edmtest::SchemaEvolutionBase" ClassVersion="4">
<version ClassVersion="3" checksum="3149060785"/>
<version ClassVersion="4" checksum="717584440"/>
<version ClassVersion="3" checksum="3149060785"/>
</class>
<class name="edmtest::SchemaEvolutionChangeType" ClassVersion="4">
<version ClassVersion="3" checksum="1127956593"/>
<version ClassVersion="4" checksum="231165691"/>
<version ClassVersion="3" checksum="1127956593"/>
</class>
<class name="edmtest::SchemaEvolutionBaseA" ClassVersion="3">
<version ClassVersion="3" checksum="857239365"/>
</class>
<class name="edmtest::SchemaEvolutionAddBase" ClassVersion="4">
<version ClassVersion="3" checksum="2069239453"/>
<version ClassVersion="4" checksum="1505648056"/>
<version ClassVersion="3" checksum="2069239453"/>
</class>
<class name="edmtest::SchemaEvolutionContained" ClassVersion="3">
<version ClassVersion="3" checksum="726645586"/>
</class>
<class name="edmtest::SchemaEvolutionPointerToMember" ClassVersion="4">
<version ClassVersion="3" checksum="113169654"/>
<version ClassVersion="4" checksum="37723204"/>
<version ClassVersion="3" checksum="113169654"/>
</class>
<class name="edmtest::SchemaEvolutionPointerToUniquePtr" ClassVersion="4">
<version ClassVersion="3" checksum="1545257825"/>
<version ClassVersion="4" checksum="3437951039"/>
<version ClassVersion="3" checksum="1545257825"/>
</class>
<class name="edmtest::compat::deprecated_auto_ptr<edmtest::SchemaEvolutionContained>"/>
<class name="edmtest::SchemaEvolutionAutoPtrToUniquePtr" ClassVersion="4">
<version ClassVersion="4" checksum="2908944573"/>
<version ClassVersion="3" checksum="1427898213"/>
</class>
<ioread sourceClass="std::auto_ptr<edmtest::SchemaEvolutionContained>" targetClass="edmtest::compat::deprecated_auto_ptr<edmtest::SchemaEvolutionContained>"/>
<ioread sourceClass="edmtest::SchemaEvolutionAutoPtrToUniquePtr" version="[3]" targetClass="edmtest::SchemaEvolutionAutoPtrToUniquePtr" source="edmtest::compat::deprecated_auto_ptr<edmtest::SchemaEvolutionContained> contained_" target="contained_">
<![CDATA[
contained_.release(); contained_.reset(onfile.contained_._M_ptr);
]]>
</ioread>
<class name="edmtest::SchemaEvolutionCArrayToStdArray" ClassVersion="4">
<version ClassVersion="3" checksum="2848265407"/>
<version ClassVersion="4" checksum="66373354"/>
<version ClassVersion="3" checksum="2848265407"/>
</class>
<class name="edmtest::SchemaEvolutionCArrayToStdVector" ClassVersion="4">
<version ClassVersion="3" checksum="3834066865"/>
<version ClassVersion="4" checksum="1835343327"/>
<version ClassVersion="3" checksum="3834066865"/>
</class>
<class name="edmtest::SchemaEvolutionVectorToList" ClassVersion="4">
<version ClassVersion="3" checksum="354293136"/>
<version ClassVersion="4" checksum="3857065429"/>
<version ClassVersion="3" checksum="354293136"/>
</class>
<class name="edmtest::SchemaEvolutionMapToUnorderedMap" ClassVersion="4">
<version ClassVersion="3" checksum="4049010227"/>
<version ClassVersion="4" checksum="3999644942"/>
<version ClassVersion="3" checksum="4049010227"/>
</class>
<class name="edmtest::VectorVectorElement" ClassVersion="4">
<class name="edmtest::VectorVectorElement" ClassVersion="5">
<version ClassVersion="5" checksum="4210670970"/>
<version ClassVersion="4" checksum="1382603781"/>
<version ClassVersion="3" checksum="62209940"/>
<version ClassVersion="4" checksum="4237216747"/>
</class>
<class name="edmtest::VectorVectorElementNonSplit" ClassVersion="4">
<version ClassVersion="3" checksum="15875282"/>
<version ClassVersion="4" checksum="3857705420"/>
<version ClassVersion="3" checksum="15875282"/>
</class>

</lcgdict>
5 changes: 3 additions & 2 deletions FWCore/Services/plugins/InitRootHandlers.cc
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ namespace {
}

//Contents of a message which should be reported as an INFO not a ERROR
constexpr std::array<const char* const, 11> in_message{
constexpr std::array<const char* const, 12> in_message{
{"no dictionary for class",
"already in TClassTable",
"matrix not positive definite",
Expand All @@ -175,7 +175,8 @@ namespace {
"nbinsy is <=0 - set to nbinsy = 1",
"oneapi::tbb::global_control is limiting",
"ufirst < fXmin, fXmin is used",
"ulast > fXmax, fXmax is used"}};
"ulast > fXmax, fXmax is used",
"Inspection for auto_ptr"}};

//Location generating messages which should be reported as an INFO not a ERROR
constexpr std::array<const char* const, 7> in_location{{"Fit",
Expand Down
18 changes: 17 additions & 1 deletion IOPool/Input/test/SchemaEvolutionTestRead.cc
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,14 @@ namespace edmtest {
const std::vector<int> expectedVectorVectorIntegralValues_;
const edm::EDGetTokenT<VectorVectorTop> vectorVectorToken_;
const edm::EDGetTokenT<VectorVectorTopNonSplit> vectorVectorNonSplitToken_;
const bool testAutoPtrToUniquePtr_;
};

SchemaEvolutionTestRead::SchemaEvolutionTestRead(edm::ParameterSet const& iPSet)
: expectedVectorVectorIntegralValues_(iPSet.getParameter<std::vector<int>>("expectedVectorVectorIntegralValues")),
vectorVectorToken_(consumes(iPSet.getParameter<edm::InputTag>("vectorVectorTag"))),
vectorVectorNonSplitToken_(consumes(iPSet.getParameter<edm::InputTag>("vectorVectorTag"))) {
vectorVectorNonSplitToken_(consumes(iPSet.getParameter<edm::InputTag>("vectorVectorTag"))),
testAutoPtrToUniquePtr_(iPSet.getParameter<bool>("testAutoPtrToUniquePtr")) {
if (expectedVectorVectorIntegralValues_.size() != 15) {
throwWithMessageFromConstructor("test configuration error, expectedVectorVectorIntegralValues must have size 15");
}
Expand All @@ -68,6 +70,7 @@ namespace edmtest {
edm::ParameterSetDescription desc;
desc.add<std::vector<int>>("expectedVectorVectorIntegralValues");
desc.add<edm::InputTag>("vectorVectorTag");
desc.add<bool>("testAutoPtrToUniquePtr", false);
descriptions.addDefault(desc);
}

Expand Down Expand Up @@ -170,6 +173,19 @@ namespace edmtest {
throwWithMessage("analyzeVectorVector, pointerToUniquePtr c_ does not contain expected value");
}

if (testAutoPtrToUniquePtr_) {
SchemaEvolutionAutoPtrToUniquePtr const& autoPtrToUniquePtr = element.autoPtrToUniquePtr_;
if (autoPtrToUniquePtr.a_ != expectedVectorVectorIntegralValues_[8] + iOffset + j * 23) {
throwWithMessage("analyzeVectorVector, autoPtrToUniquePtr a_ does not contain expected value");
}
if (autoPtrToUniquePtr.b_ != expectedVectorVectorIntegralValues_[8] + iOffset + j * 123) {
throwWithMessage("analyzeVectorVector, autoPtrToUniquePtr b_ does not contain expected value");
}
if (autoPtrToUniquePtr.contained_->c_ != expectedVectorVectorIntegralValues_[8] + iOffset + j * 1023) {
throwWithMessage("analyzeVectorVector, autoPtrToUniquePtr c_ does not contain expected value");
}
}

SchemaEvolutionCArrayToStdArray const& cArrayToStdArray = element.cArrayToStdArray_;
if (cArrayToStdArray.a_[0] != expectedVectorVectorIntegralValues_[9] + iOffset + j * 19) {
throwWithMessage("analyzeVectorVector, cArrayToStdArray a_[0] does not contain expected value");
Expand Down
4 changes: 4 additions & 0 deletions IOPool/Input/test/SchemaEvolutionTestWrite.cc
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ namespace edmtest {
SchemaEvolutionPointerToUniquePtr pointerToUniquePtr(testIntegralValues_[8] + iOffset + j * 18,
testIntegralValues_[8] + iOffset + j * 108,
testIntegralValues_[8] + iOffset + j * 1008);
SchemaEvolutionAutoPtrToUniquePtr autoPtrToUniquePtr(testIntegralValues_[8] + iOffset + j * 23,
testIntegralValues_[8] + iOffset + j * 123,
testIntegralValues_[8] + iOffset + j * 1023);
SchemaEvolutionCArrayToStdArray cArrayToStdArray(testIntegralValues_[9] + iOffset + j * 19,
testIntegralValues_[9] + iOffset + j * 109,
testIntegralValues_[9] + iOffset + j * 1009);
Expand All @@ -128,6 +131,7 @@ namespace edmtest {
addBase,
pointerToMember,
pointerToUniquePtr,
autoPtrToUniquePtr,
cArrayToStdArray,
// cArrayToStdVector,
vectorToList,
Expand Down
4 changes: 3 additions & 1 deletion IOPool/Input/test/SchemaEvolution_test_read_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
parser.add_argument("--inputFile", type=str, help="Input file name (default: SchemaEvolutionTest.root)", default="SchemaEvolutionTest.root")
parser.add_argument("--outputFileName", type=str, help="Output file name (default: SchemaEvolutionTest2.root)", default="SchemaEvolutionTest2.root")
parser.add_argument("--enableStreamerInfosFix", action="store_true", help="Enable service that fixes missing streamer infos")
parser.add_argument("--testAutoPtrToUniquePtr", action="store_true", help="Test AutoPtrToUniquePtr evolution")
args = parser.parse_args()

process = cms.Process("READ")
Expand Down Expand Up @@ -82,7 +83,8 @@
expectedVectorVectorIntegralValues = cms.vint32(
11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111, 121, 131, 141, 151
),
vectorVectorTag = cms.InputTag("writeSchemaEvolutionTest", "", "PROD")
vectorVectorTag = cms.InputTag("writeSchemaEvolutionTest", "", "PROD"),
testAutoPtrToUniquePtr = cms.bool(args.testAutoPtrToUniquePtr)
)

process.out = cms.OutputModule("PoolOutputModule",
Expand Down
8 changes: 4 additions & 4 deletions IOPool/Input/test/testSchemaEvolution.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ LOCAL_TEST_DIR=${SCRAM_TEST_PATH}
# in the later cmsRun processes, they are more likely to be
# caused by a failure in ROOT schema evolution.
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_create_test_file_cfg.py --splitLevel 0 || die 'Failure using SchemaEvolution_create_test_file_cfg.py splitLevel 0' $?
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile SchemaEvolutionTest_splitLevel0.root || die 'Failure using SchemaEvolution_create_test_file_cfg.py splitLevel 0' $?
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile SchemaEvolutionTest_splitLevel0.root --testAutoPtrToUniquePtr || die 'Failure using SchemaEvolution_create_test_file_cfg.py splitLevel 0' $?

cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_create_test_file_cfg.py --splitLevel 99 || die 'Failure using SchemaEvolution_create_test_file_cfg.py splitLevel 99' $?
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile SchemaEvolutionTest_splitLevel99.root || die 'Failure using SchemaEvolution_create_test_file_cfg.py splitLevel 99' $?
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile SchemaEvolutionTest_splitLevel99.root --testAutoPtrToUniquePtr || die 'Failure using SchemaEvolution_create_test_file_cfg.py splitLevel 99' $?


# For each StreamerInfo in the input file, test for existence of StreamerInfo for
Expand Down Expand Up @@ -94,11 +94,11 @@ done

file=SchemaEvolutionTestOLD15_1_0_pre5_splitLevel0.root
inputfile=$(edmFileInPath IOPool/Input/data/$file) || die "Failure edmFileInPath IOPool/Input/data/$file" $?
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile "$inputfile" || die "Failed to read old file $file" $?
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile "$inputfile" --testAutoPtrToUniquePtr || die "Failed to read old file $file" $?

file=SchemaEvolutionTestOLD15_1_0_pre5_splitLevel99.root
inputfile=$(edmFileInPath IOPool/Input/data/$file) || die "Failure edmFileInPath IOPool/Input/data/$file" $?
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile "$inputfile" || die "Failed to read old file $file" $?
cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile "$inputfile" --testAutoPtrToUniquePtr || die "Failed to read old file $file" $?

file=SchemaEvolutionTestOLD13_0_0.root
inputfile=$(edmFileInPath IOPool/Input/data/$file) || die "Failure edmFileInPath IOPool/Input/data/$file" $?
Expand Down