Skip to content

Commit 00cb956

Browse files
committed
Build slicing cache after options are prepared
Prepare options and services first, then collect all the slicing cache entries
1 parent 325ad84 commit 00cb956

1 file changed

Lines changed: 31 additions & 27 deletions

File tree

‎Framework/Core/include/Framework/AnalysisTask.h‎

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -601,13 +601,41 @@ DataProcessorSpec adaptAnalysisTask(ConfigContext const& ctx, Args&&... args)
601601

602602
auto algo = AlgorithmSpec::InitCallback{
603603
[task = task, expressionInfos, inputInfos, newOrigin, newOriginStr](InitContext& ic) mutable {
604+
homogeneous_apply_refs_sized<numElements>([&ic](auto&& element) { return analysis_task_parsers::prepareOption(ic, element); }, *task.get());
605+
homogeneous_apply_refs_sized<numElements>([&ic](auto&& element) { return analysis_task_parsers::prepareService(ic, element); }, *task.get());
606+
604607
Cache bindingsKeys;
605608
Cache bindingsKeysUnsorted;
606609
// add preslice declarations to slicing cache definition
607-
homogeneous_apply_refs_sized<numElements>([&bindingsKeys, &bindingsKeysUnsorted](auto& element) { return analysis_task_parsers::registerCache(element, bindingsKeys, bindingsKeysUnsorted); }, *task.get());
610+
homogeneous_apply_refs_sized<numElements>(
611+
[&bindingsKeys, &bindingsKeysUnsorted](auto& element) {
612+
return analysis_task_parsers::registerCache(element, bindingsKeys, bindingsKeysUnsorted);
613+
},
614+
*task.get());
608615

609-
homogeneous_apply_refs_sized<numElements>([&ic](auto&& element) { return analysis_task_parsers::prepareOption(ic, element); }, *task.get());
610-
homogeneous_apply_refs_sized<numElements>([&ic](auto&& element) { return analysis_task_parsers::prepareService(ic, element); }, *task.get());
616+
/// parse process functions to enable requested grouping caches - note that at this state process configurables have their final values
617+
if constexpr (requires { &T::process; }) {
618+
AnalysisDataProcessorBuilder::cacheFromArgs(&T::process, true, bindingsKeys, bindingsKeysUnsorted);
619+
}
620+
homogeneous_apply_refs_sized<numElements>(
621+
[&bindingsKeys, &bindingsKeysUnsorted](auto& x) {
622+
return AnalysisDataProcessorBuilder::requestCacheFromArgs(x, bindingsKeys, bindingsKeysUnsorted);
623+
},
624+
*task.get());
625+
626+
/// replace origin in slicing caches
627+
std::ranges::transform(bindingsKeys, bindingsKeys.begin(), [&newOrigin](Entry& entry) {
628+
if ((entry.matcher.origin == header::DataOrigin{"AOD"}) && (newOrigin != header::DataOrigin{"AOD"})) {
629+
entry.matcher = replaceOrigin(entry.matcher, newOrigin);
630+
}
631+
return entry;
632+
});
633+
std::ranges::transform(bindingsKeysUnsorted, bindingsKeysUnsorted.begin(), [&newOrigin](Entry& entry) {
634+
if ((entry.matcher.origin == header::DataOrigin{"AOD"}) && (newOrigin != header::DataOrigin{"AOD"})) {
635+
entry.matcher = replaceOrigin(entry.matcher, newOrigin);
636+
}
637+
return entry;
638+
});
611639

612640
auto& callbacks = ic.services().get<CallbackService>();
613641
auto eoscb = [task](EndOfStreamContext& eosContext) {
@@ -636,30 +664,6 @@ DataProcessorSpec adaptAnalysisTask(ConfigContext const& ctx, Args&&... args)
636664
},
637665
*task.get());
638666

639-
/// parse process functions to enable requested grouping caches - note that at this state process configurables have their final values
640-
if constexpr (requires { &T::process; }) {
641-
AnalysisDataProcessorBuilder::cacheFromArgs(&T::process, true, bindingsKeys, bindingsKeysUnsorted);
642-
}
643-
homogeneous_apply_refs_sized<numElements>(
644-
[&bindingsKeys, &bindingsKeysUnsorted](auto& x) {
645-
return AnalysisDataProcessorBuilder::requestCacheFromArgs(x, bindingsKeys, bindingsKeysUnsorted);
646-
},
647-
*task.get());
648-
649-
/// replace origin in slicing caches
650-
std::ranges::transform(bindingsKeys, bindingsKeys.begin(), [&newOrigin](Entry& entry) {
651-
if ((entry.matcher.origin == header::DataOrigin{"AOD"}) && (newOrigin != header::DataOrigin{"AOD"})) {
652-
entry.matcher = replaceOrigin(entry.matcher, newOrigin);
653-
}
654-
return entry;
655-
});
656-
std::ranges::transform(bindingsKeysUnsorted, bindingsKeysUnsorted.begin(), [&newOrigin](Entry& entry) {
657-
if ((entry.matcher.origin == header::DataOrigin{"AOD"}) && (newOrigin != header::DataOrigin{"AOD"})) {
658-
entry.matcher = replaceOrigin(entry.matcher, newOrigin);
659-
}
660-
return entry;
661-
});
662-
663667
ic.services().get<ArrowTableSlicingCacheDef>().setCaches(std::move(bindingsKeys));
664668
ic.services().get<ArrowTableSlicingCacheDef>().setCachesUnsorted(std::move(bindingsKeysUnsorted));
665669
ic.services().get<ArrowTableSlicingCacheDef>().setOrigin(newOrigin);

0 commit comments

Comments
 (0)