ATLAS Offline Software
InternalOnline.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef EVENTCONTAINERS_INTERNALONLINE_H
6 #define EVENTCONTAINERS_INTERNALONLINE_H
7 
10 #include <atomic>
11 #include <mutex>
12 
13 namespace EventContainers{
14 class IdentifiableCacheBase;
15 /*
16 The online implementation keeps a pointer to an external cache which owns the collections
17 and can be filled concurrently. The container itself maintains a bit mask to identify which
18 collections can be accessed from this container. It also maintains a wait list which records
19 uncompleted objects that were added to the container. When a complete collection is
20 requested the wait-list is processed, locking the thread until all elements are completed.
21 The intention of this is to delay thread locking until the last possible moment and thus
22 hopefully avoid it altogether.
23 Random access is fast since it takes a direct index to the external cache element.
24 Ordered iteration is also fast after the lazily initialised collection is constructed.
25 */
26 class InternalOnline final : public I_InternalIDC {
27 public:
29  virtual InternalConstItr cbegin() const override;
30  virtual InternalConstItr cend() const override;
31  virtual InternalConstItr indexFind( IdentifierHash hashId ) const override;
32  virtual const std::vector < hashPair >& getAllHashPtrPair() const override;
33  virtual ~InternalOnline()=default;
34  virtual void wait() const override;
35  virtual bool tryAddFromCache(IdentifierHash hashId, EventContainers::IDC_WriteHandleBase &lock) override;
36  virtual bool tryAddFromCache(IdentifierHash hashId) override;
37  virtual std::vector<IdentifierHash> getAllCurrentHashes() const override;
38  virtual size_t numberOfCollections() const override;
39  void resetMask();
40  virtual size_t fullSize() const noexcept override { return m_mask.size(); }
41  virtual StatusCode fetchOrCreate(IdentifierHash hashId) override;
42  virtual StatusCode fetchOrCreate(const std::vector<IdentifierHash> &hashIds) override;
43  virtual bool insert(IdentifierHash hashId, const void* ptr) override;
44  virtual const void* findIndexPtr(IdentifierHash hashId) const noexcept override;
45  virtual StatusCode addLock(IdentifierHash hashId, const void* ptr) override;
46  virtual void* removeCollection( IdentifierHash hashId ) override;
47  virtual void destructor(deleter_f*) noexcept override;
48  virtual void cleanUp(deleter_f*) noexcept override;
49 private:
51  mutable std::vector< IdentifierHash > m_waitlist ATLAS_THREAD_SAFE;
52  mutable std::vector<I_InternalIDC::hashPair> m_map ATLAS_THREAD_SAFE;
53  mutable std::mutex m_waitMutex ATLAS_THREAD_SAFE;
54  mutable std::vector<bool> m_mask ATLAS_THREAD_SAFE;
55  mutable std::atomic<bool> m_waitNeeded ATLAS_THREAD_SAFE; //These mutables are carefully thought out, do not change
56 };
57 
58 }
59 #endif
EventContainers::InternalOnline::~InternalOnline
virtual ~InternalOnline()=default
EventContainers::InternalOnline
Definition: InternalOnline.h:26
EventContainers::IdentifiableCacheBase
Definition: IdentifiableCacheBase.h:26
BeamSpot::mutex
std::mutex mutex
Definition: InDetBeamSpotVertex.cxx:18
EventContainers::InternalOnline::findIndexPtr
virtual const void * findIndexPtr(IdentifierHash hashId) const noexcept override
Definition: InternalOnline.cxx:135
EventContainers::InternalOnline::cend
virtual InternalConstItr cend() const override
Definition: InternalOnline.cxx:26
EventContainers::InternalOnline::wait
virtual void wait() const override
Definition: InternalOnline.cxx:44
EventContainers
Definition: T_AthenaPoolCreateFuncs.h:33
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:562
EventContainers::I_InternalIDC
Definition: I_InternalIDC.h:34
EventContainers::InternalOnline::cleanUp
virtual void cleanUp(deleter_f *) noexcept override
Definition: InternalOnline.cxx:161
EventContainers::InternalOnline::getAllHashPtrPair
virtual const std::vector< hashPair > & getAllHashPtrPair() const override
Definition: InternalOnline.cxx:19
EventContainers::InternalOnline::destructor
virtual void destructor(deleter_f *) noexcept override
Definition: InternalOnline.cxx:157
EventContainers::InternalOnline::ATLAS_THREAD_SAFE
std::mutex m_waitMutex ATLAS_THREAD_SAFE
Definition: InternalOnline.h:53
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
EventContainers::InternalOnline::resetMask
void resetMask()
Definition: InternalOnline.cxx:106
deleter_f
void deleter_f(const void *p)
Definition: deleter.h:12
EventContainers::InternalOnline::cbegin
virtual InternalConstItr cbegin() const override
Definition: InternalOnline.cxx:32
EventContainers::InternalOnline::ATLAS_THREAD_SAFE
std::vector< bool > m_mask ATLAS_THREAD_SAFE
Definition: InternalOnline.h:54
EventContainers::InternalOnline::fetchOrCreate
virtual StatusCode fetchOrCreate(IdentifierHash hashId) override
Definition: InternalOnline.cxx:113
EventContainers::InternalOnline::fullSize
virtual size_t fullSize() const noexcept override
Definition: InternalOnline.h:40
EventContainers::InternalOnline::m_cacheLink
EventContainers::IdentifiableCacheBase * m_cacheLink
Definition: InternalOnline.h:50
EventContainers::InternalOnline::indexFind
virtual InternalConstItr indexFind(IdentifierHash hashId) const override
Definition: InternalOnline.cxx:37
EventContainers::InternalOnline::tryAddFromCache
virtual bool tryAddFromCache(IdentifierHash hashId, EventContainers::IDC_WriteHandleBase &lock) override
Definition: InternalOnline.cxx:66
EventContainers::InternalOnline::ATLAS_THREAD_SAFE
std::vector< I_InternalIDC::hashPair > m_map ATLAS_THREAD_SAFE
Definition: InternalOnline.h:52
EventContainers::InternalOnline::addLock
virtual StatusCode addLock(IdentifierHash hashId, const void *ptr) override
Definition: InternalOnline.cxx:143
EventContainers::InternalOnline::ATLAS_THREAD_SAFE
std::vector< IdentifierHash > m_waitlist ATLAS_THREAD_SAFE
Definition: InternalOnline.h:51
EventContainers::InternalOnline::removeCollection
virtual void * removeCollection(IdentifierHash hashId) override
Definition: InternalOnline.cxx:153
EventContainers::InternalOnline::insert
virtual bool insert(IdentifierHash hashId, const void *ptr) override
Definition: InternalOnline.cxx:128
EventContainers::InternalOnline::InternalOnline
InternalOnline(EventContainers::IdentifiableCacheBase *cache)
Definition: InternalOnline.cxx:16
EventContainers::IDC_WriteHandleBase
Definition: IDC_WriteHandleBase.h:27
EventContainers::InternalOnline::numberOfCollections
virtual size_t numberOfCollections() const override
Definition: InternalOnline.cxx:101
EventContainers::InternalOnline::getAllCurrentHashes
virtual std::vector< IdentifierHash > getAllCurrentHashes() const override
Definition: InternalOnline.cxx:91
EventContainers::InternalOnline::ATLAS_THREAD_SAFE
std::atomic< bool > m_waitNeeded ATLAS_THREAD_SAFE
Definition: InternalOnline.h:55
I_InternalIDC.h
IdentifierHash
Definition: IdentifierHash.h:38
checker_macros.h
Define macros for attributes used to control the static checker.
EventContainers::I_InternalIDC::InternalConstItr
std::vector< hashPair >::const_iterator InternalConstItr
Definition: I_InternalIDC.h:37