AlgExecStateSvc does not understand sub-slots
Problem demonstrated with a simple test in !979 (merged)
Algorithms running in sub-slots share a single execution state variable, because they exist in the same slot:
const AlgExecState& AlgExecStateSvc::algExecState( const Gaudi::StringKey& algName, const EventContext& ctx ) const {
checkInit();
auto& algState = m_algStates.at( ctx.slot() );
auto itr = algState.find( algName );
if ( UNLIKELY( itr == algState.end() ) ) {
throw GaudiException{"cannot find Alg " + algName.str() + " in AlgStateMap", name(), StatusCode::FAILURE};
}
return itr->second;
}
There are a number of possible fixes in the scheduler that could address the hang that this causes sometimes. However, the underlying issue seems to be with AlgExecStateSvc.
I propose to make it track execution states in sub slots where needed.
Edited by Benjamin Michael Wynne