Skip to content

Commit 117eb3c

Browse files
committed
Build slicing cache after options are prepared
Prepare options and services first, then collect all the slicing cache entries
1 parent c914279 commit 117eb3c

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
@@ -591,13 +591,41 @@ DataProcessorSpec adaptAnalysisTask(ConfigContext const& ctx, Args&&... args)
591591
auto algo = AlgorithmSpec::InitCallback
592592
{
593593
[task = task, expressionInfos, inputInfos, newOrigin, newOriginStr](InitContext& ic) mutable {
594+
homogeneous_apply_refs_sized<numElements>([&ic](auto&& element) { return analysis_task_parsers::prepareOption(ic, element); }, *task.get());
595+
homogeneous_apply_refs_sized<numElements>([&ic](auto&& element) { return analysis_task_parsers::prepareService(ic, element); }, *task.get());
596+
594597
Cache bindingsKeys;
595598
Cache bindingsKeysUnsorted;
596599
// add preslice declarations to slicing cache definition
597-
homogeneous_apply_refs_sized<numElements>([&bindingsKeys, &bindingsKeysUnsorted](auto& element) { return analysis_task_parsers::registerCache(element, bindingsKeys, bindingsKeysUnsorted); }, *task.get());
600+
homogeneous_apply_refs_sized<numElements>(
601+
[&bindingsKeys, &bindingsKeysUnsorted](auto& element) {
602+
return analysis_task_parsers::registerCache(element, bindingsKeys, bindingsKeysUnsorted);
603+
},
604+
*task.get());
598605

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

602630
auto& callbacks = ic.services().get<CallbackService>();
603631
auto eoscb = [task](EndOfStreamContext& eosContext) {
@@ -626,30 +654,6 @@ DataProcessorSpec adaptAnalysisTask(ConfigContext const& ctx, Args&&... args)
626654
},
627655
*task.get());
628656

629-
/// parse process functions to enable requested grouping caches - note that at this state process configurables have their final values
630-
if constexpr (requires { &T::process; }) {
631-
AnalysisDataProcessorBuilder::cacheFromArgs(&T::process, true, bindingsKeys, bindingsKeysUnsorted);
632-
}
633-
homogeneous_apply_refs_sized<numElements>(
634-
[&bindingsKeys, &bindingsKeysUnsorted](auto& x) {
635-
return AnalysisDataProcessorBuilder::requestCacheFromArgs(x, bindingsKeys, bindingsKeysUnsorted);
636-
},
637-
*task.get());
638-
639-
/// replace origin in slicing caches
640-
std::ranges::transform(bindingsKeys, bindingsKeys.begin(), [&newOrigin](Entry& entry) {
641-
if ((entry.matcher.origin == header::DataOrigin{"AOD"}) && (newOrigin != header::DataOrigin{"AOD"})) {
642-
entry.matcher = replaceOrigin(entry.matcher, newOrigin);
643-
}
644-
return entry;
645-
});
646-
std::ranges::transform(bindingsKeysUnsorted, bindingsKeysUnsorted.begin(), [&newOrigin](Entry& entry) {
647-
if ((entry.matcher.origin == header::DataOrigin{"AOD"}) && (newOrigin != header::DataOrigin{"AOD"})) {
648-
entry.matcher = replaceOrigin(entry.matcher, newOrigin);
649-
}
650-
return entry;
651-
});
652-
653657
ic.services().get<ArrowTableSlicingCacheDef>().setCaches(std::move(bindingsKeys));
654658
ic.services().get<ArrowTableSlicingCacheDef>().setCachesUnsorted(std::move(bindingsKeysUnsorted));
655659
ic.services().get<ArrowTableSlicingCacheDef>().setOrigin(newOrigin);

0 commit comments

Comments
 (0)