Skip to content

Commit c45ad75

Browse files
committed
DPL: introduce a preStart callback
1 parent 1e2c79e commit c45ad75

6 files changed

Lines changed: 47 additions & 0 deletions

File tree

Framework/Core/include/Framework/ServiceRegistry.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ struct ServiceRegistry {
9494
std::vector<ServiceEOSHandle> mPostEOSHandles;
9595
/// Callbacks for services to be executed after every dispatching
9696
std::vector<ServiceDispatchingHandle> mPostDispatchingHandles;
97+
/// Callbacks for services to be executed before Start
98+
std::vector<ServiceStartHandle> mPreStartHandles;
9799
/// Callbacks for services to be executed on exit
98100
std::vector<ServiceExitHandle> mPreExitHandles;
99101

@@ -129,6 +131,8 @@ struct ServiceRegistry {
129131
return *this;
130132
}
131133

134+
/// Invoke callbacks to be executed in PreRun(), before the User Start callbacks
135+
void preStartCallbacks();
132136
/// Invoke callbacks to be executed before every process method invokation
133137
void preProcessingCallbacks(ProcessingContext&);
134138
/// Invoke callbacks to be executed after every process method invokation

Framework/Core/include/Framework/ServiceSpec.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ class DanglingContext;
3737

3838
/// A callback to create a given Service.
3939
using ServiceInit = std::function<ServiceHandle(ServiceRegistry&, DeviceState&, fair::mq::ProgOptions&)>;
40+
/// A callback invoked whenever we start running, before the user callback.
41+
using ServiceStartCallback = std::function<void(ServiceRegistry&, void*)>;
42+
/// A callback invoked whenever we stop running, before we exit.
4043
using ServiceExitCallback = std::function<void(ServiceRegistry&, void*)>;
4144

4245
/// A callback to configure a given Service. Notice that the
@@ -130,6 +133,8 @@ struct ServiceSpec {
130133
/// dispatched.
131134
ServicePostDispatching postDispatching = nullptr;
132135

136+
/// Callback invoked on Start
137+
ServiceStartCallback start = nullptr;
133138
/// Callback invoked on exit
134139
ServiceExitCallback exit = nullptr;
135140

@@ -162,6 +167,11 @@ struct ServiceDispatchingHandle {
162167
void* service;
163168
};
164169

170+
struct ServiceStartHandle {
171+
ServiceExitCallback callback;
172+
void* service;
173+
};
174+
165175
struct ServiceExitHandle {
166176
ServiceExitCallback callback;
167177
void* service;

Framework/Core/src/CommonMessageBackends.cxx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ o2::framework::ServiceSpec CommonMessageBackends::rateLimitingSpec()
128128
nullptr,
129129
nullptr,
130130
nullptr,
131+
nullptr,
131132
ServiceKind::Serial};
132133
}
133134

@@ -361,6 +362,7 @@ o2::framework::ServiceSpec CommonMessageBackends::arrowBackendSpec()
361362
monitoring.flushBuffer();
362363
},
363364
nullptr,
365+
nullptr,
364366
ServiceKind::Serial};
365367
}
366368

@@ -403,6 +405,7 @@ o2::framework::ServiceSpec CommonMessageBackends::fairMQBackendSpec()
403405
nullptr,
404406
nullptr,
405407
nullptr,
408+
nullptr,
406409
ServiceKind::Serial};
407410
}
408411

@@ -425,6 +428,7 @@ o2::framework::ServiceSpec CommonMessageBackends::stringBackendSpec()
425428
nullptr,
426429
nullptr,
427430
nullptr,
431+
nullptr,
428432
ServiceKind::Serial};
429433
}
430434

@@ -447,6 +451,7 @@ o2::framework::ServiceSpec CommonMessageBackends::rawBufferBackendSpec()
447451
nullptr,
448452
nullptr,
449453
nullptr,
454+
nullptr,
450455
ServiceKind::Serial};
451456
}
452457

Framework/Core/src/CommonServices.cxx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ o2::framework::ServiceSpec CommonServices::monitoringSpec()
9696
nullptr,
9797
nullptr,
9898
nullptr,
99+
nullptr,
99100
[](ServiceRegistry& registry, void* service) {
100101
Monitoring* monitoring = reinterpret_cast<Monitoring*>(service);
101102
delete monitoring;
@@ -122,6 +123,7 @@ o2::framework::ServiceSpec CommonServices::infologgerContextSpec()
122123
nullptr,
123124
nullptr,
124125
nullptr,
126+
nullptr,
125127
ServiceKind::Serial};
126128
}
127129

@@ -214,6 +216,7 @@ o2::framework::ServiceSpec CommonServices::infologgerSpec()
214216
nullptr,
215217
nullptr,
216218
nullptr,
219+
nullptr,
217220
ServiceKind::Serial};
218221
}
219222

@@ -244,6 +247,7 @@ o2::framework::ServiceSpec CommonServices::configurationSpec()
244247
nullptr,
245248
nullptr,
246249
nullptr,
250+
nullptr,
247251
ServiceKind::Global};
248252
}
249253

@@ -276,6 +280,7 @@ o2::framework::ServiceSpec CommonServices::driverClientSpec()
276280
nullptr,
277281
nullptr,
278282
nullptr,
283+
nullptr,
279284
ServiceKind::Global};
280285
}
281286

@@ -302,6 +307,7 @@ o2::framework::ServiceSpec CommonServices::controlSpec()
302307
nullptr,
303308
nullptr,
304309
nullptr,
310+
nullptr,
305311
ServiceKind::Serial};
306312
}
307313

@@ -325,6 +331,7 @@ o2::framework::ServiceSpec CommonServices::rootFileSpec()
325331
nullptr,
326332
nullptr,
327333
nullptr,
334+
nullptr,
328335
ServiceKind::Serial};
329336
}
330337

@@ -352,6 +359,7 @@ o2::framework::ServiceSpec CommonServices::parallelSpec()
352359
nullptr,
353360
nullptr,
354361
nullptr,
362+
nullptr,
355363
ServiceKind::Serial};
356364
}
357365

@@ -375,6 +383,7 @@ o2::framework::ServiceSpec CommonServices::timesliceIndex()
375383
nullptr,
376384
nullptr,
377385
nullptr,
386+
nullptr,
378387
ServiceKind::Serial};
379388
}
380389

@@ -398,6 +407,7 @@ o2::framework::ServiceSpec CommonServices::callbacksSpec()
398407
nullptr,
399408
nullptr,
400409
nullptr,
410+
nullptr,
401411
ServiceKind::Serial};
402412
}
403413

@@ -428,6 +438,7 @@ o2::framework::ServiceSpec CommonServices::dataRelayer()
428438
nullptr,
429439
nullptr,
430440
nullptr,
441+
nullptr,
431442
ServiceKind::Serial};
432443
}
433444

@@ -463,6 +474,7 @@ o2::framework::ServiceSpec CommonServices::tracingSpec()
463474
nullptr,
464475
nullptr,
465476
nullptr,
477+
nullptr,
466478
ServiceKind::Serial};
467479
}
468480

@@ -501,6 +513,7 @@ o2::framework::ServiceSpec CommonServices::threadPool(int numWorkers)
501513
nullptr,
502514
nullptr,
503515
nullptr,
516+
nullptr,
504517
ServiceKind::Serial};
505518
}
506519

@@ -607,6 +620,7 @@ o2::framework::ServiceSpec CommonServices::dataProcessingStats()
607620
nullptr,
608621
nullptr,
609622
nullptr,
623+
nullptr,
610624
ServiceKind::Serial};
611625
}
612626

Framework/Core/src/DataProcessingDevice.cxx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,7 @@ void DataProcessingDevice::fillContext(DataProcessorContext& context)
409409

410410
void DataProcessingDevice::PreRun()
411411
{
412+
mServiceRegistry.preStartCallbacks();
412413
mServiceRegistry.get<CallbackService>()(CallbackService::Id::Start);
413414
}
414415

Framework/Core/src/ServiceRegistry.cxx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ void ServiceRegistry::bindService(ServiceSpec const& spec, void* service)
9999
if (spec.postDispatching) {
100100
mPostDispatchingHandles.push_back(ServiceDispatchingHandle{spec.postDispatching, service});
101101
}
102+
if (spec.start) {
103+
mPreStartHandles.push_back(ServiceStartHandle{spec.start, service});
104+
}
102105
if (spec.exit) {
103106
mPreExitHandles.push_back(ServiceExitHandle{spec.exit, service});
104107
}
@@ -158,6 +161,16 @@ void ServiceRegistry::postDispatchingCallbacks(ProcessingContext& processContext
158161
}
159162
}
160163

164+
/// Callbacks to be called in FairMQDevice::PreRun()
165+
void ServiceRegistry::preStartCallbacks()
166+
{
167+
// FIXME: we need to call the callback only once for the global services
168+
/// I guess...
169+
for (auto startHandle = mPreStartHandles.begin(); startHandle != mPreStartHandles.end(); ++startHandle) {
170+
startHandle->callback(*this, startHandle->service);
171+
}
172+
}
173+
161174
/// Invoke callback to be executed on exit, in reverse order.
162175
void ServiceRegistry::preExitCallbacks()
163176
{

0 commit comments

Comments
 (0)