Skip to content

Commit 1f66135

Browse files
committed
DPL: drop try catch
1 parent d26801c commit 1f66135

1 file changed

Lines changed: 61 additions & 77 deletions

File tree

Framework/Core/src/runDataProcessing.cxx

Lines changed: 61 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
&quotaEvaluator,
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>(&quotaEvaluator));
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+
&quotaEvaluator,
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>(&quotaEvaluator));
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

11681152
struct WorkflowInfo {

0 commit comments

Comments
 (0)