CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
edm::PuttableProductResolver Class Reference

#include <ProductResolvers.h>

Inheritance diagram for edm::PuttableProductResolver:
edm::ProducedProductResolver edm::DataManagingProductResolver edm::ProductResolverBase

Public Member Functions

 PuttableProductResolver (std::shared_ptr< BranchDescription const > bd)
 
virtual void setupUnscheduled (UnscheduledConfigurator const &) override final
 
- Public Member Functions inherited from edm::ProducedProductResolver
 ProducedProductResolver (std::shared_ptr< BranchDescription const > bd, ProductStatus iDefaultStatus)
 
virtual void resetFailedFromThisProcess () override
 
- Public Member Functions inherited from edm::DataManagingProductResolver
virtual void connectTo (ProductResolverBase const &, Principal const *) override final
 
 DataManagingProductResolver (std::shared_ptr< BranchDescription const > bd, ProductStatus iDefaultStatus)
 
void resetStatus ()
 
template<bool callResolver, typename FUNC >
ProductResolverBase::Resolution resolveProductImpl (FUNC resolver) const
 
- Public Member Functions inherited from edm::ProductResolverBase
BranchDescription const & branchDescription () const
 
std::string const & moduleLabel () const
 
ProductResolverBaseoperator= (ProductResolverBase const &)=delete
 
void prefetchAsync (WaitingTask *waitTask, Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
 
std::string const & processName () const
 
ProductID const & productID () const
 
std::string const & productInstanceName () const
 
ProductProvenance const * productProvenancePtr () const
 
bool productResolved () const
 
 ProductResolverBase ()
 
 ProductResolverBase (ProductResolverBase const &)=delete
 
TypeID productType () const
 
bool productUnavailable () const
 
bool productWasDeleted () const
 
bool productWasFetchedAndIsValid (bool iSkipCurrentProcess) const
 
Provenance const * provenance () const
 
bool provenanceAvailable () const
 
void putOrMergeProduct (std::unique_ptr< WrapperBase > edp) const
 
void putProduct (std::unique_ptr< WrapperBase > edp) const
 
void resetBranchDescription (std::shared_ptr< BranchDescription const > bd)
 
void resetProductData ()
 
std::string const & resolvedModuleLabel () const
 
Resolution resolveProduct (Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
 
void retrieveAndMerge (Principal const &principal) const
 
void setProcessHistory (ProcessHistory const &ph)
 
void setProvenance (ProductProvenanceRetriever const *provRetriever, ProcessHistory const &ph, ProductID const &pid)
 
bool singleProduct () const
 
StableProvenance const * stableProvenance () const
 
void unsafe_deleteProduct () const
 
bool unscheduledWasNotRun () const
 
void write (std::ostream &os) const
 
virtual ~ProductResolverBase ()
 

Private Member Functions

virtual void prefetchAsync_ (WaitingTask *waitTask, Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
 
virtual void putProduct_ (std::unique_ptr< WrapperBase > edp) const override
 
virtual void resetProductData_ (bool deleteEarly) override
 
virtual Resolution resolveProduct_ (Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
 
virtual bool unscheduledWasNotRun_ () const override
 

Private Attributes

WaitingTaskList m_waitingTasks
 
std::atomic< bool > prefetchRequested_
 
Workerworker_
 

Additional Inherited Members

- Public Types inherited from edm::DataManagingProductResolver
enum  ProductStatus {
  ProductStatus::ProductSet, ProductStatus::NotPut, ProductStatus::ResolveFailed, ProductStatus::ResolveNotRun,
  ProductStatus::ProductDeleted
}
 
- Protected Member Functions inherited from edm::DataManagingProductResolver
ProductStatus defaultStatus () const
 
template<bool callResolver, typename FUNC >
Resolution resolveProductImpl (FUNC resolver) const
 
void setFailedStatus () const
 
void setProduct (std::unique_ptr< WrapperBase > edp) const
 
ProductStatus status () const
 

Detailed Description

Definition at line 146 of file ProductResolvers.h.

Constructor & Destructor Documentation

edm::PuttableProductResolver::PuttableProductResolver ( std::shared_ptr< BranchDescription const >  bd)
inlineexplicit

Member Function Documentation

void edm::PuttableProductResolver::prefetchAsync_ ( WaitingTask waitTask,
Principal const &  principal,
bool  skipCurrentProcess,
SharedResourcesAcquirer sra,
ModuleCallingContext const *  mcc 
) const
overrideprivatevirtual

Implements edm::ProductResolverBase.

Definition at line 255 of file ProductResolvers.cc.

References edm::Principal::atEndTransition(), edm::ProductResolverBase::branchDescription(), and edm::make_waiting_task().

259  {
260  if(not skipCurrentProcess) {
261  if(branchDescription().availableOnlyAtEndTransition() and
262  not principal.atEndTransition()) {
263  return;
264  }
265  m_waitingTasks.add(waitTask);
266 
267  bool expected = false;
268  if(worker_ and prefetchRequested_.compare_exchange_strong(expected,true)) {
269  //using a waiting task to do a callback guarantees that
270  // the m_waitingTasks list will be released from waiting even
271  // if the module does not put this data product or the
272  // module has an exception while running
273 
274  auto waiting = make_waiting_task(tbb::task::allocate_root(),
275  [this](std::exception_ptr const * iException) {
276  if(nullptr != iException) {
277  m_waitingTasks.doneWaiting(*iException);
278  } else {
279  m_waitingTasks.doneWaiting(std::exception_ptr());
280  }
281  });
282  worker_->callWhenDoneAsync(waiting);
283  }
284  }
285  }
void callWhenDoneAsync(WaitingTask *task)
Definition: Worker.h:115
void add(WaitingTask *)
Adds task to the waiting list.
std::atomic< bool > prefetchRequested_
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
def principal(options)
FunctorWaitingTask< F > * make_waiting_task(ALLOC &&iAlloc, F f)
Definition: WaitingTask.h:90
BranchDescription const & branchDescription() const
void edm::PuttableProductResolver::putProduct_ ( std::unique_ptr< WrapperBase edp) const
overrideprivatevirtual

Reimplemented from edm::ProducedProductResolver.

Definition at line 288 of file ProductResolvers.cc.

References eostools::move(), and edm::ProducedProductResolver::putProduct_().

288  {
290  bool expected = false;
291  if(prefetchRequested_.compare_exchange_strong(expected,true)) {
292  m_waitingTasks.doneWaiting(std::exception_ptr());
293  }
294  }
std::atomic< bool > prefetchRequested_
virtual void putProduct_(std::unique_ptr< WrapperBase > edp) const override
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
def move(src, dest)
Definition: eostools.py:510
void edm::PuttableProductResolver::resetProductData_ ( bool  deleteEarly)
overrideprivatevirtual

Reimplemented from edm::DataManagingProductResolver.

Definition at line 298 of file ProductResolvers.cc.

References edm::DataManagingProductResolver::resetProductData_().

298  {
301  prefetchRequested_ = false;
302  }
virtual void resetProductData_(bool deleteEarly) override
std::atomic< bool > prefetchRequested_
void reset()
Resets access to the resource so that added tasks will wait.
ProductResolverBase::Resolution edm::PuttableProductResolver::resolveProduct_ ( Principal const &  principal,
bool  skipCurrentProcess,
SharedResourcesAcquirer sra,
ModuleCallingContext const *  mcc 
) const
overrideprivatevirtual

Implements edm::ProductResolverBase.

Definition at line 244 of file ProductResolvers.cc.

References Resolution.

247  {
248  if (!skipCurrentProcess) {
249  //'false' means never call the lambda function
250  return resolveProductImpl<false>([](){return;});
251  }
252  return Resolution(nullptr);
253  }
void edm::PuttableProductResolver::setupUnscheduled ( UnscheduledConfigurator const &  iConfigure)
finaloverridevirtual

Reimplemented from edm::ProductResolverBase.

Definition at line 305 of file ProductResolvers.cc.

References edm::ProductResolverBase::branchDescription(), edm::UnscheduledConfigurator::findWorker(), and edm::ProductResolverBase::moduleLabel().

305  {
306  worker_ = iConfigure.findWorker(branchDescription().moduleLabel());
307  }
BranchDescription const & branchDescription() const
std::string const & moduleLabel() const
virtual bool edm::PuttableProductResolver::unscheduledWasNotRun_ ( ) const
inlineoverrideprivatevirtual

Member Data Documentation

WaitingTaskList edm::PuttableProductResolver::m_waitingTasks
mutableprivate

Definition at line 167 of file ProductResolvers.h.

std::atomic<bool> edm::PuttableProductResolver::prefetchRequested_
mutableprivate

Definition at line 169 of file ProductResolvers.h.

Worker* edm::PuttableProductResolver::worker_
private

Definition at line 168 of file ProductResolvers.h.