|
|
Go to the documentation of this file.
36 exception <<
"DataManagingProductResolver::resolveProduct_: The product matching all criteria was already deleted\n"
38 <<
"Looking for module label: " <<
moduleLabel() <<
"\n"
41 <<
"This means there is a configuration error.\n"
42 <<
"The module which is asking for this data must be configured to state that it will read this data.";
47 template <
bool callResolver,
typename FUNC>
52 auto presentStatus =
status();
57 auto failedStatusSetter = [
this](
ProductStatus* iPresentStatus) {
61 *iPresentStatus = this->
status();
72 if (pd->wrapper()->isPresent()) {
97 if (
original->isPresent() != iFrom->isPresent()) {
100 <<
"Was trying to merge objects where one product had been put in the input file and the other had not "
103 <<
"The solution is to drop the branch on input. Or better do not create inconsistent files\n"
104 <<
"that need to be merged in the first place.\n";
108 if (mergeableRunProductMetadata ==
nullptr ||
desc.branchType() !=
InRun) {
109 original->mergeProduct(iFrom.get());
114 original->mergeProduct(iFrom.get());
129 }
else if (
original->hasIsProductEqual()) {
130 if (
original->isPresent() && iFrom->isPresent()) {
131 if (!
original->isProductEqual(iFrom.get())) {
134 <<
"ProductResolver::mergeTheProduct\n"
135 <<
"Two run/lumi products for the same run/lumi which should be equal are not\n"
136 <<
"Using the first, ignoring the second\n"
137 <<
"className = " <<
bd.className() <<
"\n"
138 <<
"moduleLabel = " <<
bd.moduleLabel() <<
"\n"
139 <<
"instance = " <<
bd.productInstanceName() <<
"\n"
140 <<
"process = " <<
bd.processName() <<
"\n";
142 }
else if (!
original->isPresent() && iFrom->isPresent()) {
148 edm::LogWarning(
"RunLumiMerging") <<
"ProductResolver::mergeTheProduct\n"
149 <<
"Run/lumi product has neither a mergeProduct nor isProductEqual function\n"
150 <<
"Using the first, ignoring the second in merge\n"
151 <<
"className = " <<
bd.className() <<
"\n"
152 <<
"moduleLabel = " <<
bd.moduleLabel() <<
"\n"
153 <<
"instance = " <<
bd.productInstanceName() <<
"\n"
154 <<
"process = " <<
bd.processName() <<
"\n";
155 if (!
original->isPresent() && iFrom->isPresent()) {
164 return resolveProductImpl<true>([
this, &principal, mcc]() {
182 std::unique_lock<std::recursive_mutex> guard;
183 if (
auto sr =
reader->sharedResources().second) {
184 guard = std::unique_lock<std::recursive_mutex>(*sr);
197 std::unique_lock<std::recursive_mutex> guard;
198 if (
auto sr =
reader->sharedResources().second) {
199 guard = std::unique_lock<std::recursive_mutex>(*sr);
206 if (edp.get() !=
nullptr) {
211 <<
"Mergeable data types written to a Run must have the swap member function defined"
220 <<
"The product branch was dropped in the first run or lumi fragment and present in a later one"
222 <<
"The solution is to drop the branch on input. Or better do not create inconsistent files\n"
223 <<
"that need to be merged in the first place.\n";
230 <<
"The product branch was present in first run or lumi fragment and dropped in a later one"
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";
256 bool skipCurrentProcess,
261 bool expected =
false;
265 if (prefetchRequested) {
267 auto workToDo = [
this, mcc, &principal, weakToken]() {
272 resolveProductImpl<true>([
this, &principal, mcc]() {
273 if (principal.branchType() !=
InEvent) {
276 if (
auto reader = principal.reader()) {
277 std::unique_lock<std::recursive_mutex> guard;
278 if (
auto sr =
reader->sharedResources().second) {
279 guard = std::unique_lock<std::recursive_mutex>(*sr);
295 if (
auto reader = principal.reader()) {
296 if (
auto shared_res =
reader->sharedResources().first) {
297 queue = &(shared_res->serialQueueChain());
305 waitTask.
group()->run([
t]() {
314 if (not deleteEarly) {
339 bool skipCurrentProcess,
342 return resolveProductImpl<false>([]() {
return; });
347 bool skipCurrentProcess,
357 bool skipCurrentProcess,
360 if (!skipCurrentProcess) {
362 return resolveProductImpl<false>([]() {
return; });
369 bool skipCurrentProcess,
373 if (not skipCurrentProcess) {
375 if (not mcc->parent().isAtEndTransition()) {
380 bool expected =
false;
384 if (
worker_ and prefetchRequested) {
391 if (
nullptr != iException) {
404 bool expected =
false;
411 if (not deleteEarly) {
428 bool skipCurrentProcess,
431 if (!skipCurrentProcess and
worker_) {
432 return resolveProductImpl<true>([
this]() {
434 ex <<
"Attempting to run unscheduled module without doing prefetching";
435 std::ostringstream ost;
447 bool skipCurrentProcess,
451 if (skipCurrentProcess) {
455 throw cms::Exception(
"LogicError") <<
"UnscheduledProductResolver::prefetchAsync_() called with null worker_. "
456 "This should not happen, please contact framework developers.";
459 bool expected =
false;
462 if (prefetchRequested) {
470 resolveProductImpl<true>([iPtr]() {
472 std::rethrow_exception(*iPtr);
488 info.principal().streamID(),
495 if (not deleteEarly) {
523 <<
"It is actually of type " << typeID.className() <<
".\n";
550 auto presentStatus =
status();
621 : realProduct_(realProduct), productData_(
std::
move(
bd)), prefetchRequested_(
false) {
631 <<
"SwitchBaseProductResolver::connectTo() not implemented and should never be called.\n"
632 <<
"Contact a Framework developer\n";
640 if (
res.data() ==
nullptr)
665 if (not deleteEarly) {
683 bool skipCurrentProcess,
694 bool skipCurrentProcess,
698 if (skipCurrentProcess) {
706 bool expected =
false;
707 bool doPrefetchRequested =
prefetchRequested().compare_exchange_strong(expected,
true);
710 if (doPrefetchRequested) {
716 if (
nullptr != iException) {
731 <<
"This makes no sense for SwitchProducerProductResolver.\nContact a Framework developer";
736 bool expected =
false;
753 if (not deleteEarly) {
759 bool skipCurrentProcess,
767 bool skipCurrentProcess,
771 if (skipCurrentProcess) {
776 bool expected =
false;
777 bool doPrefetchRequested =
prefetchRequested().compare_exchange_strong(expected,
true);
780 if (doPrefetchRequested) {
786 if (
nullptr != iException) {
829 <<
"ParentProcessProductResolver::throwNullRealProduct RealProduct pointer not set in this context.\n"
830 <<
"Contact a Framework developer\n";
834 std::vector<bool>
const& ambiguous,
836 : matchingHolders_(matchingHolders),
837 ambiguous_(ambiguous),
839 lastSkipCurrentCheckIndex_(lastCheckIndex_.
load()),
840 prefetchRequested_(
false),
841 skippingPrefetchRequested_(
false),
842 madeAtEnd_{madeAtEnd} {
843 assert(ambiguous_.size() == matchingHolders_.size());
848 bool skipCurrentProcess,
852 return productResolver->
resolveProduct(principal, skipCurrentProcess, sra, mcc);
856 bool skipCurrentProcess,
861 const unsigned int choiceSize =
ambiguous_.size();
864 if ((not skipCurrentProcess) and (
madeAtEnd_ and mcc)) {
865 skipCurrentProcess = not mcc->parent().isAtEndTransition();
875 return tryResolver(checkCacheIndex, principal, skipCurrentProcess, sra, mcc);
881 for (
unsigned int k : lookupProcessOrder) {
892 updateCacheIndex =
k;
904 bool skipCurrentProcess,
908 bool timeToMakeAtEnd =
true;
910 timeToMakeAtEnd = mcc->parent().isAtEndTransition();
914 if (not skipCurrentProcess and timeToMakeAtEnd) {
916 bool expected =
false;
920 if (prefetchRequested) {
926 bool expected =
false;
936 std::exception_ptr iExceptPtr)
const {
937 if (not iSkipCurrentProcess) {
950 unsigned int iResolverIndex,
954 bool iSkipCurrentProcess,
956 tbb::task_group* iGroup)
957 : resolver_(iResolver),
958 principal_(iPrincipal),
962 serviceToken_(iToken),
963 index_(iResolverIndex),
964 skipCurrentProcess_(iSkipCurrentProcess) {}
966 void execute() final {
967 auto exceptPtr = exceptionPtr();
969 resolver_->prefetchFailed(index_, *principal_, skipCurrentProcess_, *exceptPtr);
971 if (not resolver_->dataValidFromResolver(index_, *principal_, skipCurrentProcess_)) {
972 resolver_->tryPrefetchResolverAsync(
973 index_ + 1, *principal_, skipCurrentProcess_, sra_, mcc_, serviceToken_.lock(), group_);
979 NoProcessProductResolver
const* resolver_;
980 Principal
const* principal_;
982 ModuleCallingContext
const* mcc_;
983 tbb::task_group* group_;
984 ServiceWeakToken serviceToken_;
986 bool skipCurrentProcess_;
992 bool iSkipCurrentProcess,
993 std::exception_ptr iExceptPtr)
const {
995 auto k = lookupProcessOrder[iProcessingIndex];
997 setCache(iSkipCurrentProcess,
k, iExceptPtr);
1002 bool iSkipCurrentProcess)
const {
1003 std::vector<unsigned int>
const& lookupProcessOrder = principal.
lookupProcessOrder();
1004 auto k = lookupProcessOrder[iProcessingIndex];
1008 setCache(iSkipCurrentProcess,
k,
nullptr);
1016 bool skipCurrentProcess,
1020 tbb::task_group*
group)
const {
1021 std::vector<unsigned int>
const& lookupProcessOrder = principal.
lookupProcessOrder();
1022 auto index = iProcessingIndex;
1024 const unsigned int choiceSize =
ambiguous_.size();
1026 while (
index < lookupProcessOrder.size()) {
1027 auto k = lookupProcessOrder[
index];
1039 auto task =
new TryNextResolverWaitingTask(
this,
index, &principal, sra, mcc, skipCurrentProcess,
token,
group);
1046 productResolver->
prefetchAsync(hTask, principal, skipCurrentProcess,
token, sra, mcc);
1052 setCache(skipCurrentProcess, newCacheIndex,
nullptr);
1080 <<
"NoProcessProductResolver::unscheduledWasNotRun_() not implemented and should never be called.\n"
1081 <<
"Contact a Framework developer\n";
1086 <<
"NoProcessProductResolver::productUnavailable_() not implemented and should never be called.\n"
1087 <<
"Contact a Framework developer\n";
1092 <<
"NoProcessProductResolver::productResolved_() not implemented and should never be called.\n"
1093 <<
"Contact a Framework developer\n";
1098 <<
"NoProcessProductResolver::productWasDeleted_() not implemented and should never be called.\n"
1099 <<
"Contact a Framework developer\n";
1104 <<
"NoProcessProductResolver::productWasFetchedAndIsValid_() not implemented and should never be called.\n"
1105 <<
"Contact a Framework developer\n";
1110 <<
"NoProcessProductResolver::branchDescription_() not implemented and should never be called.\n"
1111 <<
"Contact a Framework developer\n";
1116 <<
"NoProcessProductResolver::resetBranchDescription_() not implemented and should never be called.\n"
1117 <<
"Contact a Framework developer\n";
1122 <<
"NoProcessProductResolver::provenance_() not implemented and should never be called.\n"
1123 <<
"Contact a Framework developer\n";
1128 <<
"NoProcessProductResolver::connectTo() not implemented and should never be called.\n"
1129 <<
"Contact a Framework developer\n";
1135 bool skipCurrentProcess,
1141 ->resolveProduct(principal, skipCurrentProcess, sra, mcc);
1146 bool skipCurrentProcess,
1151 ->prefetchAsync(waitTask, principal, skipCurrentProcess,
token, sra, mcc);
1166 <<
"SingleChoiceNoProcessProductResolver::unscheduledWasNotRun_() not implemented and should never be called.\n"
1167 <<
"Contact a Framework developer\n";
1172 <<
"SingleChoiceNoProcessProductResolver::productUnavailable_() not implemented and should never be called.\n"
1173 <<
"Contact a Framework developer\n";
1178 <<
"SingleChoiceNoProcessProductResolver::productResolved_() not implemented and should never be called.\n"
1179 <<
"Contact a Framework developer\n";
1184 <<
"SingleChoiceNoProcessProductResolver::productWasDeleted_() not implemented and should never be called.\n"
1185 <<
"Contact a Framework developer\n";
1190 "implemented and should never be called.\n"
1191 <<
"Contact a Framework developer\n";
1196 <<
"SingleChoiceNoProcessProductResolver::branchDescription_() not implemented and should never be called.\n"
1197 <<
"Contact a Framework developer\n";
1202 "implemented and should never be called.\n"
1203 <<
"Contact a Framework developer\n";
1208 <<
"SingleChoiceNoProcessProductResolver::provenance_() not implemented and should never be called.\n"
1209 <<
"Contact a Framework developer\n";
1214 <<
"SingleChoiceNoProcessProductResolver::connectTo() not implemented and should never be called.\n"
1215 <<
"Contact a Framework developer\n";
void setupUnscheduled(UnscheduledConfigurator const &) final
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const final
Provenance const * provenance() const
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
std::string const & moduleLabel() const
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const final
EventTransitionInfo const & eventTransitionInfo() const
unsigned int ProductResolverIndex
void setProductID_(ProductID const &pid) override
void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) override
std::vector< ProductResolverIndex > matchingHolders_
void addContext(std::string const &context)
std::shared_ptr< BranchDescription const > bd_
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
bool singleProduct_() const override
void emit(Args &&... args) const
unsigned int unsetIndexValue() const
NoProcessProductResolver(std::vector< ProductResolverIndex > const &matchingHolders, std::vector< bool > const &ambiguous, bool madeAtEnd)
void connectTo(ProductResolverBase const &iOther, Principal const *) final
TypeWithDict const & unwrappedType() const
bool unscheduledWasNotRun_() const override
std::vector< bool > ambiguous_
WrapperBase const * wrapper() const
void resetProductData_(bool deleteEarly) override
static constexpr unsigned int kAmbiguousOffset
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const final
std::type_info const & unvalidatedTypeInfo() const
ProductProvenance const * productProvenance() const
bool unscheduledWasNotRun_() const override
std::atomic< unsigned int > lastSkipCurrentCheckIndex_
WaitingTaskList waitingTasks_
void resetProductData_(bool deleteEarly) override
static ParentageRegistry * instance()
std::string const & moduleName() const
static constexpr unsigned int kMissingOffset
std::atomic< ProductStatus > theStatus_
void resetProductData_(bool deleteEarly) override
void resetProductData_(bool deleteEarly) override
bool productResolved() const
void prefetchFailed(unsigned int iProcessingIndex, Principal const &principal, bool iSkipCurrentProcess, std::exception_ptr iExceptPtr) const
void setMergeableRunProductMetadataInProductData(MergeableRunProductMetadata const *)
bool singleProduct_() const override
ProductProvenanceRetriever const * provRetriever_
static HepMC::HEPEVT_Wrapper wrapper
std::atomic< unsigned int > lastCheckIndex_
void setProductID_(ProductID const &pid) final
void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) override
ProductStatus defaultStatus() const
Log< level::Warning, false > LogWarning
WaitingTaskList & waitingTasks() const
Resolution tryResolver(unsigned int index, Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
ConstProductResolverPtr getProductResolverByIndex(ProductResolverIndex const &oid) const
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) override
ParentContext const & parent() const
Provenance const & provenance() const
void prefetchAsync(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
bool productUnavailable() const
void reset()
Resets access to the resource so that added tasks will wait.
FunctorTask< F > * make_functor_task(F f)
ModuleDescription const * description() const
std::atomic< bool > skippingPrefetchRequested_
void doWorkAsync(WaitingTaskHolder, typename T::TransitionInfoType const &, ServiceToken const &, StreamID, ParentContext const &, typename T::Context const *)
void insertIntoSet(ProductProvenance provenanceProduct) const
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
static constexpr unsigned int kUnsetOffset
void setProduct(std::unique_ptr< WrapperBase > edp) const
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) override
void throwNullRealProduct() const
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
bool singleProduct_() const override
void putProduct(std::unique_ptr< WrapperBase > edp) const override
DelayedReader * reader() const
Resolution resolveProductImpl(FUNC resolver) const
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override
Resolution resolveProductImpl(Resolution) const
bool productUnavailable_() const override
bool productUnavailable_() const final
BranchID const & originalBranchID() const
BranchType const & branchType() const
std::string const & processName() const
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
TypeID unwrappedTypeID() const
DataManagingOrAliasProductResolver const & realProduct() const
Resolution resolveProduct(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
WaitingTaskList waitingTasks_
UnscheduledAuxiliary const * aux_
bool productResolved_() const final
void throwProductDeletedException() const
ProductResolverIndex realResolverIndex_
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) override
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> preModuleDelayedGetSignal_
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) final
DataManagingOrAliasProductResolver & realProduct_
void setCache(bool skipCurrentProcess, ProductResolverIndex index, std::exception_ptr exceptionPtr) const
void setProductID(ProductID const &pid)
ProductProvenance const * productProvenancePtr_() const override
BranchDescription const & branchDescription_() const override
Provenance const * provenance_() const override
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) override
void setProvenance(ProductProvenanceRetriever const *provRetriever)
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
std::atomic< bool > prefetchRequested_
FunctorWaitingTask< F > * make_waiting_task(F f)
bool productResolved_() const final
StreamContext const * getStreamContext() const
void connectTo(ProductResolverBase const &iOther, Principal const *) final
void setupUnscheduled(UnscheduledConfigurator const &) final
std::atomic< bool > prefetchRequested_
void connectTo(ProductResolverBase const &iOther, Principal const *iParentPrincipal) final
BranchDescription const & branchDescription_() const override
void putProduct(std::unique_ptr< WrapperBase > edp) const override
void setProductID_(ProductID const &pid) final
void resetProductData_(bool deleteEarly) override=0
void resetProductData_(bool deleteEarly) override
bool productResolved_() const final
ProductProvenanceRetriever const * store() const
Worker * findWorker(std::string const &iLabel) const
void putProduct(std::unique_ptr< WrapperBase > edp) const final
WaitingTaskList m_waitingTasks
BranchType const & branchType() const
std::string const & branchName() const
ServiceToken lock() const
void callWhenDoneAsync(WaitingTaskHolder task)
bool productWasFetchedAndIsValid(bool iSkipCurrentProcess) const
Log< level::Error, false > LogError
std::vector< unsigned int > const & lookupProcessOrder() const
bool isFromCurrentProcess() const final
bool dataValidFromResolver(unsigned int iProcessingIndex, Principal const &principal, bool iSkipCurrentProcess) const
static Resolution makeAmbiguous()
WaitingTaskList waitingTasks_
void setProductID_(ProductID const &pid) override
std::string const & moduleLabel() const
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const final
void resetProductData_(bool deleteEarly) override
bool singleProduct_() const final
std::unique_ptr< T, impl::DeviceDeleter > unique_ptr
void resetProductData_(bool deleteEarly) override
void add(tbb::task_group *, WaitingTask *)
Adds task to the waiting list.
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
void resetProductData_(bool deleteEarly) override
UnscheduledAuxiliary const * auxiliary() const
void checkType(WrapperBase const &prod) const
WrapperBase * unsafe_wrapper() const
ProductStatus status() const
bool insertMapped(value_type const &v)
void setupUnscheduled(UnscheduledConfigurator const &iConfigure) final
ProductData const & getProductData() const final
BranchDescription const & branchDescription() const
bool productWasDeleted_() const override
WaitingTaskList skippingWaitingTasks_
ProductData const & getProductData() const final
SwitchProducerProductResolver(std::shared_ptr< BranchDescription const > bd, DataManagingOrAliasProductResolver &realProduct)
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override
void setMergeableRunProductMetadata(MergeableRunProductMetadataBase const *mrpm)
void setProductID_(ProductID const &pid) override
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) final
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
void setFailedStatus() const
ProductProvenance const * branchIDToProvenance(BranchID const &bid) const
bool productWasDeleted() 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) final
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> postModuleDelayedGetSignal_
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
bool productUnavailable_() const final
std::atomic< bool > prefetchRequested_
std::atomic< bool > & prefetchRequested() const
void tryPrefetchResolverAsync(unsigned int iProcessingIndex, Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc, ServiceToken token, tbb::task_group *) const
DataManagingOrAliasProductResolver & realProduct_
void connectTo(ProductResolverBase const &, Principal const *) final
std::string const & className() const
constexpr static const ProductStatus defaultStatus_
bool productResolved_() const final
std::string const & productInstanceName() const
void setProductID(ProductID const &pid)
ProductProvenance const * productProvenancePtr_() const override
ProductProvenance const * productProvenancePtr_() const final
void unsafe_setWrapperAndProvenance() const
void setProductID_(ProductID const &pid) override
bool isAtEndTransition() const
bool productWasDeleted_() const final
virtual bool isFromCurrentProcess() const =0
void setProductProvenanceRetriever(ProductProvenanceRetriever const *provRetriever)
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const final
bool productWasDeleted_() const override
tbb::task_group * group() const noexcept
std::atomic< bool > prefetchRequested_
bool productUnavailable_() const override
ProductProvenance const * productProvenancePtr_() const override
ProductProvenance const * productProvenancePtr_() const override
Provenance const * provenance_() const override
void unsafe_setWrapper(std::unique_ptr< WrapperBase > iValue) const
bool singleProduct_() const override
SwitchBaseProductResolver(std::shared_ptr< BranchDescription const > bd, DataManagingOrAliasProductResolver &realProduct)