1 #ifndef FWCore_Framework_ProductResolvers_h
2 #define FWCore_Framework_ProductResolvers_h
26 class ProductProvenanceRetriever;
28 class ModuleCallingContext;
58 void setProduct(std::unique_ptr<WrapperBase> edp)
const;
63 template <
bool callResolver,
typename FUNC>
73 void mergeProduct(std::unique_ptr<WrapperBase> edp)
const;
99 DataManagingProductResolver(bd,
ProductStatus::ResolveNotRun),
100 m_prefetchRequested{
false },
110 bool skipCurrentProcess,
112 ModuleCallingContext
const* mcc)
const override;
114 Principal
const& principal,
115 bool skipCurrentProcess,
117 ModuleCallingContext
const* mcc)
const override;
140 virtual void putProduct_(std::unique_ptr<WrapperBase> edp)
const override;
154 bool skipCurrentProcess,
159 bool skipCurrentProcess,
164 virtual void putProduct_(std::unique_ptr<WrapperBase> edp)
const override;
178 prefetchRequested_(
false){}
184 bool skipCurrentProcess,
189 bool skipCurrentProcess,
208 realProduct_.connectTo(iOther, iParentPrincipal );
213 bool skipCurrentProcess,
216 return realProduct_.resolveProduct(principal, skipCurrentProcess, sra, mcc);}
219 bool skipCurrentProcess,
222 realProduct_.prefetchAsync(waitTask, principal, skipCurrentProcess, sra, mcc);
227 return realProduct_.productResolved(); }
230 return realProduct_.productWasFetchedAndIsValid(iSkipCurrentProcess);
233 virtual void putProduct_(std::unique_ptr<WrapperBase> edp)
const override;
247 std::shared_ptr<BranchDescription const>
bd_;
256 realProduct_ = &iOther;
257 parentPrincipal_ = iParentPrincipal;
262 bool skipCurrentProcess,
264 ModuleCallingContext const* mcc)
const override {
return realProduct_->resolveProduct(*parentPrincipal_, skipCurrentProcess, sra, mcc);}
267 bool skipCurrentProcess,
270 realProduct_->prefetchAsync( waitTask, *parentPrincipal_, skipCurrentProcess, sra, mcc);
277 return realProduct_->productWasFetchedAndIsValid(iSkipCurrentProcess); }
279 virtual void putProduct_(std::unique_ptr<WrapperBase> edp)
const override;
293 std::shared_ptr<BranchDescription const>
bd_;
302 std::vector<bool>
const& ambiguous);
306 void tryPrefetchResolverAsync(
unsigned int iProcessingIndex,
308 bool skipCurrentProcess,
313 bool dataValidFromResolver(
unsigned int iProcessingIndex,
315 bool iSkipCurrentProcess) const;
317 void prefetchFailed(
unsigned int iProcessingIndex,
319 bool iSkipCurrentProcess,
320 std::exception_ptr iExceptPtr) const;
322 unsigned int unsetIndexValue() const;
324 bool skipCurrentProcess,
329 bool skipCurrentProcess,
353 bool skipCurrentProcess,
379 bool skipCurrentProcess,
384 bool skipCurrentProcess,
ProducedProductResolver & realProduct_
Provenance const & provenance() const
virtual bool productWasDeleted_() const override
virtual Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
unsigned int ProductResolverIndex
std::shared_ptr< BranchDescription const > const & branchDescription() const
virtual void setProcessHistory_(ProcessHistory const &ph) overridefinal
virtual BranchDescription const & branchDescription_() const override
void checkType(WrapperBase const &prod) const
ParentProcessProductResolver(std::shared_ptr< BranchDescription const > bd)
WaitingTaskList m_waitingTasks
virtual Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const =0
ProducedProductResolver::ProductStatus ProductStatus
ProductStatus const defaultStatus_
std::shared_ptr< BranchDescription const > bd_
virtual Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
virtual void resetProductData_(bool deleteEarly) override
virtual std::string const & resolvedModuleLabel_() const override
virtual Provenance const * provenance_() const overridefinal
UnscheduledProductResolver(std::shared_ptr< BranchDescription const > bd)
virtual bool unscheduledWasNotRun_() const =0
virtual bool productWasDeleted_() const override
ProductStatus status() const
virtual void setupUnscheduled(UnscheduledConfigurator const &)
virtual void connectTo(ProductResolverBase const &iOther, Principal const *iParentPrincipal) overridefinal
virtual void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) override
DataManagingProductResolver(std::shared_ptr< BranchDescription const > bd, ProductStatus iDefaultStatus)
WaitingTaskList skippingWaitingTasks_
virtual Provenance const * provenance_() const overridefinal
virtual bool productResolved_() const overridefinal
virtual std::string const & resolvedModuleLabel_() const override
ProducedProductResolver(std::shared_ptr< BranchDescription const > bd, ProductStatus iDefaultStatus)
std::atomic< bool > prefetchRequested_
virtual bool unscheduledWasNotRun_() const override
ProductProvenanceRetriever const * provRetriever_
void resetBranchDescription(std::shared_ptr< BranchDescription const > bd)
void throwProductDeletedException() const
Principal const * parentPrincipal_
WaitingTaskList waitingTasks_
ProducedProductResolver::ProductStatus ProductStatus
virtual bool productResolved_() const overridefinal
virtual void prefetchAsync_(WaitingTask *waitTask, Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const =0
UnscheduledAuxiliary const * aux_
virtual bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override
virtual BranchDescription const & branchDescription_() const overridefinal
virtual BranchDescription const & branchDescription_() const override
virtual bool isFromCurrentProcess() const =0
ProductResolverBase const * realProduct_
std::atomic< unsigned int > lastSkipCurrentCheckIndex_
virtual void resetFailedFromThisProcess()
virtual bool productResolved_() const overridefinal
std::atomic< bool > prefetchRequested_
virtual Provenance const * provenance_() const overridefinal
virtual void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) overridefinal
virtual bool productUnavailable_() const override
void mergeProduct(std::unique_ptr< WrapperBase > edp) const
virtual void putProduct_(std::unique_ptr< WrapperBase > edp) const =0
std::atomic< bool > prefetchRequested_
std::atomic< unsigned int > lastCheckIndex_
virtual bool productUnavailable_() const overridefinal
AliasProductResolver(std::shared_ptr< BranchDescription const > bd, ProducedProductResolver &realProduct)
ProducedProductResolver::ProductStatus ProductStatus
virtual ProductProvenance const * productProvenancePtr_() const overridefinal
void setProduct(std::unique_ptr< WrapperBase > edp) const
std::atomic< bool > skippingPrefetchRequested_
std::atomic< ProductStatus > theStatus_
std::vector< bool > ambiguous_
Resolution resolveProductImpl(FUNC resolver) const
virtual void setProvenance_(ProductProvenanceRetriever const *provRetriever, ProcessHistory const &ph, ProductID const &pid) overridefinal
virtual bool productWasDeleted_() const overridefinal
virtual bool productUnavailable_() const override
ProductStatus defaultStatus() const
virtual void connectTo(ProductResolverBase const &iOther, Principal const *iParentPrincipal) overridefinal
std::vector< ProductResolverIndex > matchingHolders_
virtual bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const overridefinal
virtual bool singleProduct_() const overridefinal
virtual void retrieveAndMerge_(Principal const &principal) const
virtual void prefetchAsync_(WaitingTask *waitTask, Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
virtual void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) override
virtual std::string const & resolvedModuleLabel_() const overridefinal
ProducedProductResolver::ProductStatus ProductStatus
virtual bool unscheduledWasNotRun_() const override
ProductData const & getProductData() const
std::shared_ptr< BranchDescription const > bd_
virtual void connectTo(ProductResolverBase const &, Principal const *) overridefinal
volatile std::atomic< bool > shutdown_flag false
virtual void putOrMergeProduct_(std::unique_ptr< WrapperBase > prod) const overridefinal
PuttableProductResolver(std::shared_ptr< BranchDescription const > bd)
SingleChoiceNoProcessProductResolver(ProductResolverIndex iChoice)
virtual bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const overridefinal
virtual void prefetchAsync_(WaitingTask *waitTask, Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
WaitingTaskList waitingTasks_
std::string const & moduleLabel() const
ProductResolverIndex realResolverIndex_
void setFailedStatus() const