32 exception <<
"ProductResolverBase::resolveProduct_: The product matching all criteria was already deleted\n" 34 <<
"Looking for module label: " <<
moduleLabel() <<
"\n" 37 <<
"This means there is a configuration error.\n" 38 <<
"The module which is asking for this data must be configured to state that it will read this data.";
44 template <
bool callResolver,
typename FUNC>
51 auto presentStatus =
status();
56 auto failedStatusSetter = [
this](
ProductStatus* presentStatus) {
60 *presentStatus = this->
status();
62 std::unique_ptr<ProductStatus, decltype(failedStatusSetter)> failedStatusGuard(&presentStatus, failedStatusSetter);
71 if(pd->wrapper()->isPresent()) {
89 if(not iFrom) {
return;}
95 if (
original->isPresent() != iFrom->isPresent()) {
98 <<
"Was trying to merge objects where one product had been put in the input file and the other had not been." <<
"\n" 99 <<
"The solution is to drop the branch on input. Or better do not create inconsistent files\n" 100 <<
"that need to be merged in the first place.\n";
105 if (mergeableRunProductMetadata ==
nullptr || desc.
branchType() !=
InRun) {
106 original->mergeProduct(iFrom.get());
110 original->mergeProduct(iFrom.get());
125 }
else if(
original->hasIsProductEqual()) {
126 if (
original->isPresent() && iFrom->isPresent()) {
127 if(!
original->isProductEqual(iFrom.get())) {
130 <<
"ProductResolver::mergeTheProduct\n" 131 <<
"Two run/lumi products for the same run/lumi which should be equal are not\n" 132 <<
"Using the first, ignoring the second\n" 133 <<
"className = " << bd.className() <<
"\n" 134 <<
"moduleLabel = " << bd.moduleLabel() <<
"\n" 135 <<
"instance = " << bd.productInstanceName() <<
"\n" 136 <<
"process = " << bd.processName() <<
"\n";
138 }
else if (!
original->isPresent() && iFrom->isPresent()) {
145 <<
"ProductResolver::mergeTheProduct\n" 146 <<
"Run/lumi product has neither a mergeProduct nor isProductEqual function\n" 147 <<
"Using the first, ignoring the second in merge\n" 148 <<
"className = " << bd.className() <<
"\n" 149 <<
"moduleLabel = " << bd.moduleLabel() <<
"\n" 150 <<
"instance = " << bd.productInstanceName() <<
"\n" 151 <<
"process = " << bd.processName() <<
"\n";
152 if (!
original->isPresent() && iFrom->isPresent()) {
164 return resolveProductImpl<true>([
this,&
principal,mcc]() {
178 aux_->postModuleDelayedGetSignal_.emit(*(iContext->
getStreamContext()), *iContext); }
181 if(
auto reader=principal.reader()) {
182 std::unique_lock<std::recursive_mutex> guard;
183 if(
auto sr =
reader->sharedResources().second) {
184 guard =std::unique_lock<std::recursive_mutex>(*sr);
200 std::unique_lock<std::recursive_mutex> guard;
201 if(
auto sr =
reader->sharedResources().second) {
202 guard =std::unique_lock<std::recursive_mutex>(*sr);
209 if (edp.get() !=
nullptr) {
213 <<
"Mergeable data types written to a Run must have the swap member function defined" <<
"\n";
222 <<
"The product branch was dropped in the first run or lumi fragment and present in a later one" <<
"\n" 223 <<
"The solution is to drop the branch on input. Or better do not create inconsistent files\n" 224 <<
"that need to be merged in the first place.\n";
231 <<
"The product branch was present in first run or lumi fragment and dropped in a later one" <<
"\n" 232 <<
"The solution is to drop the branch on input. Or better do not create inconsistent files\n" 233 <<
"that need to be merged in the first place.\n";
247 bool skipCurrentProcess,
251 m_waitingTasks.add(waitTask);
253 bool expected =
false;
254 if( m_prefetchRequested.compare_exchange_strong(expected,
true) ) {
256 auto workToDo = [
this, mcc, &
principal, token] () {
260 resolveProductImpl<true>([
this,&
principal,mcc]() {
261 if(principal.branchType() !=
InEvent) {
return; }
262 if(
auto reader = principal.reader()) {
263 std::unique_lock<std::recursive_mutex> guard;
264 if(
auto sr =
reader->sharedResources().second) {
265 guard =std::unique_lock<std::recursive_mutex>(*sr);
274 this->m_waitingTasks.doneWaiting(std::current_exception());
277 this->m_waitingTasks.doneWaiting(
nullptr);
281 if(
auto reader = principal.reader()) {
282 if (
auto shared_res =
reader->sharedResources().first) {
283 queue = &(shared_res->serialQueueChain());
287 queue->
push(workToDo);
292 tbb::task::spawn(*
t);
299 m_prefetchRequested =
false;
300 m_waitingTasks.reset();
318 bool skipCurrentProcess,
321 if (!skipCurrentProcess) {
323 return resolveProductImpl<false>([](){
return;});
330 bool skipCurrentProcess,
334 if(not skipCurrentProcess) {
336 if( not mcc->parent().isAtEndTransition() ) {
340 m_waitingTasks.add(waitTask);
342 bool expected =
false;
343 if(worker_ and prefetchRequested_.compare_exchange_strong(expected,
true)) {
350 [
this](std::exception_ptr
const * iException) {
351 if(
nullptr != iException) {
352 m_waitingTasks.doneWaiting(*iException);
354 m_waitingTasks.doneWaiting(std::exception_ptr());
357 worker_->callWhenDoneAsync(waiting);
365 bool expected =
false;
366 if(prefetchRequested_.compare_exchange_strong(expected,
true)) {
367 m_waitingTasks.doneWaiting(std::exception_ptr());
374 m_waitingTasks.reset();
376 prefetchRequested_ =
false;
389 assert(worker_ !=
nullptr);
395 bool skipCurrentProcess,
398 if (!skipCurrentProcess and worker_) {
399 return resolveProductImpl<true>(
406 auto workCall = [
this,&
event,&parentContext,mcc] () {
411 *(aux_->eventSetup()),
425 std::ostringstream ost;
426 ost <<
"Calling produce method for unscheduled module " 427 << worker_->description().moduleName() <<
"/'" 428 << worker_->description().moduleLabel() <<
"'";
440 bool skipCurrentProcess,
445 if(skipCurrentProcess) {
return; }
446 waitingTasks_.add(waitTask);
447 bool expected =
false;
448 if(prefetchRequested_.compare_exchange_strong(expected,
true)) {
453 [
this](std::exception_ptr
const* iPtr)
458 resolveProductImpl<true>([iPtr]() {
460 std::rethrow_exception(*iPtr);
464 waitingTasks_.doneWaiting(std::current_exception());
467 waitingTasks_.doneWaiting(
nullptr);
474 *(aux_->eventSetup()),
484 prefetchRequested_ =
false;
485 waitingTasks_.reset();
520 if(not prod) {
return;}
540 <<
"It is actually of type " << typeID.className() <<
".\n";
560 auto presentStatus =
status();
626 realProduct_.setProvenance(provRetriever,ph,pid);
630 realProduct_.setProcessHistory(ph);
638 realProduct_.resetProductData_(deleteEarly);
647 <<
"AliasProductResolver::putProduct_() not implemented and should never be called.\n" 648 <<
"Contact a Framework developer\n";
653 <<
"AliasProductResolver::putOrMergeProduct_(std::unique_ptr<WrapperBase> edp, MergeableRunProductMetadata const*) not implemented and should never be called.\n" 654 <<
"Contact a Framework developer\n";
660 provRetriever_ = provRetriever;
667 return provRetriever_? provRetriever_->branchIDToProvenance(bd_->originalBranchID()):
nullptr;
679 <<
"ParentProcessProductResolver::putProduct_() not implemented and should never be called.\n" 680 <<
"Contact a Framework developer\n";
685 <<
"ParentProcessProductResolver::putOrMergeProduct_(std::unique_ptr<WrapperBase> edp, MergeableRunProductMetadata const*) not implemented and should never be called.\n" 686 <<
"Contact a Framework developer\n";
706 <<
"ParentProcessProductResolver::throwNullRealProduct RealProduct pointer not set in this context.\n" 707 <<
"Contact a Framework developer\n";
712 std::vector<bool>
const& ambiguous,
714 matchingHolders_(matchingHolders),
715 ambiguous_(ambiguous),
717 lastSkipCurrentCheckIndex_(lastCheckIndex_.
load()),
718 prefetchRequested_(
false),
719 skippingPrefetchRequested_(
false),
720 madeAtEnd_{madeAtEnd}
728 bool skipCurrentProcess,
732 return productResolver->
resolveProduct(principal, skipCurrentProcess, sra, mcc);
738 bool skipCurrentProcess,
743 const unsigned int choiceSize =
ambiguous_.size();
746 if( (not skipCurrentProcess) and (
madeAtEnd_ and mcc)) {
747 skipCurrentProcess = not mcc->parent().isAtEndTransition();
757 return tryResolver(checkCacheIndex, principal, skipCurrentProcess,
764 for(
unsigned int k : lookupProcessOrder) {
774 updateCacheIndex =
k;
787 bool skipCurrentProcess,
791 bool timeToMakeAtEnd =
true;
793 timeToMakeAtEnd = mcc->parent().isAtEndTransition();
797 if(not skipCurrentProcess and timeToMakeAtEnd) {
800 bool expected =
false;
807 bool expected =
false;
817 std::exception_ptr iExceptPtr)
const {
818 if( not iSkipCurrentProcess) {
832 unsigned int iResolverIndex,
836 bool iSkipCurrentProcess,
838 resolver_(iResolver),
839 principal_(iPrincipal),
842 serviceToken_(iToken),
843 index_(iResolverIndex),
844 skipCurrentProcess_(iSkipCurrentProcess){}
846 tbb::task*
execute()
override {
847 auto exceptPtr =exceptionPtr();
849 resolver_->prefetchFailed(index_, *principal_, skipCurrentProcess_, *exceptPtr);
851 if(not resolver_->dataValidFromResolver(index_, *principal_, skipCurrentProcess_)) {
852 resolver_->tryPrefetchResolverAsync(index_+1,
870 bool skipCurrentProcess_;
877 bool iSkipCurrentProcess,
878 std::exception_ptr iExceptPtr)
const {
880 auto k = lookupProcessOrder[iProcessingIndex];
882 setCache(iSkipCurrentProcess,
k, iExceptPtr);
889 bool iSkipCurrentProcess)
const {
891 auto k = lookupProcessOrder[iProcessingIndex];
896 setCache(iSkipCurrentProcess, k,
nullptr);
906 bool skipCurrentProcess,
911 auto index = iProcessingIndex;
913 const unsigned int choiceSize =
ambiguous_.size();
915 while(
index < lookupProcessOrder.size()) {
916 auto k = lookupProcessOrder[
index];
928 auto task =
new (tbb::task::allocate_root()) TryNextResolverWaitingTask(
937 task->increment_ref_count();
948 if(0 == task->decrement_ref_count()) {
949 tbb::task::spawn(*task);
956 setCache(skipCurrentProcess, newCacheIndex,
nullptr);
987 <<
"NoProcessProductResolver::unscheduledWasNotRun_() not implemented and should never be called.\n" 988 <<
"Contact a Framework developer\n";
993 <<
"NoProcessProductResolver::productUnavailable_() not implemented and should never be called.\n" 994 <<
"Contact a Framework developer\n";
999 <<
"NoProcessProductResolver::productResolved_() not implemented and should never be called.\n" 1000 <<
"Contact a Framework developer\n";
1005 <<
"NoProcessProductResolver::productWasDeleted_() not implemented and should never be called.\n" 1006 <<
"Contact a Framework developer\n";
1011 <<
"NoProcessProductResolver::productWasFetchedAndIsValid_() not implemented and should never be called.\n" 1012 <<
"Contact a Framework developer\n";
1017 <<
"NoProcessProductResolver::putProduct_() not implemented and should never be called.\n" 1018 <<
"Contact a Framework developer\n";
1023 <<
"NoProcessProductResolver::putOrMergeProduct_(std::unique_ptr<WrapperBase> edp, MergeableRunProductMetadata const*) not implemented and should never be called.\n" 1024 <<
"Contact a Framework developer\n";
1029 <<
"NoProcessProductResolver::branchDescription_() not implemented and should never be called.\n" 1030 <<
"Contact a Framework developer\n";
1035 <<
"NoProcessProductResolver::resetBranchDescription_() not implemented and should never be called.\n" 1036 <<
"Contact a Framework developer\n";
1041 <<
"NoProcessProductResolver::provenance_() not implemented and should never be called.\n" 1042 <<
"Contact a Framework developer\n";
1047 <<
"NoProcessProductResolver::connectTo() not implemented and should never be called.\n" 1048 <<
"Contact a Framework developer\n";
1055 bool skipCurrentProcess,
1062 ->resolveProduct(principal,
1063 skipCurrentProcess, sra, mcc);
1068 bool skipCurrentProcess,
1073 ->prefetchAsync(waitTask,principal,
1074 skipCurrentProcess, token, sra, mcc);
1096 <<
"SingleChoiceNoProcessProductResolver::unscheduledWasNotRun_() not implemented and should never be called.\n" 1097 <<
"Contact a Framework developer\n";
1102 <<
"SingleChoiceNoProcessProductResolver::productUnavailable_() not implemented and should never be called.\n" 1103 <<
"Contact a Framework developer\n";
1108 <<
"SingleChoiceNoProcessProductResolver::productResolved_() not implemented and should never be called.\n" 1109 <<
"Contact a Framework developer\n";
1114 <<
"SingleChoiceNoProcessProductResolver::productWasDeleted_() not implemented and should never be called.\n" 1115 <<
"Contact a Framework developer\n";
1120 <<
"SingleChoiceNoProcessProductResolver::productWasFetchedAndIsValid_() not implemented and should never be called.\n" 1121 <<
"Contact a Framework developer\n";
1127 <<
"SingleChoiceNoProcessProductResolver::putProduct_() not implemented and should never be called.\n" 1128 <<
"Contact a Framework developer\n";
1133 <<
"SingleChoiceNoProcessProductResolver::putOrMergeProduct_(std::unique_ptr<WrapperBase> edp, MergeableRunProductMetadata const*) not implemented and should never be called.\n" 1134 <<
"Contact a Framework developer\n";
1139 <<
"SingleChoiceNoProcessProductResolver::branchDescription_() not implemented and should never be called.\n" 1140 <<
"Contact a Framework developer\n";
1145 <<
"SingleChoiceNoProcessProductResolver::resetBranchDescription_() not implemented and should never be called.\n" 1146 <<
"Contact a Framework developer\n";
1151 <<
"SingleChoiceNoProcessProductResolver::provenance_() not implemented and should never be called.\n" 1152 <<
"Contact a Framework developer\n";
1157 <<
"SingleChoiceNoProcessProductResolver::connectTo() not implemented and should never be called.\n" 1158 <<
"Contact a Framework developer\n";
void connectTo(ProductResolverBase const &iOther, Principal const *) final
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
std::string const & branchName() const
std::string const & productInstanceName() const
std::unique_ptr< T, F > make_sentry(T *iObject, F iFunc)
NOTE: if iObject is null, then iFunc will not be called.
void resetProductData_(bool deleteEarly) override
Provenance const * provenance() const
BranchType const & branchType() const
void setProcessHistory(ProcessHistory const &ph)
unsigned int ProductResolverIndex
StreamContext const * getStreamContext() const
void checkType(WrapperBase const &prod) const
std::type_info const & dynamicTypeInfo() const
void prefetchAsync(WaitingTask *waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
unsigned int unsetIndexValue() const
void resetProductData_(bool deleteEarly) override
void prefetchAsync_(WaitingTask *waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
FunctorTask< F > * make_functor_task(ALLOC &&iAlloc, F f)
void setCache(bool skipCurrentProcess, ProductResolverIndex index, std::exception_ptr exceptionPtr) const
void add(WaitingTask *)
Adds task to the waiting list.
void setProcessHistory_(ProcessHistory const &ph) override
ProductStatus status() const
bool singleProduct_() const override
bool unscheduledWasNotRun_() const override
void putProduct_(std::unique_ptr< WrapperBase > edp) const override
void throwNullRealProduct() const
Resolution tryResolver(unsigned int index, Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
WrapperBase const * wrapper() const
WaitingTaskList skippingWaitingTasks_
std::string const & processName() const
bool singleProduct_() const override
void resetProductData_(bool deleteEarly) override
ProductProvenance const * productProvenance() const
void push(T &&iAction)
asynchronously pushes functor iAction into queue
Resolution resolveProduct(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
void setProvenance_(ProductProvenanceRetriever const *provRetriever, ProcessHistory const &ph, ProductID const &pid) override
void reset()
Resets access to the resource so that added tasks will wait.
void connectTo(ProductResolverBase const &iOther, Principal const *) final
BranchDescription const & branchDescription_() const override
bool productResolved_() const final
static unsigned int kUnsetOffset
void resetProductData_(bool deleteEarly) override
std::string const & processName() const
void putOrMergeProduct_(std::unique_ptr< WrapperBase > prod, MergeableRunProductMetadata const *mergeableRunProductMetadata) const final
void connectTo(ProductResolverBase const &, Principal const *) final
void putProduct_(std::unique_ptr< WrapperBase > edp) const override
void putOrMergeProduct(std::unique_ptr< WrapperBase > edp, MergeableRunProductMetadata const *mergeableRunProductMetadata=nullptr) const
void throwProductDeletedException() const
bool productUnavailable_() const final
ProductProvenance const * productProvenancePtr_() const override
static unsigned int kMissingOffset
bool productResolved_() const final
void putProduct(std::unique_ptr< WrapperBase > edp) const
WaitingTaskList waitingTasks_
void unsafe_setWrapper(std::unique_ptr< WrapperBase > iValue) const
void prefetchFailed(unsigned int iProcessingIndex, Principal const &principal, bool iSkipCurrentProcess, std::exception_ptr iExceptPtr) const
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
void setProvenance(ProductProvenanceRetriever const *provRetriever, ProcessHistory const &ph, ProductID const &pid)
void mergeProduct(std::unique_ptr< WrapperBase > edp, MergeableRunProductMetadata const *) const
std::string const & className() const
std::atomic< unsigned int > lastSkipCurrentCheckIndex_
bool singleProduct_() const override
bool productWasDeleted() const
Provenance const * provenance_() const override
std::vector< unsigned int > const & lookupProcessOrder() const
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
void putOrMergeProduct_(std::unique_ptr< WrapperBase > prod, MergeableRunProductMetadata const *mergeableRunProductMetadata) const final
Provenance const * provenance_() const override
bool dataValidFromResolver(unsigned int iProcessingIndex, Principal const &principal, bool iSkipCurrentProcess) const
void setProvenance_(ProductProvenanceRetriever const *provRetriever, ProcessHistory const &ph, ProductID const &pid) override
TypeID unwrappedTypeID() const
void resetProductData_(bool deleteEarly) override
BranchDescription const & branchDescription_() const final
void setProcessHistory_(ProcessHistory const &ph) override
ProductProvenance const * productProvenancePtr_() const override
bool isFromCurrentProcess() const final
bool productUnavailable_() const override
void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) override
ProductProvenance const * productProvenancePtr_() const override
std::atomic< bool > prefetchRequested_
ProductProvenance const * productProvenancePtr_() const override
bool productResolved_() const final
std::atomic< unsigned int > lastCheckIndex_
TypeWithDict const & unwrappedType() const
void setProvenance_(ProductProvenanceRetriever const *provRetriever, ProcessHistory const &ph, ProductID const &pid) final
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
void setMergeableRunProductMetadata(MergeableRunProductMetadataBase const *mrpm)
std::type_info const & unvalidatedTypeInfo() const
bool productWasDeleted_() const override
void putProduct_(std::unique_ptr< WrapperBase > edp) const override
virtual bool isFromCurrentProcess() const =0
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
void setProduct(std::unique_ptr< WrapperBase > edp) const
void prefetchAsync_(WaitingTask *waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
NoProcessProductResolver(std::vector< ProductResolverIndex > const &matchingHolders, std::vector< bool > const &ambiguous, bool madeAtEnd)
std::atomic< bool > skippingPrefetchRequested_
std::atomic< ProductStatus > theStatus_
std::vector< bool > ambiguous_
Resolution resolveProductImpl(FUNC resolver) const
DelayedReader * reader() const
void putOrMergeProduct_(std::unique_ptr< WrapperBase > prod, MergeableRunProductMetadata const *mergeableRunProductMetadata) const final
UnscheduledAuxiliary const * auxiliary() const
void resetProductData_(bool deleteEarly) override
static unsigned int kAmbiguousOffset
void setupUnscheduled(UnscheduledConfigurator const &) final
ProductStatus defaultStatus() const
bool productWasFetchedAndIsValid(bool iSkipCurrentProcess) const
void setMergeableRunProductMetadataInProductData(MergeableRunProductMetadata const *)
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const final
void setProcessHistory_(ProcessHistory const &ph) override
BranchDescription const & branchDescription_() const override
bool productWasDeleted_() const final
FunctorWaitingTask< F > * make_waiting_task(ALLOC &&iAlloc, F f)
void putOrMergeProduct_(std::unique_ptr< WrapperBase > prod, MergeableRunProductMetadata const *mergeableRunProductMetadata) const final
bool productUnavailable_() const override
void addContext(std::string const &context)
bool singleProduct_() const override
std::vector< ProductResolverIndex > matchingHolders_
void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) override
void tryPrefetchResolverAsync(unsigned int iProcessingIndex, Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc, ServiceToken token) const
BranchDescription const & branchDescription() const
Worker * findWorker(std::string const &iLabel) const
ConstProductResolverPtr getProductResolverByIndex(ProductResolverIndex const &oid) const
ProductProvenance const * productProvenancePtr_() const final
void putProduct_(std::unique_ptr< WrapperBase > edp) const override
void setProvenance_(ProductProvenanceRetriever const *provRetriever, ProcessHistory const &ph, ProductID const &pid) override
void setProcessHistory_(ProcessHistory const &ph) override
void putProduct_(std::unique_ptr< WrapperBase > edp) const override
void setupUnscheduled(UnscheduledConfigurator const &) final
bool productResolved() const
ProductData const & getProductData() const
bool productWasDeleted_() const override
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override
void resetProductData_(bool deleteEarly) override
bool unscheduledWasNotRun_() const override
bool singleProduct_() const final
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
void setProvenance_(ProductProvenanceRetriever const *provRetriever, ProcessHistory const &ph, ProductID const &pid) override
static Resolution makeAmbiguous()
void setProcessHistory_(ProcessHistory const &ph) final
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override
void prefetchAsync_(WaitingTask *waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
void putOrMergeProduct_(std::unique_ptr< WrapperBase > prod, MergeableRunProductMetadata const *mergeableRunProductMetadata) const final
def branchType(schema, name)
std::string const & moduleLabel() const
WrapperBase * unsafe_wrapper() const
static HepMC::HEPEVT_Wrapper wrapper
void putProduct_(std::unique_ptr< WrapperBase > edp) const override
void prefetchAsync_(WaitingTask *waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
void setFailedStatus() const