Skip to content

Commit 635546a

Browse files
committed
delayed algo loading
1 parent 03a26c8 commit 635546a

File tree

2 files changed

+16
-18
lines changed

2 files changed

+16
-18
lines changed

Framework/Core/src/ArrowSupport.cxx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "Framework/ArrowContext.h"
1414
#include "Framework/ArrowTableSlicingCache.h"
1515
#include "Framework/DataProcessor.h"
16+
#include "Framework/CommonDataProcessors.h"
1617
#include "Framework/DataProcessingStats.h"
1718
#include "Framework/ServiceRegistry.h"
1819
#include "Framework/ConfigContext.h"
@@ -609,9 +610,9 @@ o2::framework::ServiceSpec ArrowSupport::arrowBackendSpec()
609610
// recreate inputs and outputs
610611
builder->inputs.clear();
611612
builder->outputs.clear();
612-
// replace AlgorithmSpec
613-
// FIXME: it should be made more generic, so it does not need replacement...
614-
builder->algorithm = PluginManager::loadAlgorithmFromPlugin("O2FrameworkOnDemandTablesSupport", "IndexTableBuilder", ctx); // readers::AODReaderHelpers::indexBuilderCallback(ctx);
613+
614+
// load real AlgorithmSpec before deployment
615+
builder->algorithm = PluginManager::loadAlgorithmFromPlugin("O2FrameworkOnDemandTablesSupport", "IndexTableBuilder", ctx);
615616
AnalysisSupportHelpers::addMissingOutputsToBuilder(dec.requestedIDXs, dec.requestedAODs, dec.requestedDYNs, *builder);
616617
}
617618

@@ -634,10 +635,10 @@ o2::framework::ServiceSpec ArrowSupport::arrowBackendSpec()
634635
// recreate inputs and outputs
635636
spawner->outputs.clear();
636637
spawner->inputs.clear();
637-
AnalysisSupportHelpers::addMissingOutputsToSpawner({}, dec.spawnerInputs, dec.requestedAODs, *spawner);
638-
// replace AlgorithmSpec
639-
// FIXME: it should be made more generic, so it does not need replacement...
638+
639+
// load real AlgorithmSpec before deployment
640640
spawner->algorithm = PluginManager::loadAlgorithmFromPlugin("O2FrameworkOnDemandTablesSupport", "ExtendedTableSpawner", ctx);
641+
AnalysisSupportHelpers::addMissingOutputsToSpawner({}, dec.spawnerInputs, dec.requestedAODs, *spawner);
641642
}
642643

643644
if (analysisCCDB != workflow.end()) {
@@ -654,8 +655,7 @@ o2::framework::ServiceSpec ArrowSupport::arrowBackendSpec()
654655
// recreate inputs and outputs
655656
analysisCCDB->outputs.clear();
656657
analysisCCDB->inputs.clear();
657-
// replace AlgorithmSpec
658-
// FIXME: it should be made more generic, so it does not need replacement...
658+
// load real AlgorithmSpec before deployment
659659
// FIXME how can I make the lookup depend on DYN tables as well??
660660
analysisCCDB->algorithm = PluginManager::loadAlgorithmFromPlugin("O2FrameworkCCDBSupport", "AnalysisCCDBFetcherPlugin", ctx);
661661
AnalysisSupportHelpers::addMissingOutputsToBuilder(dec.analysisCCDBInputs, dec.requestedAODs, dec.requestedDYNs, *analysisCCDB);
@@ -682,6 +682,10 @@ o2::framework::ServiceSpec ArrowSupport::arrowBackendSpec()
682682
if (reader->outputs.empty()) {
683683
// nothing to read
684684
workflow.erase(reader);
685+
} else {
686+
// load reader algorithm before deployment
687+
auto&& algo = PluginManager::loadAlgorithmFromPlugin("O2FrameworkAnalysisSupport", "ROOTFileReader", ctx);
688+
reader->algorithm = CommonDataProcessors::wrapWithTimesliceConsumption(algo);
685689
}
686690
}
687691

Framework/Core/src/WorkflowHelpers.cxx

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ void WorkflowHelpers::injectServiceDevices(WorkflowSpec& workflow, ConfigContext
384384
"internal-dpl-aod-index-builder",
385385
{},
386386
{},
387-
PluginManager::loadAlgorithmFromPlugin("O2FrameworkOnDemandTablesSupport", "IndexTableBuilder", ctx), // readers::AODReaderHelpers::indexBuilderCallback(ctx),
387+
AlgorithmSpec::dummyAlgorithm(), // real algorithm will be set in adjustTopology
388388
{}};
389389
AnalysisSupportHelpers::addMissingOutputsToBuilder(dec.requestedIDXs, dec.requestedAODs, dec.requestedDYNs, indexBuilder);
390390

@@ -400,7 +400,7 @@ void WorkflowHelpers::injectServiceDevices(WorkflowSpec& workflow, ConfigContext
400400
"internal-dpl-aod-spawner",
401401
{},
402402
{},
403-
PluginManager::loadAlgorithmFromPlugin("O2FrameworkOnDemandTablesSupport", "ExtendedTableSpawner", ctx), // readers::AODReaderHelpers::aodSpawnerCallback(ctx),
403+
AlgorithmSpec::dummyAlgorithm(), // real algorithm will be set in adjustTopology
404404
{}};
405405
AnalysisSupportHelpers::addMissingOutputsToSpawner({}, dec.spawnerInputs, dec.requestedAODs, aodSpawner);
406406
AnalysisSupportHelpers::addMissingOutputsToReader(dec.providedAODs, dec.requestedAODs, aodReader);
@@ -431,13 +431,11 @@ void WorkflowHelpers::injectServiceDevices(WorkflowSpec& workflow, ConfigContext
431431
auto mctracks2aod = std::find_if(workflow.begin(), workflow.end(), [](auto const& x) { return x.name == "mctracks-to-aod"; });
432432
if (mctracks2aod == workflow.end()) {
433433
// add normal reader
434-
auto&& algo = PluginManager::loadAlgorithmFromPlugin("O2FrameworkAnalysisSupport", "ROOTFileReader", ctx);
435-
aodReader.algorithm = CommonDataProcessors::wrapWithTimesliceConsumption(algo);
436434
aodReader.outputs.emplace_back(OutputSpec{"TFN", "TFNumber"});
437435
aodReader.outputs.emplace_back(OutputSpec{"TFF", "TFFilename"});
438436
} else {
439-
// AODs are being injected on-the-fly, add dummy reader
440-
auto algo = AlgorithmSpec{
437+
// AODs are being injected on-the-fly, add error-handler reader
438+
aodReader.algorithm = AlgorithmSpec{
441439
adaptStateful(
442440
[outputs = aodReader.outputs](DeviceSpec const&) {
443441
LOGP(warn, "Workflow with injected AODs has unsatisfied inputs:");
@@ -448,7 +446,6 @@ void WorkflowHelpers::injectServiceDevices(WorkflowSpec& workflow, ConfigContext
448446
// to ensure the output type for adaptStateful
449447
return adaptStateless([](DataAllocator&) {});
450448
})};
451-
aodReader.algorithm = CommonDataProcessors::wrapWithTimesliceConsumption(algo);
452449
}
453450
auto concrete = DataSpecUtils::asConcreteDataMatcher(aodReader.inputs[0]);
454451
timer.outputs.emplace_back(concrete.origin, concrete.description, concrete.subSpec, Lifetime::Enumeration);
@@ -533,9 +530,6 @@ void WorkflowHelpers::injectServiceDevices(WorkflowSpec& workflow, ConfigContext
533530

534531
// add the Analysys CCDB backend which reads CCDB objects using a provided table
535532
if (analysisCCDBBackend.outputs.empty() == false) {
536-
// add normal reader
537-
auto&& algo = PluginManager::loadAlgorithmFromPlugin("O2FrameworkCCDBSupport", "AnalysisCCDBFetcherPlugin", ctx);
538-
analysisCCDBBackend.algorithm = algo;
539533
extraSpecs.push_back(analysisCCDBBackend);
540534
}
541535

0 commit comments

Comments
 (0)