35 exception <<
"DataManagingProductResolver::resolveProduct_: The product matching all criteria was already deleted\n"
37 <<
"Looking for module label: " <<
moduleLabel() <<
"\n"
40 <<
"This means there is a configuration error.\n"
41 <<
"The module which is asking for this data must be configured to state that it will read this data.";
46 template <
bool callResolver,
typename FUNC>
51 auto presentStatus =
status();
56 auto failedStatusSetter = [
this](
ProductStatus* iPresentStatus) {
60 *iPresentStatus = this->
status();
62 std::unique_ptr<ProductStatus, decltype(failedStatusSetter)> failedStatusGuard(&presentStatus,
71 if (pd->wrapper()->isPresent()) {
96 if (
original->isPresent() != iFrom->isPresent()) {
99 <<
"Was trying to merge objects where one product had been put in the input file and the other had not "
102 <<
"The solution is to drop the branch on input. Or better do not create inconsistent files\n"
103 <<
"that need to be merged in the first place.\n";
107 if (mergeableRunProductMetadata ==
nullptr || desc.
branchType() !=
InRun) {
108 original->mergeProduct(iFrom.get());
113 original->mergeProduct(iFrom.get());
128 }
else if (
original->hasIsProductEqual()) {
129 if (
original->isPresent() && iFrom->isPresent()) {
130 if (!
original->isProductEqual(iFrom.get())) {
133 <<
"ProductResolver::mergeTheProduct\n"
134 <<
"Two run/lumi products for the same run/lumi which should be equal are not\n"
135 <<
"Using the first, ignoring the second\n"
136 <<
"className = " <<
bd.className() <<
"\n"
137 <<
"moduleLabel = " <<
bd.moduleLabel() <<
"\n"
138 <<
"instance = " <<
bd.productInstanceName() <<
"\n"
139 <<
"process = " <<
bd.processName() <<
"\n";
141 }
else if (!
original->isPresent() && iFrom->isPresent()) {
147 edm::LogWarning(
"RunLumiMerging") <<
"ProductResolver::mergeTheProduct\n"
148 <<
"Run/lumi product has neither a mergeProduct nor isProductEqual function\n"
149 <<
"Using the first, ignoring the second in merge\n"
150 <<
"className = " <<
bd.className() <<
"\n"
151 <<
"moduleLabel = " <<
bd.moduleLabel() <<
"\n"
152 <<
"instance = " <<
bd.productInstanceName() <<
"\n"
153 <<
"process = " <<
bd.processName() <<
"\n";
154 if (!
original->isPresent() && iFrom->isPresent()) {
163 return resolveProductImpl<true>([
this, &principal, mcc]() {
164 auto branchType = principal.branchType();
175 if (branchType ==
InEvent and aux_) {
176 aux_->postModuleDelayedGetSignal_.emit(*(iContext->
getStreamContext()), *iContext);
180 if (
auto reader = principal.reader()) {
181 std::unique_lock<std::recursive_mutex> guard;
182 if (
auto sr =
reader->sharedResources().second) {
183 guard = std::unique_lock<std::recursive_mutex>(*sr);
196 std::unique_lock<std::recursive_mutex> guard;
197 if (
auto sr =
reader->sharedResources().second) {
198 guard = std::unique_lock<std::recursive_mutex>(*sr);
205 if (edp.get() !=
nullptr) {
210 <<
"Mergeable data types written to a Run must have the swap member function defined"
219 <<
"The product branch was dropped in the first run or lumi fragment and present in a later one"
221 <<
"The solution is to drop the branch on input. Or better do not create inconsistent files\n"
222 <<
"that need to be merged in the first place.\n";
229 <<
"The product branch was present in first run or lumi fragment and dropped in a later one"
231 <<
"The solution is to drop the branch on input. Or better do not create inconsistent files\n"
232 <<
"that need to be merged in the first place.\n";
255 bool skipCurrentProcess,
260 bool expected =
false;
264 if (prefetchRequested) {
266 auto workToDo = [
this, mcc, &principal, weakToken]() {
271 resolveProductImpl<true>([
this, &principal, mcc]() {
272 if (principal.branchType() !=
InEvent && principal.branchType() !=
InProcess) {
275 if (
auto reader = principal.reader()) {
276 std::unique_lock<std::recursive_mutex> guard;
277 if (
auto sr =
reader->sharedResources().second) {
278 guard = std::unique_lock<std::recursive_mutex>(*sr);
294 if (
auto reader = principal.reader()) {
295 if (
auto shared_res =
reader->sharedResources().first) {
296 queue = &(shared_res->serialQueueChain());
300 queue->
push(*waitTask.
group(), workToDo);
304 waitTask.
group()->run([
t]() {
313 if (not deleteEarly) {
338 bool skipCurrentProcess,
341 return resolveProductImpl<false>([]() {
return; });
346 bool skipCurrentProcess,
356 bool skipCurrentProcess,
359 if (!skipCurrentProcess) {
361 return resolveProductImpl<false>([]() {
return; });
368 bool skipCurrentProcess,
372 if (not skipCurrentProcess) {
387 bool expected =
false;
391 if (
worker_ and prefetchRequested) {
398 if (
nullptr != iException) {
411 bool expected =
false;
418 if (not deleteEarly) {
435 bool skipCurrentProcess,
438 if (!skipCurrentProcess and
worker_) {
439 return resolveProductImpl<false>([] {});
446 bool skipCurrentProcess,
450 if (skipCurrentProcess) {
454 throw cms::Exception(
"LogicError") <<
"UnscheduledProductResolver::prefetchAsync_() called with null worker_. "
455 "This should not happen, please contact framework developers.";
458 bool expected =
false;
461 if (prefetchRequested) {
469 resolveProductImpl<true>([iPtr]() {
471 std::rethrow_exception(*iPtr);
494 if (not deleteEarly) {
522 <<
"It is actually of type " << typeID.className() <<
".\n";
549 auto presentStatus =
status();
620 : realProduct_(realProduct), productData_(std::
move(bd)), prefetchRequested_(
false) {
630 <<
"SwitchBaseProductResolver::connectTo() not implemented and should never be called.\n"
631 <<
"Contact a Framework developer\n";
639 if (res.
data() ==
nullptr)
664 if (not deleteEarly) {
682 bool skipCurrentProcess,
693 bool skipCurrentProcess,
697 if (skipCurrentProcess) {
705 bool expected =
false;
706 bool doPrefetchRequested =
prefetchRequested().compare_exchange_strong(expected,
true);
709 if (doPrefetchRequested) {
715 if (
nullptr != iException) {
730 <<
"This makes no sense for SwitchProducerProductResolver.\nContact a Framework developer";
735 bool expected =
false;
752 if (not deleteEarly) {
758 bool skipCurrentProcess,
766 bool skipCurrentProcess,
770 if (skipCurrentProcess) {
775 bool expected =
false;
776 bool doPrefetchRequested =
prefetchRequested().compare_exchange_strong(expected,
true);
779 if (doPrefetchRequested) {
785 if (
nullptr != iException) {
828 <<
"ParentProcessProductResolver::throwNullRealProduct RealProduct pointer not set in this context.\n"
829 <<
"Contact a Framework developer\n";
833 std::vector<bool>
const& ambiguous,
835 : matchingHolders_(matchingHolders),
836 ambiguous_(ambiguous),
838 lastSkipCurrentCheckIndex_(lastCheckIndex_.
load()),
839 prefetchRequested_(
false),
840 skippingPrefetchRequested_(
false),
841 madeAtEnd_{madeAtEnd} {
842 assert(ambiguous_.size() == matchingHolders_.size());
847 bool skipCurrentProcess,
851 return productResolver->
resolveProduct(principal, skipCurrentProcess, sra, mcc);
855 bool skipCurrentProcess,
860 const unsigned int choiceSize =
ambiguous_.size();
863 if ((not skipCurrentProcess) and (
madeAtEnd_ and mcc)) {
864 skipCurrentProcess = not mcc->parent().isAtEndTransition();
874 return tryResolver(checkCacheIndex, principal, skipCurrentProcess, sra, mcc);
880 for (
unsigned int k : lookupProcessOrder) {
891 updateCacheIndex =
k;
903 bool skipCurrentProcess,
907 bool timeToMakeAtEnd =
true;
909 timeToMakeAtEnd = mcc->parent().isAtEndTransition();
913 if (not skipCurrentProcess and timeToMakeAtEnd) {
915 bool expected =
false;
919 if (prefetchRequested) {
925 bool expected =
false;
935 std::exception_ptr iExceptPtr)
const {
936 if (not iSkipCurrentProcess) {
949 unsigned int iResolverIndex,
953 bool iSkipCurrentProcess,
955 tbb::task_group* iGroup)
956 : resolver_(iResolver),
957 principal_(iPrincipal),
961 serviceToken_(iToken),
962 index_(iResolverIndex),
963 skipCurrentProcess_(iSkipCurrentProcess) {}
965 void execute() final {
966 auto exceptPtr = exceptionPtr();
968 resolver_->prefetchFailed(index_, *principal_, skipCurrentProcess_, *exceptPtr);
970 if (not resolver_->dataValidFromResolver(index_, *principal_, skipCurrentProcess_)) {
971 resolver_->tryPrefetchResolverAsync(
972 index_ + 1, *principal_, skipCurrentProcess_, sra_, mcc_, serviceToken_.lock(), group_);
978 NoProcessProductResolver
const* resolver_;
979 Principal
const* principal_;
981 ModuleCallingContext
const* mcc_;
982 tbb::task_group* group_;
983 ServiceWeakToken serviceToken_;
985 bool skipCurrentProcess_;
991 bool iSkipCurrentProcess,
992 std::exception_ptr iExceptPtr)
const {
994 auto k = lookupProcessOrder[iProcessingIndex];
996 setCache(iSkipCurrentProcess,
k, iExceptPtr);
1001 bool iSkipCurrentProcess)
const {
1002 std::vector<unsigned int>
const& lookupProcessOrder = principal.
lookupProcessOrder();
1003 auto k = lookupProcessOrder[iProcessingIndex];
1007 setCache(iSkipCurrentProcess, k,
nullptr);
1015 bool skipCurrentProcess,
1019 tbb::task_group*
group)
const {
1020 std::vector<unsigned int>
const& lookupProcessOrder = principal.
lookupProcessOrder();
1021 auto index = iProcessingIndex;
1023 const unsigned int choiceSize =
ambiguous_.size();
1025 while (
index < lookupProcessOrder.size()) {
1026 auto k = lookupProcessOrder[
index];
1038 auto task =
new TryNextResolverWaitingTask(
this,
index, &principal, sra, mcc, skipCurrentProcess, token, group);
1045 productResolver->
prefetchAsync(hTask, principal, skipCurrentProcess, token, sra, mcc);
1051 setCache(skipCurrentProcess, newCacheIndex,
nullptr);
1079 <<
"NoProcessProductResolver::unscheduledWasNotRun_() not implemented and should never be called.\n"
1080 <<
"Contact a Framework developer\n";
1085 <<
"NoProcessProductResolver::productUnavailable_() not implemented and should never be called.\n"
1086 <<
"Contact a Framework developer\n";
1091 <<
"NoProcessProductResolver::productResolved_() not implemented and should never be called.\n"
1092 <<
"Contact a Framework developer\n";
1097 <<
"NoProcessProductResolver::productWasDeleted_() not implemented and should never be called.\n"
1098 <<
"Contact a Framework developer\n";
1103 <<
"NoProcessProductResolver::productWasFetchedAndIsValid_() not implemented and should never be called.\n"
1104 <<
"Contact a Framework developer\n";
1109 <<
"NoProcessProductResolver::branchDescription_() not implemented and should never be called.\n"
1110 <<
"Contact a Framework developer\n";
1115 <<
"NoProcessProductResolver::resetBranchDescription_() not implemented and should never be called.\n"
1116 <<
"Contact a Framework developer\n";
1121 <<
"NoProcessProductResolver::provenance_() not implemented and should never be called.\n"
1122 <<
"Contact a Framework developer\n";
1127 <<
"NoProcessProductResolver::connectTo() not implemented and should never be called.\n"
1128 <<
"Contact a Framework developer\n";
1134 bool skipCurrentProcess,
1140 ->resolveProduct(principal, skipCurrentProcess, sra, mcc);
1145 bool skipCurrentProcess,
1150 ->prefetchAsync(waitTask, principal, skipCurrentProcess, token, sra, mcc);
1165 <<
"SingleChoiceNoProcessProductResolver::unscheduledWasNotRun_() not implemented and should never be called.\n"
1166 <<
"Contact a Framework developer\n";
1171 <<
"SingleChoiceNoProcessProductResolver::productUnavailable_() not implemented and should never be called.\n"
1172 <<
"Contact a Framework developer\n";
1177 <<
"SingleChoiceNoProcessProductResolver::productResolved_() not implemented and should never be called.\n"
1178 <<
"Contact a Framework developer\n";
1183 <<
"SingleChoiceNoProcessProductResolver::productWasDeleted_() not implemented and should never be called.\n"
1184 <<
"Contact a Framework developer\n";
1189 "implemented and should never be called.\n"
1190 <<
"Contact a Framework developer\n";
1195 <<
"SingleChoiceNoProcessProductResolver::branchDescription_() not implemented and should never be called.\n"
1196 <<
"Contact a Framework developer\n";
1201 "implemented and should never be called.\n"
1202 <<
"Contact a Framework developer\n";
1207 <<
"SingleChoiceNoProcessProductResolver::provenance_() not implemented and should never be called.\n"
1208 <<
"Contact a Framework developer\n";
1213 <<
"SingleChoiceNoProcessProductResolver::connectTo() not implemented and should never be called.\n"
1214 <<
"Contact a Framework developer\n";
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) override
void connectTo(ProductResolverBase const &iOther, Principal const *) final
ProductProvenance const * productProvenancePtr_() const override
void setProductID(ProductID const &pid)
ProductData const & getProductData() const final
Provenance const & provenance() const
std::string const & branchName() const
ProductProvenanceLookup const * store() const
ServiceToken lock() const
std::string const & productInstanceName() const
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) final
bool isAtEndTransition() const
std::unique_ptr< T, F > make_sentry(T *iObject, F iFunc)
NOTE: if iObject is null, then iFunc will not be called.
DataManagingOrAliasProductResolver const & realProduct() const
void resetProductData_(bool deleteEarly) override
bool productWasDeleted_() const override
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
Provenance const * provenance() const
BranchType const & branchType() const
void prefetchAsync(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
static constexpr unsigned int kAmbiguousOffset
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const final
WaitingTaskList & waitingTasks() const
bool singleProduct_() const override
unsigned int ProductResolverIndex
StreamContext const * getStreamContext() const
SwitchProducerProductResolver(std::shared_ptr< BranchDescription const > bd, DataManagingOrAliasProductResolver &realProduct)
static constexpr unsigned int kMissingOffset
SwitchBaseProductResolver(std::shared_ptr< BranchDescription const > bd, DataManagingOrAliasProductResolver &realProduct)
void checkType(WrapperBase const &prod) const
std::type_info const & dynamicTypeInfo() const
Resolution resolveProductImpl(Resolution) 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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
WaitingTaskList m_waitingTasks
unsigned int unsetIndexValue() const
std::shared_ptr< BranchDescription const > bd_
void push(tbb::task_group &iGroup, T &&iAction)
asynchronously pushes functor iAction into queue
void resetProductData_(bool deleteEarly) override
EventPrincipal & principal()
void setProductID_(ProductID const &pid) final
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) override
void setCache(bool skipCurrentProcess, ProductResolverIndex index, std::exception_ptr exceptionPtr) const
void putProduct(std::unique_ptr< WrapperBase > edp) const final
std::atomic< bool > prefetchRequested_
ProductStatus status() const
void resetProductData_(bool deleteEarly) final
void unsafe_setWrapperAndProvenance() const
void throwNullRealProduct() const
void doWorkAsync(WaitingTaskHolder, typename T::TransitionInfoType const &, ServiceToken const &, StreamID, ParentContext const &, typename T::Context const *)
Resolution tryResolver(unsigned int index, Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const final
WrapperBase const * wrapper() const
bool singleProduct_() const final
WaitingTaskList skippingWaitingTasks_
ProductProvenance const * branchIDToProvenance(BranchID const &bid) const
std::string const & processName() const
void resetProductData_(bool deleteEarly) override
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override
ProductProvenance const * productProvenance() const
bool unscheduledWasNotRun_() const override
Resolution resolveProduct(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
bool singleProduct_() const override
Log< level::Error, false > LogError
bool productUnavailable_() const override
std::atomic< bool > prefetchRequested_
void reset()
Resets access to the resource so that added tasks will wait.
ProductProvenanceRetriever const * provRetriever_
void connectTo(ProductResolverBase const &iOther, Principal const *) final
ProductData const & getProductData() const final
bool productUnavailable() const
BranchDescription const & branchDescription_() const override
void resetProductData_(bool deleteEarly) override
std::string const & processName() const
WaitingTaskList waitingTasks_
Provenance const * provenance_() const override
void connectTo(ProductResolverBase const &, Principal const *) final
ParentContext const & parent() const
void setProductID(ProductID const &pid)
DataManagingOrAliasProductResolver & realProduct_
bool productUnavailable_() const final
void throwProductDeletedException() const
WaitingTaskList waitingTasks_
bool singleProduct_() const override
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 setProductID_(ProductID const &pid) override
UnscheduledAuxiliary const * aux_
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
bool productWasDeleted_() const final
virtual bool isFromCurrentProcess() const =0
void setupUnscheduled(UnscheduledConfigurator const &iConfigure) final
std::string const & className() const
bool productResolved_() const final
std::atomic< unsigned int > lastSkipCurrentCheckIndex_
BranchDescription const & branchDescription_() const override
bool productWasDeleted() const
std::vector< unsigned int > const & lookupProcessOrder() const
std::atomic< bool > prefetchRequested_
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const final
void resetProductData_(bool deleteEarly) override
bool dataValidFromResolver(unsigned int iProcessingIndex, Principal const &principal, bool iSkipCurrentProcess) const
StreamID streamID() const
TypeID unwrappedTypeID() const
void resetProductData_(bool deleteEarly) override
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
bool isFromCurrentProcess() const final
ProductProvenance const * productProvenancePtr_() const final
bool productResolved_() const final
static constexpr const ProductStatus defaultStatus_
void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) override
FunctorWaitingTask< F > * make_waiting_task(F f)
std::atomic< bool > prefetchRequested_
std::atomic< unsigned int > lastCheckIndex_
TypeWithDict const & unwrappedType() const
void callWhenDoneAsync(WaitingTaskHolder task)
void setProductID_(ProductID const &pid) override
EventTransitionInfo const & eventTransitionInfo() const
void setMergeableRunProductMetadata(MergeableRunProductMetadataBase const *mrpm)
std::type_info const & unvalidatedTypeInfo() const
void setProductID_(ProductID const &pid) final
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
void add(tbb::task_group *, WaitingTask *)
Adds task to the waiting list.
void setProduct(std::unique_ptr< WrapperBase > edp) const
NoProcessProductResolver(std::vector< ProductResolverIndex > const &matchingHolders, std::vector< bool > const &ambiguous, bool madeAtEnd)
std::atomic< bool > skippingPrefetchRequested_
ProductProvenance const * productProvenancePtr_() const override
std::atomic< ProductStatus > theStatus_
std::vector< bool > ambiguous_
Resolution resolveProductImpl(FUNC resolver) const
DelayedReader * reader() const
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) override
UnscheduledAuxiliary const * auxiliary() const
static constexpr unsigned int kUnsetOffset
void resetProductData_(bool deleteEarly) override
bool productResolved_() const final
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) override
bool singleProduct_() const override
void setupUnscheduled(UnscheduledConfigurator const &) final
ProductStatus defaultStatus() const
ProductData const * data() const
bool productWasFetchedAndIsValid(bool iSkipCurrentProcess) const
void setMergeableRunProductMetadataInProductData(MergeableRunProductMetadata const *)
void setProvenance(ProductProvenanceLookup const *provRetriever)
FunctorTask< F > * make_functor_task(F f)
void insertIntoSet(ProductProvenance provenanceProduct) const
void setProductID_(ProductID const &pid) override
DataManagingOrAliasProductResolver & realProduct_
tbb::task_group * group() const noexcept
std::vector< ProductResolverIndex > matchingHolders_
void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) override
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
Transition transition() const
BranchDescription const & branchDescription() const
Worker * findWorker(std::string const &iLabel) const
ConstProductResolverPtr getProductResolverByIndex(ProductResolverIndex const &oid) const
void tryPrefetchResolverAsync(unsigned int iProcessingIndex, Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc, ServiceToken token, tbb::task_group *) const
bool unscheduledWasNotRun_() const override
void setParents(std::vector< BranchID > parents)
bool productWasDeleted_() const override
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
void setupUnscheduled(UnscheduledConfigurator const &) final
bool productResolved() const
void resetProductData_(bool deleteEarly) override=0
BranchID const & originalBranchID() const
Provenance const * provenance_() const override
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const final
bool availableOnlyAtEndTransition() const
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
Log< level::Warning, false > LogWarning
void resetProductData_(bool deleteEarly) override
ProductProvenance const * productProvenancePtr_() const override
std::atomic< bool > & prefetchRequested() const
bool productResolved_() const final
static ParentageRegistry * instance()
bool productUnavailable_() const override
GlobalContext const * globalContext() const
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override
ProductProvenance const * productProvenancePtr_() const override
static Resolution makeAmbiguous()
void setProductID_(ProductID const &pid) override
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const final
tuple size
Write out results.
WaitingTaskList waitingTasks_
bool insertMapped(value_type const &v)
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) final
std::string const & moduleLabel() const
void putProduct(std::unique_ptr< WrapperBase > edp) const override
void setProductProvenanceRetriever(ProductProvenanceRetriever const *provRetriever)
WrapperBase * unsafe_wrapper() const
bool productUnavailable_() const final
static HepMC::HEPEVT_Wrapper wrapper
ProductResolverIndex realResolverIndex_
void putProduct(std::unique_ptr< WrapperBase > edp) const override
void setFailedStatus() const
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
void connectTo(ProductResolverBase const &iOther, Principal const *iParentPrincipal) final