Skip to content

Commit 6104c66

Browse files
authored
use correct check data origin as inputs of aggregators (#2180)
* Revert "Revert "[QC-1031]: changed origin for QC Check (#2170)" (#2181)" This reverts commit fcbef09. * Use correct check data origin as inputs of aggregators Also: - respect the ID/name distinction for check/aggregator data source specs - fix the relevant tests, which had aggregators referring to non-existent checks, which is now required
1 parent 0020756 commit 6104c66

9 files changed

+79
-19
lines changed

Framework/include/QualityControl/Check.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,18 @@ class Check
7979
// TODO: Unique Input string
8080
static o2::header::DataDescription createCheckDataDescription(const std::string& checkName);
8181

82+
/// \brief creates DataOrigin for Check task in form CDET
83+
///
84+
/// \param detector Name of the detector to be used. If longer than 3B it will be truncated
85+
static o2::header::DataOrigin createCheckDataOrigin(const std::string& detector);
86+
8287
UpdatePolicyType getUpdatePolicyType() const;
8388
std::vector<std::string> getObjectsNames() const;
8489
bool getAllObjectsOption() const;
8590

8691
// todo: probably make CheckFactory
8792
static CheckConfig extractConfig(const core::CommonSpec&, const CheckSpec&);
88-
static framework::OutputSpec createOutputSpec(const std::string& checkName);
93+
static framework::OutputSpec createOutputSpec(const std::string& detector, const std::string& checkName);
8994

9095
private:
9196
void beautify(std::map<std::string, std::shared_ptr<core::MonitorObject>>& moMap, const core::Quality& quality);

Framework/src/Check.cxx

+11-3
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@ o2::header::DataDescription Check::createCheckDataDescription(const std::string&
5353
return quality_control::core::createDataDescription(checkName, Check::descriptionHashLength);
5454
}
5555

56+
o2::header::DataOrigin Check::createCheckDataOrigin(const std::string& detector)
57+
{
58+
using Origin = o2::header::DataOrigin;
59+
Origin header;
60+
header.runtimeInit(std::string{ "C" }.append(detector.substr(0, Origin::size - 1)).c_str());
61+
return header;
62+
}
63+
5664
/// Members
5765
Check::Check(CheckConfig config)
5866
: mCheckConfig(std::move(config))
@@ -260,14 +268,14 @@ CheckConfig Check::extractConfig(const CommonSpec& commonSpec, const CheckSpec&
260268
checkAllObjects,
261269
allowBeautify,
262270
std::move(inputs),
263-
createOutputSpec(checkSpec.checkName),
271+
createOutputSpec(checkSpec.detectorName, checkSpec.checkName),
264272
commonSpec.conditionDBUrl
265273
};
266274
}
267275

268-
framework::OutputSpec Check::createOutputSpec(const std::string& checkName)
276+
framework::OutputSpec Check::createOutputSpec(const std::string& detector, const std::string& checkName)
269277
{
270-
return { "QC", createCheckDataDescription(checkName), 0, framework::Lifetime::Sporadic };
278+
return { createCheckDataOrigin(detector), createCheckDataDescription(checkName), 0, framework::Lifetime::Sporadic };
271279
}
272280

273281
void Check::startOfActivity(const core::Activity& activity)

Framework/src/InfrastructureSpecReader.cxx

+7-4
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,9 @@ DataSourceSpec InfrastructureSpecReader::readSpecEntry<DataSourceSpec>(const std
262262
}
263263
case DataSourceType::Check: {
264264
dss.id = dataSourceTree.get<std::string>("name");
265-
dss.name = dss.id;
266-
dss.inputs = { { dss.name, "QC", Check::createCheckDataDescription(dss.name), 0, Lifetime::Sporadic } };
265+
dss.name = wholeTree.get<std::string>("qc.checks." + dss.id + ".checkName", dss.id);
266+
auto detectorName = wholeTree.get<std::string>("qc.checks." + dss.id + ".detectorName");
267+
dss.inputs = { { dss.name, Check::createCheckDataOrigin(detectorName), Check::createCheckDataDescription(dss.name), 0, Lifetime::Sporadic } };
267268
if (dataSourceTree.count("QOs") > 0) {
268269
for (const auto& moName : dataSourceTree.get_child("QOs")) {
269270
dss.subInputs.push_back(moName.second.get_value<std::string>());
@@ -272,8 +273,10 @@ DataSourceSpec InfrastructureSpecReader::readSpecEntry<DataSourceSpec>(const std
272273
break;
273274
}
274275
case DataSourceType::Aggregator: {
275-
dss.name = dataSourceTree.get<std::string>("name");
276-
dss.inputs = { { dss.name, "QC", AggregatorRunner::createAggregatorRunnerDataDescription(dss.name), 0, Lifetime::Sporadic } };
276+
dss.id = dataSourceTree.get<std::string>("name");
277+
dss.name = wholeTree.get<std::string>("qc.aggregators." + dss.id + ".checkName", dss.id);
278+
auto detectorName = wholeTree.get<std::string>("qc.aggregators." + dss.id + ".detectorName");
279+
dss.inputs = { { dss.name, Check::createCheckDataOrigin(detectorName), AggregatorRunner::createAggregatorRunnerDataDescription(dss.name), 0, Lifetime::Sporadic } };
277280
if (dataSourceTree.count("QOs") > 0) {
278281
for (const auto& moName : dataSourceTree.get_child("QOs")) {
279282
dss.subInputs.push_back(moName.second.get_value<std::string>());

Framework/src/runBasic.cxx

+2-2
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ WorkflowSpec defineDataProcessing(const ConfigContext& config)
121121
DataProcessorSpec printer{
122122
.name = "printer",
123123
.inputs = Inputs{
124-
{ "checked-mo", "QC", Check::createCheckDataDescription(getFirstCheckName(qcConfigurationSource)), 0, Lifetime::Sporadic } },
124+
{ "checked-mo", "CTST", Check::createCheckDataDescription(getFirstCheckName(qcConfigurationSource)), 0, Lifetime::Sporadic } },
125125
.algorithm = adaptFromTask<o2::quality_control::example::ExampleQualityPrinterSpec>(),
126126
.labels = { { "resilient" } }
127127
};
@@ -130,7 +130,7 @@ WorkflowSpec defineDataProcessing(const ConfigContext& config)
130130
DataProcessorSpec printer{
131131
.name = "printer",
132132
.inputs = Inputs{
133-
{ "checked-mo", "QC", TaskRunner::createTaskDataDescription(getFirstTaskName(qcConfigurationSource)), 0, Lifetime::Sporadic } },
133+
{ "checked-mo", "CTST", TaskRunner::createTaskDataDescription(getFirstTaskName(qcConfigurationSource)), 0, Lifetime::Sporadic } },
134134
.algorithm = adaptFromTask<o2::quality_control::example::ExamplePrinterSpec>(),
135135
.labels = { { "resilient" } }
136136

Framework/test/testAggregatorRunner.cxx

+4-4
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ TEST_CASE("test_aggregator_onAnyNonZero")
108108
QualityObjectsType result = aggregator->aggregate(qoMap);
109109
CHECK(getQualityForCheck(result, "MyAggregatorB/newQuality") == Quality::Good);
110110

111-
qoMap["dataSizeCheck2/someNumbersTask/example"] = make_shared<QualityObject>(Quality::Bad, "dataSizeCheck2/someNumbersTask/example");
111+
qoMap["dataSizeCheck2/skeletonTask/example"] = make_shared<QualityObject>(Quality::Bad, "dataSizeCheck2/skeletonTask/example");
112112
result = aggregator->aggregate(qoMap);
113113
CHECK(getQualityForCheck(result, "MyAggregatorB/newQuality") == Quality::Bad);
114114
}
@@ -139,7 +139,7 @@ TEST_CASE("test_aggregator_quality_filter")
139139
CHECK(getQualityForCheck(result, "MyAggregatorB/newQuality") == Quality::Medium);
140140

141141
// Add someNumbersCheck/example=bad return bad
142-
qoMap["dataSizeCheck2/someNumbersTask/example"] = make_shared<QualityObject>(Quality::Bad, "dataSizeCheck2/someNumbersTask/example");
142+
qoMap["dataSizeCheck2/skeletonTask/example"] = make_shared<QualityObject>(Quality::Bad, "dataSizeCheck2/skeletonTask/example");
143143
result = aggregator->aggregate(qoMap);
144144
CHECK(getQualityForCheck(result, "MyAggregatorB/newQuality") == Quality::Bad);
145145

@@ -148,8 +148,8 @@ TEST_CASE("test_aggregator_quality_filter")
148148
qoMap.clear();
149149
qoMap["dataSizeCheck1/q1"] = make_shared<QualityObject>(Quality::Good, "dataSizeCheck1/q1");
150150
qoMap["dataSizeCheck1/q2"] = make_shared<QualityObject>(Quality::Medium, "dataSizeCheck1/q2");
151-
qoMap["dataSizeCheck2/someNumbersTask/example"] = make_shared<QualityObject>(Quality::Medium, "dataSizeCheck2/someNumbersTask/example");
152-
qoMap["dataSizeCheck2/someNumbersTask/example2"] = make_shared<QualityObject>(Quality::Bad, "dataSizeCheck2/someNumbersTask/example2");
151+
qoMap["dataSizeCheck2/skeletonTask/example"] = make_shared<QualityObject>(Quality::Medium, "dataSizeCheck2/skeletonTask/example");
152+
qoMap["dataSizeCheck2/skeletonTask/example2"] = make_shared<QualityObject>(Quality::Bad, "dataSizeCheck2/skeletonTask/example2");
153153
result = aggregator->aggregate(qoMap);
154154
CHECK(getQualityForCheck(result, "MyAggregatorB/newQuality") == Quality::Medium);
155155
}

Framework/test/testCheck.cxx

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ BOOST_AUTO_TEST_CASE(test_check_specs)
6666
BOOST_REQUIRE_EQUAL(check.getInputs().size(), 1);
6767
BOOST_CHECK_EQUAL(check.getInputs()[0], (InputSpec{ { "mo" }, "QTST", "skeletonTask", 0, Lifetime::Sporadic }));
6868

69-
BOOST_CHECK_EQUAL(check.getOutputSpec(), (OutputSpec{ "QC", "singleCheck", 0, Lifetime::Sporadic }));
69+
BOOST_CHECK_EQUAL(check.getOutputSpec(), (OutputSpec{ "CTST", "singleCheck", 0, Lifetime::Sporadic }));
7070
}
7171

7272
BOOST_AUTO_TEST_CASE(test_check_long_description)
@@ -78,7 +78,7 @@ BOOST_AUTO_TEST_CASE(test_check_long_description)
7878
BOOST_REQUIRE_EQUAL(check.getInputs().size(), 1);
7979
BOOST_CHECK_EQUAL(check.getInputs()[0], (InputSpec{ { "mo" }, "QTST", "skeletonTask", 0, Lifetime::Sporadic }));
8080

81-
BOOST_CHECK_EQUAL(check.getOutputSpec(), (OutputSpec{ "QC", "singleCheckL9fdb", 0, Lifetime::Sporadic }));
81+
BOOST_CHECK_EQUAL(check.getOutputSpec(), (OutputSpec{ "CTST", "singleCheckL9fdb", 0, Lifetime::Sporadic }));
8282
}
8383

8484
std::shared_ptr<MonitorObject> dummyMO(const std::string& objName)

Framework/test/testCheckWorkflow.cxx

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ class Receiver : public framework::Task
110110
{
111111
Inputs inputs;
112112
for (auto& checkName : mNames) {
113-
inputs.push_back({ checkName, "QC", Check::createCheckDataDescription(checkName), Lifetime::Sporadic });
113+
inputs.push_back({ checkName, "CTST", Check::createCheckDataDescription(checkName), Lifetime::Sporadic });
114114
}
115115
return inputs;
116116
}

Framework/test/testSharedConfig.json

+45-1
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
"active": "true",
123123
"className": "o2::quality_control_modules::skeleton::SkeletonCheck",
124124
"moduleName": "QcSkeleton",
125+
"detectorName": "TST",
125126
"dataSource": [{
126127
"type": "Task",
127128
"name": "skeletonTask",
@@ -134,6 +135,7 @@
134135
"active": "true",
135136
"className": "o2::quality_control_modules::skeleton::SkeletonCheck",
136137
"moduleName": "QcSkeleton",
138+
"detectorName": "TST",
137139
"dataSource": [{
138140
"type": "Task",
139141
"name": "skeletonTask",
@@ -145,6 +147,7 @@
145147
"active": "true",
146148
"className": "o2::quality_control_modules::skeleton::SkeletonCheck",
147149
"moduleName": "QcSkeleton",
150+
"detectorName": "TST",
148151
"policy": "OnAll",
149152
"dataSource": [{
150153
"type": "Task",
@@ -159,6 +162,7 @@
159162
"active": "true",
160163
"className": "o2::quality_control_modules::skeleton::SkeletonCheck",
161164
"moduleName": "QcSkeleton",
165+
"detectorName": "TST",
162166
"policy": "OnAny",
163167
"dataSource": [{
164168
"type": "Task",
@@ -173,6 +177,7 @@
173177
"active": "true",
174178
"className": "o2::quality_control_modules::skeleton::SkeletonCheck",
175179
"moduleName": "QcSkeleton",
180+
"detectorName": "TST",
176181
"policy": "OnAnyNonZero",
177182
"dataSource": [{
178183
"type": "Task",
@@ -187,6 +192,7 @@
187192
"active": "true",
188193
"className": "o2::quality_control_modules::skeleton::SkeletonCheck",
189194
"moduleName": "QcSkeleton",
195+
"detectorName": "TST",
190196
"dataSource": [{
191197
"type": "Task",
192198
"name": "xyzTaskID"
@@ -196,6 +202,7 @@
196202
"active": "true",
197203
"className": "o2::quality_control_modules::skeleton::SkeletonCheck",
198204
"moduleName": "QcSkeleton",
205+
"detectorName": "TST",
199206
"policy": "OnEachSeparately",
200207
"dataSource": [{
201208
"type": "Task",
@@ -210,6 +217,7 @@
210217
"active": "true",
211218
"className": "o2::quality_control_modules::skeleton::SkeletonCheck",
212219
"moduleName": "QcSkeleton",
220+
"detectorName": "TST",
213221
"policy": "OnAny",
214222
"dataSource": [{
215223
"type": "PostProcessing",
@@ -218,6 +226,42 @@
218226
"example"
219227
]
220228
}]
229+
},
230+
"dataSizeCheck": {
231+
"active": "true",
232+
"className": "o2::quality_control_modules::skeleton::SkeletonCheck",
233+
"moduleName": "QcSkeleton",
234+
"policy": "OnAny",
235+
"detectorName": "TST",
236+
"dataSource": [{
237+
"type": "Task",
238+
"name": "skeletonTask",
239+
"MOs": ["example"]
240+
}]
241+
},
242+
"dataSizeCheck2": {
243+
"active": "true",
244+
"className": "o2::quality_control_modules::skeleton::SkeletonCheck",
245+
"moduleName": "QcSkeleton",
246+
"policy": "OnAny",
247+
"detectorName": "TST",
248+
"dataSource": [{
249+
"type": "Task",
250+
"name": "skeletonTask",
251+
"MOs": ["example"]
252+
}]
253+
},
254+
"someNumbersCheck": {
255+
"active": "true",
256+
"className": "o2::quality_control_modules::skeleton::SkeletonCheck",
257+
"moduleName": "QcSkeleton",
258+
"policy": "OnAny",
259+
"detectorName": "TST",
260+
"dataSource": [{
261+
"type": "Task",
262+
"name": "skeletonTask",
263+
"MOs": ["example"]
264+
}]
221265
}
222266
},
223267
"postprocessing": {
@@ -299,7 +343,7 @@
299343
}, {
300344
"type": "Check", "": "this one is using onEachSeparately and thus it sends under a full path",
301345
"name": "dataSizeCheck2",
302-
"QOs": ["someNumbersTask/example"], "": "also possible to ignore it altogether, meaning we take all objects"
346+
"QOs": ["skeletonTask/example"], "": "also possible to ignore it altogether, meaning we take all objects"
303347
}]
304348
}
305349
}

Framework/test/testWorkflow.cxx

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ WorkflowSpec defineDataProcessing(ConfigContext const&)
7474
DataProcessorSpec receiver{
7575
"receiver",
7676
Inputs{
77-
{ "checked-mo", "QC", Check::createCheckDataDescription(getFirstCheckName(qcConfigurationSource)), 0, Lifetime::Sporadic } },
77+
{ "checked-mo", "CTST", Check::createCheckDataDescription(getFirstCheckName(qcConfigurationSource)), 0, Lifetime::Sporadic } },
7878
Outputs{},
7979
AlgorithmSpec{
8080
[](ProcessingContext& pctx) {

0 commit comments

Comments
 (0)