@@ -1084,85 +1084,69 @@ int doChild(int argc, char** argv, ServiceRegistry& serviceRegistry,
10841084 DeviceSpec const & spec = runningWorkflow.devices [ref.index ];
10851085 LOG (INFO ) << " Spawing new device " << spec.id << " in process with pid " << getpid ();
10861086
1087- try {
1088- fair::mq::DeviceRunner runner{argc, argv};
1089-
1090- // Populate options from the command line. Notice that only the options
1091- // declared in the workflow definition are allowed.
1092- runner.AddHook <fair::mq::hooks::SetCustomCmdLineOptions>([&spec, defaultDriverClient](fair::mq::DeviceRunner& r) {
1093- boost::program_options::options_description optsDesc;
1094- ConfigParamsHelper::populateBoostProgramOptions (optsDesc, spec.options , gHiddenDeviceOptions );
1095- optsDesc.add_options ()(" monitoring-backend" , bpo::value<std::string>()->default_value (" default" ), " monitoring backend info" ) //
1096- (" driver-client-backend" , bpo::value<std::string>()->default_value (defaultDriverClient), " backend for device -> driver communicataon: stdout://: use stdout, ws://: use websockets" ) //
1097- (" infologger-severity" , bpo::value<std::string>()->default_value (" " ), " minimum FairLogger severity to send to InfoLogger" ) //
1098- (" configuration,cfg" , bpo::value<std::string>()->default_value (" command-line" ), " configuration backend" ) //
1099- (" infologger-mode" , bpo::value<std::string>()->default_value (" " ), " O2_INFOLOGGER_MODE override" );
1100- r.fConfig .AddToCmdLineOptions (optsDesc, true );
1101- });
1087+ fair::mq::DeviceRunner runner{argc, argv};
1088+
1089+ // Populate options from the command line. Notice that only the options
1090+ // declared in the workflow definition are allowed.
1091+ runner.AddHook <fair::mq::hooks::SetCustomCmdLineOptions>([&spec, defaultDriverClient](fair::mq::DeviceRunner& r) {
1092+ boost::program_options::options_description optsDesc;
1093+ ConfigParamsHelper::populateBoostProgramOptions (optsDesc, spec.options , gHiddenDeviceOptions );
1094+ optsDesc.add_options ()(" monitoring-backend" , bpo::value<std::string>()->default_value (" default" ), " monitoring backend info" ) //
1095+ (" driver-client-backend" , bpo::value<std::string>()->default_value (defaultDriverClient), " backend for device -> driver communicataon: stdout://: use stdout, ws://: use websockets" ) //
1096+ (" infologger-severity" , bpo::value<std::string>()->default_value (" " ), " minimum FairLogger severity to send to InfoLogger" ) //
1097+ (" configuration,cfg" , bpo::value<std::string>()->default_value (" command-line" ), " configuration backend" ) //
1098+ (" infologger-mode" , bpo::value<std::string>()->default_value (" " ), " O2_INFOLOGGER_MODE override" );
1099+ r.fConfig .AddToCmdLineOptions (optsDesc, true );
1100+ });
11021101
1103- // This is to control lifetime. All these services get destroyed
1104- // when the runner is done.
1105- std::unique_ptr<SimpleRawDeviceService> simpleRawDeviceService;
1106- std::unique_ptr<DeviceState> deviceState;
1107- ComputingQuotaEvaluator quotaEvaluator{loop};
1108-
1109- auto afterConfigParsingCallback = [&simpleRawDeviceService,
1110- &runningWorkflow,
1111- ref,
1112- &spec,
1113- "aEvaluator,
1114- &serviceRegistry,
1115- &deviceState,
1116- &errorPolicy,
1117- &loop](fair::mq::DeviceRunner& r) {
1118- deviceState = std::make_unique<DeviceState>();
1119- deviceState->loop = loop;
1120-
1121- simpleRawDeviceService = std::make_unique<SimpleRawDeviceService>(nullptr , spec);
1122-
1123- serviceRegistry.registerService (ServiceRegistryHelpers::handleForService<RawDeviceService>(simpleRawDeviceService.get ()));
1124- serviceRegistry.registerService (ServiceRegistryHelpers::handleForService<DeviceSpec>(&spec));
1125- serviceRegistry.registerService (ServiceRegistryHelpers::handleForService<RunningWorkflowInfo const >(&runningWorkflow));
1126- serviceRegistry.registerService (ServiceRegistryHelpers::handleForService<ComputingQuotaEvaluator>("aEvaluator));
1127- serviceRegistry.registerService (ServiceRegistryHelpers::handleForService<DeviceState>(deviceState.get ()));
1128-
1129- // The decltype stuff is to be able to compile with both new and old
1130- // FairMQ API (one which uses a shared_ptr, the other one a unique_ptr.
1131- decltype (r.fDevice ) device;
1132- device = std::move (make_matching<decltype (device), DataProcessingDevice>(ref, serviceRegistry));
1133- dynamic_cast <DataProcessingDevice*>(device.get ())->SetErrorPolicy (errorPolicy);
1134-
1135- serviceRegistry.get <RawDeviceService>().setDevice (device.get ());
1136- r.fDevice = std::move (device);
1137- fair::Logger::SetConsoleColor (false );
1138-
1139- // / Create all the requested services and initialise them
1140- for (auto & service : spec.services ) {
1141- LOG (debug) << " Declaring service " << service.name ;
1142- serviceRegistry.declareService (service, *deviceState.get (), r.fConfig );
1143- }
1144- if (ResourcesMonitoringHelper::isResourcesMonitoringEnabled (spec.resourceMonitoringInterval )) {
1145- serviceRegistry.get <Monitoring>().enableProcessMonitoring (spec.resourceMonitoringInterval );
1146- }
1147- };
1102+ // This is to control lifetime. All these services get destroyed
1103+ // when the runner is done.
1104+ std::unique_ptr<SimpleRawDeviceService> simpleRawDeviceService;
1105+ std::unique_ptr<DeviceState> deviceState;
1106+ ComputingQuotaEvaluator quotaEvaluator{loop};
1107+
1108+ auto afterConfigParsingCallback = [&simpleRawDeviceService,
1109+ &runningWorkflow,
1110+ ref,
1111+ &spec,
1112+ "aEvaluator,
1113+ &serviceRegistry,
1114+ &deviceState,
1115+ &errorPolicy,
1116+ &loop](fair::mq::DeviceRunner& r) {
1117+ deviceState = std::make_unique<DeviceState>();
1118+ deviceState->loop = loop;
1119+
1120+ simpleRawDeviceService = std::make_unique<SimpleRawDeviceService>(nullptr , spec);
1121+
1122+ serviceRegistry.registerService (ServiceRegistryHelpers::handleForService<RawDeviceService>(simpleRawDeviceService.get ()));
1123+ serviceRegistry.registerService (ServiceRegistryHelpers::handleForService<DeviceSpec>(&spec));
1124+ serviceRegistry.registerService (ServiceRegistryHelpers::handleForService<RunningWorkflowInfo const >(&runningWorkflow));
1125+ serviceRegistry.registerService (ServiceRegistryHelpers::handleForService<ComputingQuotaEvaluator>("aEvaluator));
1126+ serviceRegistry.registerService (ServiceRegistryHelpers::handleForService<DeviceState>(deviceState.get ()));
1127+
1128+ // The decltype stuff is to be able to compile with both new and old
1129+ // FairMQ API (one which uses a shared_ptr, the other one a unique_ptr.
1130+ decltype (r.fDevice ) device;
1131+ device = std::move (make_matching<decltype (device), DataProcessingDevice>(ref, serviceRegistry));
1132+ dynamic_cast <DataProcessingDevice*>(device.get ())->SetErrorPolicy (errorPolicy);
1133+
1134+ serviceRegistry.get <RawDeviceService>().setDevice (device.get ());
1135+ r.fDevice = std::move (device);
1136+ fair::Logger::SetConsoleColor (false );
1137+
1138+ // / Create all the requested services and initialise them
1139+ for (auto & service : spec.services ) {
1140+ LOG (debug) << " Declaring service " << service.name ;
1141+ serviceRegistry.declareService (service, *deviceState.get (), r.fConfig );
1142+ }
1143+ if (ResourcesMonitoringHelper::isResourcesMonitoringEnabled (spec.resourceMonitoringInterval )) {
1144+ serviceRegistry.get <Monitoring>().enableProcessMonitoring (spec.resourceMonitoringInterval );
1145+ }
1146+ };
11481147
1149- runner.AddHook <fair::mq::hooks::InstantiateDevice>(afterConfigParsingCallback);
1150- return runner.Run ();
1151- } catch (boost::exception& e) {
1152- LOG (ERROR ) << " Unhandled boost::exception reached the top of main, device shutting down. Details follow: \n "
1153- << boost::current_exception_diagnostic_information (true );
1154- return 1 ;
1155- } catch (o2::framework::RuntimeErrorRef e) {
1156- doDPLException (e);
1157- return 1 ;
1158- } catch (std::exception& e) {
1159- LOG (ERROR ) << " Unhandled std::exception reached the top of main: " << e.what () << " , device shutting down." ;
1160- return 1 ;
1161- } catch (...) {
1162- LOG (ERROR ) << " Unknown exception reached the top of main.\n " ;
1163- return 1 ;
1164- }
1165- return 0 ;
1148+ runner.AddHook <fair::mq::hooks::InstantiateDevice>(afterConfigParsingCallback);
1149+ return runner.Run ();
11661150}
11671151
11681152struct WorkflowInfo {
0 commit comments