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::ProductPutterBase edm::DataManagingOrAliasProductResolver edm::ProductResolverBase

Public Member Functions

 PuttableProductResolver (std::shared_ptr< BranchDescription const > bd)
 
void setupUnscheduled (UnscheduledConfigurator const &) final
 
- Public Member Functions inherited from edm::ProducedProductResolver
 ProducedProductResolver (std::shared_ptr< BranchDescription const > bd, ProductStatus iDefaultStatus)
 
- Public Member Functions inherited from edm::DataManagingProductResolver
void connectTo (ProductResolverBase const &, Principal const *) final
 
 DataManagingProductResolver (std::shared_ptr< BranchDescription const > bd, ProductStatus iDefaultStatus)
 
void resetStatus ()
 
- Public Member Functions inherited from edm::DataManagingOrAliasProductResolver
 DataManagingOrAliasProductResolver ()
 
- Public Member Functions inherited from edm::ProductResolverBase
BranchDescription const & branchDescription () const
 
std::string const & moduleLabel () const
 
ProductResolverBaseoperator= (ProductResolverBase const &)=delete
 
void prefetchAsync (WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, 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 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, MergeableRunProductMetadata const *mergeableRunProductMetadata) const
 
void setMergeableRunProductMetadata (MergeableRunProductMetadata const *mrpm)
 
void setProductID (ProductID const &pid)
 
void setProductProvenanceRetriever (ProductProvenanceRetriever const *provRetriever)
 
bool singleProduct () const
 
StableProvenance const * stableProvenance () const
 
void unsafe_deleteProduct () const
 
bool unscheduledWasNotRun () const
 
void write (std::ostream &os) const
 
virtual ~ProductResolverBase ()
 
- Public Member Functions inherited from edm::ProductPutterBase
 ProductPutterBase ()=default
 
virtual ~ProductPutterBase ()=default
 

Private Member Functions

void prefetchAsync_ (WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
 
void putProduct (std::unique_ptr< WrapperBase > edp) const override
 
void resetProductData_ (bool deleteEarly) override
 
Resolution resolveProduct_ (Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
 
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
void checkType (WrapperBase const &prod) const
 
ProductStatus defaultStatus () const
 
ProductData const & getProductData () const final
 
template<bool callResolver, typename FUNC >
ProductResolverBase::Resolution resolveProductImpl (FUNC resolver) const
 
template<bool callResolver, typename FUNC >
Resolution resolveProductImpl (FUNC resolver) const
 
void setFailedStatus () const
 
void setMergeableRunProductMetadataInProductData (MergeableRunProductMetadata const *)
 
void setProduct (std::shared_ptr< WrapperBase > edp) const
 
void setProduct (std::unique_ptr< WrapperBase > edp) const
 
ProductStatus status () const
 

Detailed Description

Definition at line 200 of file ProductResolvers.h.

Constructor & Destructor Documentation

◆ PuttableProductResolver()

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

Definition at line 202 of file ProductResolvers.h.

Member Function Documentation

◆ prefetchAsync_()

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

Implements edm::ProductResolverBase.

Definition at line 367 of file ProductResolvers.cc.

372  {
373  if (not skipCurrentProcess) {
374  if (branchDescription().availableOnlyAtEndTransition() and mcc) {
375  if (not mcc->parent().isAtEndTransition()) {
376  return;
377  }
378  }
379  //Need to try modifying prefetchRequested_ before adding to m_waitingTasks
380  bool expected = false;
381  bool prefetchRequested = prefetchRequested_.compare_exchange_strong(expected, true);
382  m_waitingTasks.add(waitTask);
383 
384  if (worker_ and prefetchRequested) {
385  //using a waiting task to do a callback guarantees that
386  // the m_waitingTasks list will be released from waiting even
387  // if the module does not put this data product or the
388  // module has an exception while running
389 
390  auto waiting = make_waiting_task([this](std::exception_ptr const* iException) {
391  if (nullptr != iException) {
392  m_waitingTasks.doneWaiting(*iException);
393  } else {
394  m_waitingTasks.doneWaiting(std::exception_ptr());
395  }
396  });
397  worker_->callWhenDoneAsync(WaitingTaskHolder(*waitTask.group(), waiting));
398  }
399  }
400  }

References edm::WaitingTaskList::add(), edm::ProductResolverBase::branchDescription(), edm::Worker::callWhenDoneAsync(), edm::WaitingTaskList::doneWaiting(), edm::WaitingTaskHolder::group(), m_waitingTasks, edm::make_waiting_task(), prefetchRequested_, and worker_.

◆ putProduct()

void edm::PuttableProductResolver::putProduct ( std::unique_ptr< WrapperBase edp) const
overrideprivatevirtual

Reimplemented from edm::ProducedProductResolver.

Definition at line 402 of file ProductResolvers.cc.

402  {
404  bool expected = false;
405  if (prefetchRequested_.compare_exchange_strong(expected, true)) {
406  m_waitingTasks.doneWaiting(std::exception_ptr());
407  }
408  }

References edm::WaitingTaskList::doneWaiting(), m_waitingTasks, eostools::move(), prefetchRequested_, and edm::ProducedProductResolver::putProduct().

◆ resetProductData_()

void edm::PuttableProductResolver::resetProductData_ ( bool  deleteEarly)
overrideprivatevirtual

Reimplemented from edm::DataManagingProductResolver.

Definition at line 410 of file ProductResolvers.cc.

410  {
411  if (not deleteEarly) {
412  prefetchRequested_ = false;
414  }
416  }

References m_waitingTasks, prefetchRequested_, edm::WaitingTaskList::reset(), and edm::DataManagingProductResolver::resetProductData_().

◆ resolveProduct_()

ProductResolverBase::Resolution edm::PuttableProductResolver::resolveProduct_ ( Principal const &  principal,
bool  skipCurrentProcess,
SharedResourcesAcquirer sra,
ModuleCallingContext const *  mcc 
) const
overrideprivatevirtual

Implements edm::ProductResolverBase.

Definition at line 356 of file ProductResolvers.cc.

359  {
360  if (!skipCurrentProcess) {
361  //'false' means never call the lambda function
362  return resolveProductImpl<false>([]() { return; });
363  }
364  return Resolution(nullptr);
365  }

References Resolution.

◆ setupUnscheduled()

void edm::PuttableProductResolver::setupUnscheduled ( UnscheduledConfigurator const &  iConfigure)
finalvirtual

◆ unscheduledWasNotRun_()

bool edm::PuttableProductResolver::unscheduledWasNotRun_ ( ) const
inlineoverrideprivatevirtual

Implements edm::ProductResolverBase.

Definition at line 218 of file ProductResolvers.h.

218 { return false; }

Member Data Documentation

◆ m_waitingTasks

WaitingTaskList edm::PuttableProductResolver::m_waitingTasks
mutableprivate

Definition at line 223 of file ProductResolvers.h.

Referenced by prefetchAsync_(), putProduct(), and resetProductData_().

◆ prefetchRequested_

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

Definition at line 225 of file ProductResolvers.h.

Referenced by prefetchAsync_(), putProduct(), and resetProductData_().

◆ worker_

Worker* edm::PuttableProductResolver::worker_
private

Definition at line 224 of file ProductResolvers.h.

Referenced by prefetchAsync_(), and setupUnscheduled().

edm::ProducedProductResolver::ProducedProductResolver
ProducedProductResolver(std::shared_ptr< BranchDescription const > bd, ProductStatus iDefaultStatus)
Definition: ProductResolvers.h:188
deep_tau::DeepTauBase::BasicDiscriminator
BasicDiscriminator
Definition: DeepTauBase.h:115
edm::DataManagingProductResolver::ProductStatus::NotPut
edm::WaitingTaskList::reset
void reset()
Resets access to the resource so that added tasks will wait.
Definition: WaitingTaskList.cc:53
edm::ProducedProductResolver::putProduct
void putProduct(std::unique_ptr< WrapperBase > edp) const override
Definition: ProductResolvers.cc:502
edm::WaitingTaskList::doneWaiting
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
Definition: WaitingTaskList.cc:212
WaitingTaskHolder
Resolution
Definition: trackSplitPlot.h:33
edm::make_waiting_task
FunctorWaitingTask< F > * make_waiting_task(F f)
Definition: WaitingTask.h:101
edm::PuttableProductResolver::prefetchRequested_
std::atomic< bool > prefetchRequested_
Definition: ProductResolvers.h:225
edm::PuttableProductResolver::m_waitingTasks
WaitingTaskList m_waitingTasks
Definition: ProductResolvers.h:223
edm::Worker::callWhenDoneAsync
void callWhenDoneAsync(WaitingTaskHolder task)
Definition: Worker.h:165
edm::ProductResolverBase::moduleLabel
std::string const & moduleLabel() const
Definition: ProductResolverBase.h:119
edm::DataManagingProductResolver::resetProductData_
void resetProductData_(bool deleteEarly) override
Definition: ProductResolvers.cc:592
edm::WaitingTaskList::add
void add(tbb::task_group *, WaitingTask *)
Adds task to the waiting list.
Definition: WaitingTaskList.cc:125
eostools.move
def move(src, dest)
Definition: eostools.py:511
edm::ProductResolverBase::branchDescription
BranchDescription const & branchDescription() const
Definition: ProductResolverBase.h:110
edm::PuttableProductResolver::worker_
Worker * worker_
Definition: ProductResolvers.h:224