16 std::shared_ptr<ActivityRegistry> areg,
18 std::atomic<bool>* stopProcessingEvent,
30 pathContext_(path_name, streamContext, bitpos, pathType),
31 stopProcessingEvent_(stopProcessingEvent){
33 for (
auto& workerInPath :
workers_) {
53 for (
auto& workerInPath :
workers_) {
70 bool should_continue =
true;
79 should_continue =
false;
96 std::ostringstream ost;
97 ost <<
"If you wish to continue processing events after a " << pNF <<
" exception,\n" <<
98 "add \"SkipEvent = cms.untracked.vstring('ProductNotFound')\" to the \"options\" PSet in the configuration.\n";
107 return should_continue;
118 std::ostringstream ost;
119 ost <<
"Running path '" << pathContext.
pathName() <<
"'";
122 ost <<
"Processing ";
125 if (begin && branchType ==
InRun) {
126 ost <<
"stream begin Run";
128 else if (begin && branchType ==
InLumi) {
129 ost <<
"stream begin LuminosityBlock ";
131 else if (!begin && branchType ==
InLumi) {
132 ost <<
"stream end LuminosityBlock ";
134 else if (!begin && branchType ==
InRun) {
135 ost <<
"stream end Run ";
165 using std::placeholders::_1;
174 std::vector<EarlyDeleteHelper*>
temp;
175 temp.reserve(iWorkerToDeleter.size());
178 if(
found != iWorkerToDeleter.end()) {
179 temp.push_back(
found->second);
180 found->second->addedToPath();
183 std::vector<EarlyDeleteHelper*> tempCorrectSize(temp.begin(),temp.end());
190 helper->pathFinished(iEvent);
209 finished(-1,
true, std::exception_ptr(), iStreamContext);
218 unsigned int iModuleIndex,
224 auto& worker =
workers_[iModuleIndex];
225 bool shouldContinue = worker.checkResultsOfRunWorker(
true);
226 std::exception_ptr finalException;
228 std::unique_ptr<cms::Exception> pEx;
230 std::rethrow_exception(*iException);
232 pEx = std::unique_ptr<cms::Exception>(oldEx.
clone());
235 std::ostringstream ost;
238 worker.getWorker()->description(), ost.str());
240 worker.skipWorker(iEP);
241 finalException = std::exception_ptr();
243 shouldContinue =
false;
244 finalException = std::current_exception();
248 shouldContinue =
false;
250 auto const nextIndex = iModuleIndex +1;
251 if (shouldContinue and nextIndex <
workers_.size()) {
256 if (not shouldContinue) {
264 finished(iModuleIndex, shouldContinue, finalException, iContext);
279 iException = std::current_exception();
294 [
this, iNextModuleIndex, &iEP,&iES, iID, iContext, token](std::exception_ptr
const* iException)
297 this->
workerFinished(iException, iNextModuleIndex, iEP,iES,iID,iContext);
300 workers_[iNextModuleIndex].runWorkerAsync<
std::string const & pathName() const
void recordStatus(int nwrwue, bool isEvent)
void handleEarlyFinish(EventPrincipal const &)
roAction_t actions[nactions]
static const std::string & codeToString(Code)
-----------— implementation details ---------------—
std::vector< EarlyDeleteHelper * > earlyDeleteHelpers_
std::vector< WorkerInPath > WorkersInPath
void add(WaitingTask *)
Adds task to the waiting list.
EventID const & id() const
std::string const & category() const
exception_actions::ActionCodes find(const std::string &category) const
void runNextWorkerAsync(unsigned int iNextModuleIndex, EventPrincipal const &, EventSetup const &, StreamID const &, StreamContext const *)
WaitingTaskList waitingTasks_
void reset()
Resets access to the resource so that added tasks will wait.
ServiceToken presentToken() const
std::shared_ptr< ActivityRegistry > actReg_
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
void workerFinished(std::exception_ptr const *iException, unsigned int iModuleIndex, EventPrincipal const &iEP, EventSetup const &iES, StreamID const &iID, StreamContext const *iContext)
std::shared_ptr< HLTGlobalStatus > TrigResPtr
void processOneOccurrenceAsync(WaitingTask *, EventPrincipal const &, EventSetup const &, StreamID const &, StreamContext const *)
std::list< std::string > const & context() const
static ServiceRegistry & instance()
void addAdditionalInfo(std::string const &info)
static void exceptionContext(cms::Exception &ex, bool isEvent, bool begin, BranchType branchType, ModuleDescription const &, std::string const &id, PathContext const &)
void updateCounters(bool succeed, bool isEvent)
Path(int bitpos, std::string const &path_name, WorkersInPath const &workers, TrigResPtr trptr, ExceptionToActionTable const &actions, std::shared_ptr< ActivityRegistry > reg, StreamContext const *streamContext, std::atomic< bool > *stopProcessEvent, PathContext::PathType pathType)
FunctorWaitingTask< F > * make_waiting_task(ALLOC &&iAlloc, F f)
void addContext(std::string const &context)
bool handleWorkerFailure(cms::Exception &e, int nwrwue, bool isEvent, bool begin, BranchType branchType, ModuleDescription const &, std::string const &id)
void setEarlyDeleteHelpers(std::map< const Worker *, EarlyDeleteHelper * > const &)
ExceptionToActionTable const * act_table_
Worker const * getWorker(size_type i) const
void finished(int iModuleIndex, bool iSucceeded, std::exception_ptr, StreamContext const *)
std::atomic< bool > * stopProcessingEvent_
def branchType(schema, name)
virtual Exception * clone() const
void printCmsExceptionWarning(char const *behavior, cms::Exception const &e)