Skip to content

Commit 5c616a0

Browse files
ChristianTackeGSIkarabowi
authored andcommitted
fix: Handle FairRuntimeDb::initContainer failures
FairRuntimeDb::initContainer can sometimes fail and will return `false` in that case. This was not handled very well in our code. Add a `[[nodiscard]]` so that the return value can not be ignored without a warning. Fix all callers, so that they at least emit an error log entry.
1 parent 5e885fd commit 5c616a0

File tree

7 files changed

+44
-23
lines changed

7 files changed

+44
-23
lines changed

fairroot/base/sim/FairMCApplication.cxx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1218,7 +1218,9 @@ void FairMCApplication::SetParTask()
12181218
module->SetParContainers();
12191219
}
12201220
FairRuntimeDb* fRTdb = fRun->GetRuntimeDb();
1221-
fRTdb->initContainers(fRun->GetRunId());
1221+
if (!fRTdb->initContainers(fRun->GetRunId())) {
1222+
LOG(error) << "FairMCApplication::SetParTask: rtdb->initContainers failed";
1223+
}
12221224
}
12231225
//_____________________________________________________________________________
12241226
void FairMCApplication::InitTasks()

fairroot/base/steer/FairRunAna.cxx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ void FairRunAna::SetGeomFile(const char* GeoFileName)
130130

131131
void FairRunAna::Init()
132132
{
133-
134133
if (fIsInitialized) {
135134
LOG(fatal) << "Error Init is already called before!";
136135
exit(-1);
@@ -220,11 +219,10 @@ void FairRunAna::Init()
220219

221220
// Init the containers in Tasks
222221
LOG(info) << "--- Initialize with RunId --- " << fRunId;
223-
fRtdb->initContainers(fRunId);
222+
if (!fRtdb->initContainers(fRunId)) {
223+
LOG(error) << "FairRunAna::Init: fRtdb->initContainers failed";
224+
}
224225
fTask->SetParTask();
225-
226-
// fRtdb->initContainers( fRunId );
227-
228226
} else { // end----- if(fMixedInput)
229227
LOG(info) << "Initializing without input file or Mixed input";
230228
FairEventHeader* evt = GetEventHeader();
@@ -234,15 +232,19 @@ void FairRunAna::Init()
234232
fRtdb->addRun(fRunId);
235233
evt->SetRunId(fRunId);
236234
fTask->SetParTask();
237-
fRtdb->initContainers(fRunId);
235+
if (!fRtdb->initContainers(fRunId)) {
236+
LOG(error) << "FairRunAna::Init: fRtdb->initContainers failed";
237+
}
238238
}
239239

240240
FairFieldFactory* fieldfact = FairFieldFactory::Instance();
241241
if (fieldfact) {
242242
fieldfact->SetParm();
243243
}
244244

245-
fRtdb->initContainers(fRunId);
245+
if (!fRtdb->initContainers(fRunId)) {
246+
LOG(error) << "FairRunAna::Init: fRtdb->initContainers failed";
247+
}
246248
fFileHeader->SetRunId(fRunId);
247249

248250
// create a field
@@ -617,7 +619,9 @@ void FairRunAna::TerminateRun()
617619
void FairRunAna::Reinit(UInt_t runId)
618620
{
619621
// reinit procedure
620-
fRtdb->initContainers(runId);
622+
if (!fRtdb->initContainers(runId)) {
623+
LOG(error) << "FairRunAna::Reinit: fRtdb->initContainers failed";
624+
}
621625
}
622626
//_____________________________________________________________________________
623627

fairroot/base/steer/FairRunAnaProof.cxx

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,10 @@ void FairRunAnaProof::Init()
186186

187187
// Init the containers in Tasks
188188
LOG(info) << "--- Initialize with RunId --- " << fRunId;
189-
fRtdb->initContainers(fRunId);
189+
if (!fRtdb->initContainers(fRunId)) {
190+
LOG(error) << "FairRunAnaProof::Init: fRtdb->initContainers failed";
191+
}
190192
fTask->SetParTask();
191-
192-
// fRtdb->initContainers( fRunId );
193-
194193
} else { // end----- if(fMixedInput)
195194
LOG(info) << "Initializing without input file or Mixed input";
196195
FairEventHeader* evt = GetEventHeader();
@@ -200,14 +199,18 @@ void FairRunAnaProof::Init()
200199
fRtdb->addRun(fRunId);
201200
evt->SetRunId(fRunId);
202201
fTask->SetParTask();
203-
fRtdb->initContainers(fRunId);
202+
if (!fRtdb->initContainers(fRunId)) {
203+
LOG(error) << "FairRunAnaProof::Init: fRtdb->initContainers failed";
204+
}
204205
}
205206
FairFieldFactory* fieldfact = FairFieldFactory::Instance();
206207
if (fieldfact) {
207208
fieldfact->SetParm();
208209
}
209210

210-
fRtdb->initContainers(fRunId);
211+
if (!fRtdb->initContainers(fRunId)) {
212+
LOG(error) << "FairRunAnaProof::Init: fRtdb->initContainers failed";
213+
}
211214
fFileHeader->SetRunId(fRunId);
212215

213216
// create a field
@@ -251,7 +254,9 @@ void FairRunAnaProof::InitContainers()
251254

252255
// Init the containers in Tasks
253256
LOG(info) << "--- Initialize with RunId --- " << fRunId;
254-
fRtdb->initContainers(fRunId);
257+
if (!fRtdb->initContainers(fRunId)) {
258+
LOG(error) << "FairRunAnaProof::Init: fRtdb->initContainers failed";
259+
}
255260
}
256261
}
257262

fairroot/online/steer/FairRunOnline.cxx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,9 @@ void FairRunOnline::Init()
183183

184184
GetSource()->SetParUnpackers();
185185
fTask->SetParTask();
186-
fRtdb->initContainers(fRunId);
186+
if (!fRtdb->initContainers(fRunId)) {
187+
LOG(error) << "FairRunOnline::Init: fRtdb->initContainers failed";
188+
}
187189

188190
// --- Get event header from Run
189191
if (!fEvtHeader) {
@@ -349,7 +351,9 @@ void FairRunOnline::RegisterHttpCommand(TString name, TString command)
349351
void FairRunOnline::Reinit(UInt_t runId)
350352
{
351353
// reinit procedure
352-
fRtdb->initContainers(runId);
354+
if (!fRtdb->initContainers(runId)) {
355+
LOG(error) << "FairRunOnline::Reinit: fRtdb->initContainers failed";
356+
}
353357
}
354358

355359
void FairRunOnline::SetContainerStatic(Bool_t tempBool)

fairroot/parbase/FairRuntimeDb.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ Bool_t FairRuntimeDb::writeContainer(FairParSet* cont, FairRtdbRun* run, FairRtd
454454
return kTRUE;
455455
}
456456

457-
Bool_t FairRuntimeDb::initContainers(UInt_t runId, Int_t refId, const Text_t* fileName)
457+
bool FairRuntimeDb::initContainers(UInt_t runId, Int_t refId, const char* fileName)
458458
{
459459
// loops over the list of containers and calls the init() function of each
460460
// container if it is not static

fairroot/parbase/FairRuntimeDb.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class FairRuntimeDb : public TObject
6767
FairParSet* findContainer(const char*);
6868
void removeContainer(const char*);
6969
void removeAllContainers();
70-
Bool_t initContainers(UInt_t runId, Int_t refId = -1, const Text_t* fileName = "");
70+
[[nodiscard]] bool initContainers(UInt_t runId, Int_t refId = -1, const char* fileName = "");
7171
void setContainersStatic(Bool_t f = kTRUE);
7272
Bool_t writeContainers(void);
7373
Bool_t writeContainer(FairParSet*, FairRtdbRun*, FairRtdbRun* refRun = 0);

fairroot/parmq/ParameterMQServer.cxx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/********************************************************************************
2-
* Copyright (C) 2014-2022 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
2+
* Copyright (C) 2014-2023 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
33
* *
44
* This software is distributed under the terms of the *
55
* GNU Lesser General Public Licence (LGPL) version 3, *
@@ -134,7 +134,10 @@ bool ParameterMQServer::ProcessRequest(fair::mq::MessagePtr& req, int /*index*/)
134134
parameterName = newParameterName;
135135
par = static_cast<FairParGenericSet*>(fRtdb->getContainer(parameterName.c_str()));
136136
}
137-
fRtdb->initContainers(runId);
137+
if (!fRtdb->initContainers(runId)) {
138+
LOG(error) << "ParameterMQServer::ProcessRequest: fRtdb->initContainers failed";
139+
return false;
140+
}
138141

139142
LOG(info) << "Sending following parameter to the client:";
140143
if (par) {
@@ -192,7 +195,10 @@ bool ParameterMQServer::ProcessUpdate(fair::mq::MessagePtr& update, int /*index*
192195
parDescr.erase(0, parDescr.find("RUNID") + 5);
193196
}
194197
}
195-
fRtdb->initContainers(runId);
198+
if (!fRtdb->initContainers(runId)) {
199+
LOG(error) << "ParameterMQServer::ProcessRequest: fRtdb->initContainers failed";
200+
return false;
201+
}
196202

197203
newPar->setChanged(true); // trigger writing to file
198204
newPar->setStatic(true); // to get rid of error

0 commit comments

Comments
 (0)