CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ProductResolvers.h
Go to the documentation of this file.
1 #ifndef FWCore_Framework_ProductResolvers_h
2 #define FWCore_Framework_ProductResolvers_h
3 
4 /*----------------------------------------------------------------------
5 
6 ProductResolver: A collection of information related to a single WrapperBase or
7 a set of related EDProducts. This is the storage unit of such information.
8 
9 ----------------------------------------------------------------------*/
27 
28 #include <atomic>
29 #include <memory>
30 #include <string>
31 
32 namespace edm {
33  class MergeableRunProductMetadata;
34  class ProductProvenanceRetriever;
35  class DelayedReader;
38  class Worker;
39  class ServiceToken;
40 
42  public:
44 
45  // Give AliasProductResolver and SwitchBaseProductResolver access by moving this method to public
46  void resetProductData_(bool deleteEarly) override = 0;
47  virtual ProductData const& getProductData() const = 0;
48  };
49 
51  public:
53 
54  DataManagingProductResolver(std::shared_ptr<BranchDescription const> bd, ProductStatus iDefaultStatus)
56  productData_(bd),
57  theStatus_(iDefaultStatus),
58  defaultStatus_(iDefaultStatus) {}
59 
60  void connectTo(ProductResolverBase const&, Principal const*) final;
61 
63 
64  void resetProductData_(bool deleteEarly) override;
65 
66  protected:
67  void setProduct(std::unique_ptr<WrapperBase> edp) const;
68  void setProduct(std::shared_ptr<WrapperBase> edp) const;
69  ProductStatus status() const { return theStatus_; }
72  //Handle the boilerplate code needed for resolveProduct_
73  template <bool callResolver, typename FUNC>
74  Resolution resolveProductImpl(FUNC resolver) const;
75  ProductData const& getProductData() const final { return productData_; }
77 
78  void checkType(WrapperBase const& prod) const;
79 
80  private:
81  void throwProductDeletedException() const;
82  virtual bool isFromCurrentProcess() const = 0;
83 
84  bool productUnavailable_() const final;
85  bool productResolved_() const final;
86  bool productWasDeleted_() const final;
87  bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const final;
88 
90  void resetBranchDescription_(std::shared_ptr<BranchDescription const> bd) final {
92  }
93  Provenance const* provenance_() const final { return &productData_.provenance(); }
94 
95  std::string const& resolvedModuleLabel_() const final { return moduleLabel(); }
96  void setProductProvenanceRetriever_(ProductProvenanceRetriever const* provRetriever) final;
97  void setProductID_(ProductID const& pid) final;
99  bool singleProduct_() const final;
100 
102  mutable std::atomic<ProductStatus> theStatus_;
104  };
105 
107  public:
108  MergeableInputProductResolver(std::shared_ptr<BranchDescription const> bd, ProductStatus iDefaultStatus)
109  : DataManagingProductResolver(bd, iDefaultStatus) {}
110 
111  protected:
112  void setOrMergeProduct(std::shared_ptr<WrapperBase> prod,
113  MergeableRunProductMetadata const* mergeableRunProductMetadata) const;
114 
115  // merges the product with the pre-existing product
116  void mergeProduct(std::shared_ptr<WrapperBase> edp, MergeableRunProductMetadata const*) const;
117  };
118 
120  public:
121  explicit DelayedReaderInputProductResolver(std::shared_ptr<BranchDescription const> bd)
122  : MergeableInputProductResolver(bd, ProductStatus::ResolveNotRun), m_prefetchRequested{false}, aux_{nullptr} {
123  assert(bd->onDemand());
124  assert(not bd->produced());
125  }
126 
127  void setupUnscheduled(UnscheduledConfigurator const&) final;
128 
129  private:
130  bool isFromCurrentProcess() const final;
131 
132  Resolution resolveProduct_(Principal const& principal,
133  bool skipCurrentProcess,
135  ModuleCallingContext const* mcc) const override;
136  void prefetchAsync_(WaitingTaskHolder waitTask,
137  Principal const& principal,
138  bool skipCurrentProcess,
141  ModuleCallingContext const* mcc) const override;
142 
143  void retrieveAndMerge_(Principal const& principal,
144  MergeableRunProductMetadata const* mergeableRunProductMetadata) const override;
145 
146  void setMergeableRunProductMetadata_(MergeableRunProductMetadata const*) override;
147 
148  bool unscheduledWasNotRun_() const final { return false; }
149 
150  void resetProductData_(bool deleteEarly) override;
151 
152  mutable std::atomic<bool> m_prefetchRequested;
154  UnscheduledAuxiliary const* aux_; //provides access to the delayedGet signals
155  };
156 
158  public ProductPutterBase,
159  public ProductPutOrMergerBase {
160  public:
161  PutOnReadInputProductResolver(std::shared_ptr<BranchDescription const> bd)
162  : MergeableInputProductResolver(bd, ProductStatus::ResolveNotRun) {
163  assert(not bd->produced());
164  assert(not bd->onDemand());
165  }
166 
167  protected:
168  void putProduct(std::unique_ptr<WrapperBase> edp) const override;
169  void putOrMergeProduct(std::unique_ptr<WrapperBase> prod) const override;
170 
171  Resolution resolveProduct_(Principal const& principal,
172  bool skipCurrentProcess,
174  ModuleCallingContext const* mcc) const final;
175  void prefetchAsync_(WaitingTaskHolder waitTask,
176  Principal const& principal,
177  bool skipCurrentProcess,
178  ServiceToken const& token,
180  ModuleCallingContext const* mcc) const final;
181  bool unscheduledWasNotRun_() const final { return false; }
182 
183  private:
184  bool isFromCurrentProcess() const final;
185  };
186 
188  public:
189  ProducedProductResolver(std::shared_ptr<BranchDescription const> bd, ProductStatus iDefaultStatus)
190  : DataManagingProductResolver(bd, iDefaultStatus) {
191  assert(bd->produced());
192  }
193 
194  protected:
195  void putProduct(std::unique_ptr<WrapperBase> edp) const override;
196 
197  private:
198  bool isFromCurrentProcess() const final;
199  };
200 
202  public:
203  explicit PuttableProductResolver(std::shared_ptr<BranchDescription const> bd)
204  : ProducedProductResolver(bd, ProductStatus::NotPut), worker_(nullptr), prefetchRequested_(false) {}
205 
206  void setupUnscheduled(UnscheduledConfigurator const&) final;
207 
208  private:
210  bool skipCurrentProcess,
212  ModuleCallingContext const* mcc) const override;
213  void prefetchAsync_(WaitingTaskHolder waitTask,
214  Principal const& principal,
215  bool skipCurrentProcess,
218  ModuleCallingContext const* mcc) const override;
219  bool unscheduledWasNotRun_() const override { return false; }
220 
221  void putProduct(std::unique_ptr<WrapperBase> edp) const override;
222  void resetProductData_(bool deleteEarly) override;
223 
226  mutable std::atomic<bool> prefetchRequested_;
227  };
228 
230  public:
231  explicit UnscheduledProductResolver(std::shared_ptr<BranchDescription const> bd)
232  : ProducedProductResolver(bd, ProductStatus::ResolveNotRun) {}
233 
234  void setupUnscheduled(UnscheduledConfigurator const&) final;
235 
236  private:
238  bool skipCurrentProcess,
240  ModuleCallingContext const* mcc) const override;
241  void prefetchAsync_(WaitingTaskHolder waitTask,
242  Principal const& principal,
243  bool skipCurrentProcess,
246  ModuleCallingContext const* mcc) const override;
247  bool unscheduledWasNotRun_() const override { return status() == ProductStatus::ResolveNotRun; }
248 
249  void resetProductData_(bool deleteEarly) override;
250 
252  UnscheduledAuxiliary const* aux_ = nullptr;
253  Worker* worker_ = nullptr;
254  mutable std::atomic<bool> prefetchRequested_ = false;
255  };
256 
258  public:
260  explicit AliasProductResolver(std::shared_ptr<BranchDescription const> bd,
262  : DataManagingOrAliasProductResolver(), realProduct_(realProduct), bd_(bd) {}
263 
264  void connectTo(ProductResolverBase const& iOther, Principal const* iParentPrincipal) final {
265  realProduct_.connectTo(iOther, iParentPrincipal);
266  };
267 
268  private:
270  bool skipCurrentProcess,
272  ModuleCallingContext const* mcc) const override {
273  return realProduct_.resolveProduct(principal, skipCurrentProcess, sra, mcc);
274  }
276  Principal const& principal,
277  bool skipCurrentProcess,
278  ServiceToken const& token,
280  ModuleCallingContext const* mcc) const override {
281  realProduct_.prefetchAsync(waitTask, principal, skipCurrentProcess, token, sra, mcc);
282  }
283  bool unscheduledWasNotRun_() const override { return realProduct_.unscheduledWasNotRun(); }
284  bool productUnavailable_() const override { return realProduct_.productUnavailable(); }
285  bool productResolved_() const final { return realProduct_.productResolved(); }
286  bool productWasDeleted_() const override { return realProduct_.productWasDeleted(); }
287  bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const final {
288  return realProduct_.productWasFetchedAndIsValid(iSkipCurrentProcess);
289  }
290 
291  BranchDescription const& branchDescription_() const override { return *bd_; }
292  void resetBranchDescription_(std::shared_ptr<BranchDescription const> bd) override { bd_ = bd; }
293  Provenance const* provenance_() const final { return realProduct_.provenance(); }
294 
295  std::string const& resolvedModuleLabel_() const override { return realProduct_.moduleLabel(); }
296  void setProductProvenanceRetriever_(ProductProvenanceRetriever const* provRetriever) override;
297  void setProductID_(ProductID const& pid) override;
298  ProductProvenance const* productProvenancePtr_() const override;
299  void resetProductData_(bool deleteEarly) override;
300  ProductData const& getProductData() const final { return realProduct_.getProductData(); }
301  bool singleProduct_() const override;
302 
304  std::shared_ptr<BranchDescription const> bd_;
305  };
306 
307  // Switch is a mixture of DataManaging (for worker and provenance) and Alias (for product)
309  public:
311  SwitchBaseProductResolver(std::shared_ptr<BranchDescription const> bd,
313 
314  void connectTo(ProductResolverBase const& iOther, Principal const* iParentPrincipal) final;
315  void setupUnscheduled(UnscheduledConfigurator const& iConfigure) final;
316 
317  protected:
319  WaitingTaskList& waitingTasks() const { return waitingTasks_; }
320  Worker* worker() const { return worker_; }
321  DataManagingOrAliasProductResolver const& realProduct() const { return realProduct_; }
322  std::atomic<bool>& prefetchRequested() const { return prefetchRequested_; }
323  void unsafe_setWrapperAndProvenance() const;
324  void resetProductData_(bool deleteEarly) override;
325 
326  private:
327  bool productResolved_() const final;
328  bool productWasDeleted_() const final { return realProduct_.productWasDeleted(); }
329  bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const final {
330  return realProduct_.productWasFetchedAndIsValid(iSkipCurrentProcess);
331  }
334  ;
335  }
336  void resetBranchDescription_(std::shared_ptr<BranchDescription const> bd) final {
338  }
339  Provenance const* provenance_() const final { return &productData_.provenance(); }
340  std::string const& resolvedModuleLabel_() const final { return moduleLabel(); }
341  void setProductProvenanceRetriever_(ProductProvenanceRetriever const* provRetriever) final;
342  void setProductID_(ProductID const& pid) final;
344  ProductData const& getProductData() const final { return productData_; }
345  bool singleProduct_() const final { return true; }
346 
347  // for "alias" view
349  // for "product" view
351  Worker* worker_ = nullptr;
353  mutable std::atomic<bool> prefetchRequested_;
354  // for provenance
356  };
357 
358  // For the case when SwitchProducer is on a Path
359  class SwitchProducerProductResolver : public SwitchBaseProductResolver, public ProductPutterBase {
360  public:
361  SwitchProducerProductResolver(std::shared_ptr<BranchDescription const> bd,
363 
364  private:
365  Resolution resolveProduct_(Principal const& principal,
366  bool skipCurrentProcess,
368  ModuleCallingContext const* mcc) const final;
369  void prefetchAsync_(WaitingTaskHolder waitTask,
370  Principal const& principal,
371  bool skipCurrentProcess,
372  ServiceToken const& token,
374  ModuleCallingContext const* mcc) const final;
375  void putProduct(std::unique_ptr<WrapperBase> edp) const final;
376  bool unscheduledWasNotRun_() const final { return false; }
377  bool productUnavailable_() const final;
378  void resetProductData_(bool deleteEarly) final;
379 
380  constexpr static const ProductStatus defaultStatus_ = ProductStatus::NotPut;
381 
382  // for filter in a Path
383  // The variable is only modified or read at times where the
384  // framework has guaranteed synchronization between write and read
386  };
387 
388  // For the case when SwitchProducer is not on any Path
390  public:
391  SwitchAliasProductResolver(std::shared_ptr<BranchDescription const> bd,
393  : SwitchBaseProductResolver(std::move(bd), realProduct) {}
394 
395  private:
396  Resolution resolveProduct_(Principal const& principal,
397  bool skipCurrentProcess,
399  ModuleCallingContext const* mcc) const final;
400  void prefetchAsync_(WaitingTaskHolder waitTask,
401  Principal const& principal,
402  bool skipCurrentProcess,
403  ServiceToken const& token,
405  ModuleCallingContext const* mcc) const final;
406  bool unscheduledWasNotRun_() const final { return realProduct().unscheduledWasNotRun(); }
407  bool productUnavailable_() const final { return realProduct().productUnavailable(); }
408  };
409 
411  public:
413  explicit ParentProcessProductResolver(std::shared_ptr<BranchDescription const> bd)
414  : ProductResolverBase(), realProduct_(nullptr), bd_(bd), provRetriever_(nullptr), parentPrincipal_(nullptr) {}
415 
416  void connectTo(ProductResolverBase const& iOther, Principal const* iParentPrincipal) final {
417  realProduct_ = &iOther;
418  parentPrincipal_ = iParentPrincipal;
419  };
420 
421  private:
423  bool skipCurrentProcess,
425  ModuleCallingContext const* mcc) const override {
426  if (principal.branchType() == InProcess &&
429  return Resolution(nullptr);
430  }
431 
432  skipCurrentProcess = false;
433  return realProduct_->resolveProduct(*parentPrincipal_, skipCurrentProcess, sra, mcc);
434  }
436  Principal const& principal,
437  bool skipCurrentProcess,
438  ServiceToken const& token,
440  ModuleCallingContext const* mcc) const override {
441  if (principal.branchType() == InProcess &&
444  return;
445  }
446 
447  skipCurrentProcess = false;
448  realProduct_->prefetchAsync(waitTask, *parentPrincipal_, skipCurrentProcess, token, sra, mcc);
449  }
450  bool unscheduledWasNotRun_() const override {
451  if (realProduct_)
452  return realProduct_->unscheduledWasNotRun();
453  throwNullRealProduct();
454  return false;
455  }
456  bool productUnavailable_() const override { return realProduct_->productUnavailable(); }
457  bool productResolved_() const final { return realProduct_->productResolved(); }
458  bool productWasDeleted_() const override { return realProduct_->productWasDeleted(); }
459  bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override {
460  iSkipCurrentProcess = false;
461  return realProduct_->productWasFetchedAndIsValid(iSkipCurrentProcess);
462  }
463 
464  BranchDescription const& branchDescription_() const override { return *bd_; }
465  void resetBranchDescription_(std::shared_ptr<BranchDescription const> bd) override { bd_ = bd; }
466  Provenance const* provenance_() const final { return realProduct_->provenance(); }
467  std::string const& resolvedModuleLabel_() const override { return realProduct_->moduleLabel(); }
468  void setProductProvenanceRetriever_(ProductProvenanceRetriever const* provRetriever) override;
469  void setProductID_(ProductID const& pid) override;
470  ProductProvenance const* productProvenancePtr_() const override;
471  void resetProductData_(bool deleteEarly) override;
472  bool singleProduct_() const override;
473  void throwNullRealProduct() const;
474 
476  std::shared_ptr<BranchDescription const> bd_;
479  };
480 
482  public:
484  NoProcessProductResolver(std::vector<ProductResolverIndex> const& matchingHolders,
485  std::vector<bool> const& ambiguous,
486  bool madeAtEnd);
487 
488  void connectTo(ProductResolverBase const& iOther, Principal const*) final;
489 
490  void tryPrefetchResolverAsync(unsigned int iProcessingIndex,
491  Principal const& principal,
492  bool skipCurrentProcess,
495  ServiceToken token,
496  tbb::task_group*) const;
497 
498  bool dataValidFromResolver(unsigned int iProcessingIndex,
499  Principal const& principal,
500  bool iSkipCurrentProcess) const;
501 
502  void prefetchFailed(unsigned int iProcessingIndex,
503  Principal const& principal,
504  bool iSkipCurrentProcess,
505  std::exception_ptr iExceptPtr) const;
506 
507  private:
508  unsigned int unsetIndexValue() const;
509  Resolution resolveProduct_(Principal const& principal,
510  bool skipCurrentProcess,
512  ModuleCallingContext const* mcc) const override;
513  void prefetchAsync_(WaitingTaskHolder waitTask,
514  Principal const& principal,
515  bool skipCurrentProcess,
516  ServiceToken const& token,
518  ModuleCallingContext const* mcc) const override;
519  bool unscheduledWasNotRun_() const override;
520  bool productUnavailable_() const override;
521  bool productWasDeleted_() const override;
522  bool productResolved_() const final;
523  bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override;
524 
525  BranchDescription const& branchDescription_() const override;
526  void resetBranchDescription_(std::shared_ptr<BranchDescription const> bd) override;
527  Provenance const* provenance_() const override;
528 
529  std::string const& resolvedModuleLabel_() const override { return moduleLabel(); }
530  void setProductProvenanceRetriever_(ProductProvenanceRetriever const* provRetriever) override;
531  void setProductID_(ProductID const& pid) override;
532  ProductProvenance const* productProvenancePtr_() const override;
533  void resetProductData_(bool deleteEarly) override;
534  bool singleProduct_() const override;
535 
536  Resolution tryResolver(unsigned int index,
537  Principal const& principal,
538  bool skipCurrentProcess,
540  ModuleCallingContext const* mcc) const;
541 
542  void setCache(bool skipCurrentProcess, ProductResolverIndex index, std::exception_ptr exceptionPtr) const;
543 
544  std::vector<ProductResolverIndex> matchingHolders_;
545  std::vector<bool> ambiguous_;
548  mutable std::atomic<unsigned int> lastCheckIndex_;
549  mutable std::atomic<unsigned int> lastSkipCurrentCheckIndex_;
550  mutable std::atomic<bool> prefetchRequested_;
551  mutable std::atomic<bool> skippingPrefetchRequested_;
552  const bool madeAtEnd_;
553  };
554 
556  public:
559  : ProductResolverBase(), realResolverIndex_(iChoice) {}
560 
561  void connectTo(ProductResolverBase const& iOther, Principal const*) final;
562 
563  private:
565  bool skipCurrentProcess,
567  ModuleCallingContext const* mcc) const override;
568  void prefetchAsync_(WaitingTaskHolder waitTask,
569  Principal const& principal,
570  bool skipCurrentProcess,
571  ServiceToken const& token,
573  ModuleCallingContext const* mcc) const override;
574  bool unscheduledWasNotRun_() const override;
575  bool productUnavailable_() const override;
576  bool productWasDeleted_() const override;
577  bool productResolved_() const final;
578  bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override;
579 
581  void resetBranchDescription_(std::shared_ptr<BranchDescription const> bd) override;
582  Provenance const* provenance_() const override;
583 
584  std::string const& resolvedModuleLabel_() const override { return moduleLabel(); }
585  void setProductProvenanceRetriever_(ProductProvenanceRetriever const* provRetriever) override;
586  void setProductID_(ProductID const& pid) override;
587  ProductProvenance const* productProvenancePtr_() const override;
588  void resetProductData_(bool deleteEarly) override;
589  bool singleProduct_() const override;
590 
592  };
593 
594 } // namespace edm
595 
596 #endif
ProductData const & getProductData() const final
Provenance const & provenance() const
Definition: ProductData.h:33
std::string const & resolvedModuleLabel_() const final
void setProductProvenanceRetriever_(ProductProvenanceRetriever const *provRetriever) final
DataManagingOrAliasProductResolver const & realProduct() const
Provenance const * provenance() const
WaitingTaskList & waitingTasks() const
bool unscheduledWasNotRun_() const override
void connectTo(ProductResolverBase const &iOther, Principal const *iParentPrincipal) final
unsigned int ProductResolverIndex
std::shared_ptr< BranchDescription const > const & branchDescription() const
Definition: ProductData.h:29
AliasProductResolver(std::shared_ptr< BranchDescription const > bd, DataManagingOrAliasProductResolver &realProduct)
void checkType(WrapperBase const &prod) const
ParentProcessProductResolver(std::shared_ptr< BranchDescription const > bd)
virtual Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const =0
ProducedProductResolver::ProductStatus ProductStatus
std::shared_ptr< BranchDescription const > bd_
MergeableInputProductResolver(std::shared_ptr< BranchDescription const > bd, ProductStatus iDefaultStatus)
void resetProductData_(bool deleteEarly) override
bool productUnavailable_() const final
UnscheduledProductResolver(std::shared_ptr< BranchDescription const > bd)
virtual bool unscheduledWasNotRun_() const =0
void setProductID_(ProductID const &pid) final
void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) final
BranchDescription const & branchDescription_() const final
std::atomic< bool > prefetchRequested_
ProductStatus status() const
virtual void setupUnscheduled(UnscheduledConfigurator const &)
bool productResolved_() const final
DataManagingProductResolver(std::shared_ptr< BranchDescription const > bd, ProductStatus iDefaultStatus)
virtual ProductData const & getProductData() const =0
ProductProvenance const * productProvenance() const
Definition: Provenance.cc:24
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const override
ProducedProductResolver(std::shared_ptr< BranchDescription const > bd, ProductStatus iDefaultStatus)
std::atomic< bool > prefetchRequested_
ProductProvenanceRetriever const * provRetriever_
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
assert(be >=bs)
ProductData const & getProductData() const final
void connectTo(ProductResolverBase const &, Principal const *) final
ParentContext const & parent() const
DataManagingOrAliasProductResolver & realProduct_
void resetBranchDescription(std::shared_ptr< BranchDescription const > bd)
Definition: ProductData.cc:20
UnscheduledAuxiliary const * aux_
void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) override
virtual void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const =0
deep_tau::DeepTauBase::BasicDiscriminator bd
Definition: DeepTauId.cc:1082
ProducedProductResolver::ProductStatus ProductStatus
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const final
virtual bool isFromCurrentProcess() const =0
ProductResolverBase const * realProduct_
void connectTo(ProductResolverBase const &iOther, Principal const *iParentPrincipal) final
std::atomic< unsigned int > lastSkipCurrentCheckIndex_
Provenance const * provenance_() const final
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const final
BranchType const & branchType() const
Definition: Principal.h:181
PutOnReadInputProductResolver(std::shared_ptr< BranchDescription const > bd)
DelayedReaderInputProductResolver(std::shared_ptr< BranchDescription const > bd)
std::string const & resolvedModuleLabel_() const final
SwitchAliasProductResolver(std::shared_ptr< BranchDescription const > bd, DataManagingOrAliasProductResolver &realProduct)
bool productWasFetchedAndIsValid_(bool iSkipCurrentProcess) const final
def move
Definition: eostools.py:511
void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) override
ProductProvenance const * productProvenancePtr_() const final
#define CMS_THREAD_SAFE
std::atomic< bool > prefetchRequested_
std::atomic< unsigned int > lastCheckIndex_
BranchDescription const & branchDescription_() const override
bool productWasDeleted_() const override
ProducedProductResolver::ProductStatus ProductStatus
ProductProvenance const * productProvenancePtr_() const final
void setProduct(std::unique_ptr< WrapperBase > edp) const
BranchDescription const & branchDescription_() const override
std::atomic< bool > skippingPrefetchRequested_
std::atomic< ProductStatus > theStatus_
std::vector< bool > ambiguous_
Resolution resolveProductImpl(FUNC resolver) const
virtual void setMergeableRunProductMetadata_(MergeableRunProductMetadata const *)
virtual void retrieveAndMerge_(Principal const &principal, MergeableRunProductMetadata const *mergeableRunProductMetadata) const
ProductStatus defaultStatus() const
void setMergeableRunProductMetadataInProductData(MergeableRunProductMetadata const *)
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
DataManagingOrAliasProductResolver & realProduct_
BranchDescription const & branchDescription_() const final
std::vector< ProductResolverIndex > matchingHolders_
Resolution resolveProduct_(Principal const &principal, bool skipCurrentProcess, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
bool productUnavailable_() const override
std::string const & resolvedModuleLabel_() const override
Transition transition() const
Definition: GlobalContext.h:53
ProductData const & getProductData() const final
bool productWasDeleted_() const override
std::string const & resolvedModuleLabel_() const override
void resetBranchDescription_(std::shared_ptr< BranchDescription const > bd) final
Provenance const * provenance_() const final
bool productUnavailable_() const override
ProducedProductResolver::ProductStatus ProductStatus
void resetProductData_(bool deleteEarly) override=0
std::shared_ptr< BranchDescription const > bd_
bool unscheduledWasNotRun_() const final
bool unscheduledWasNotRun_() const override
std::atomic< bool > & prefetchRequested() const
GlobalContext const * globalContext() const
PuttableProductResolver(std::shared_ptr< BranchDescription const > bd)
SingleChoiceNoProcessProductResolver(ProductResolverIndex iChoice)
std::string const & moduleLabel() const
void prefetchAsync_(WaitingTaskHolder waitTask, Principal const &principal, bool skipCurrentProcess, ServiceToken const &token, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const override
Provenance const * provenance_() const final
Provenance const * provenance_() const final