ATLAS Offline Software
DelayedConditionsCleanerSvc.h
Go to the documentation of this file.
1 // This file's extension implies that it's C, but it's really -*- C++ -*-.
2 /*
3  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
4 */
13 #ifndef ATHENASERVICES_DELAYEDCONDITIONSCLEANERTOOLSVC_H
14 #define ATHENASERVICES_DELAYEDCONDITIONSCLEANERTOOLSVC_H
15 
16 
19 #include "CxxUtils/Ring.h"
20 #include <queue>
21 #include <mutex>
22 #include <cstdint>
23 #include <atomic>
24 #include <unordered_map>
25 
26 
27 namespace Athena {
28 
29 
30 class DelayedConditionsCleanerTask;
31 class DelayedConditionsCleanerSvcProps;
32 
33 
58  : public extends<AthService, IConditionsCleanerSvc>
59 {
60 public:
63 
64 
70  DelayedConditionsCleanerSvc (const std::string& name, ISvcLocator* svc);
71 
76 
77 
81  virtual StatusCode initialize() override;
82 
83 
87  virtual StatusCode finalize() override;
88 
89 
96  virtual StatusCode event (const EventContext& ctx, bool allowAsync) override;
97 
98 
104  virtual StatusCode condObjAdded (const EventContext& ctx,
105  CondContBase& cc) override;
106 
107 
113  virtual StatusCode printStats() const override;
114 
115 
120  virtual StatusCode reset() override;
121 
122 
123 
124 private:
126 
127 
130 
131 
134 
135  typedef std::array<std::vector<key_type>,2> twoKeys_t;
136 
137 
140  {
141  public:
143 
147 
149  size_t m_nClean = 0;
150 
152  size_t m_nRemoved = 0;
153 
155  size_t m_removed0 = 0;
156 
158  size_t m_removed1 = 0;
159 
161  size_t m_removed2plus = 0;
162  };
163 
164 
165  twoKeys_t getKeys(const Ring& runLBRing, const Ring& TSRing) const;
166 
176  void scheduleClean (std::vector<CondContInfo*>&& cis,
177  twoKeys_t&& twoKeys,
178  bool allowAsync);
179 
180 
186  void cleanContainers (std::vector<CondContInfo*>&& cis,
187  twoKeys_t&& twoKeys);
188 
189 
197  bool cleanContainer (CondContInfo* ci,
198  const twoKeys_t& keys) const;
199 
200 
201 
207 
209  std::vector<key_type> m_slotLBN;
210  std::vector<key_type> m_slotTimestamp;
211 
212 
214  typedef std::unordered_map<CondContBase*, CondContInfo> CCInfoMap_t;
216 
217 
220  struct QueueItem
221  {
222  QueueItem (EventContext::ContextEvt_t evt, CondContInfo& ci)
223  : m_evt (evt), m_ci (&ci)
224  {}
225 
226  EventContext::ContextEvt_t m_evt;
228 
229  bool operator< (const QueueItem& other) const
230  {
231  // Reversed, since we want the lowest to come first.
232  return m_evt > other.m_evt;
233  }
234  };
235 
237  std::priority_queue<QueueItem> m_work;
238 
241  typedef std::lock_guard<mutex_t> lock_t;
243 
244 
246  size_t m_nEvents = 0; // Number of times queue was examined.
247  size_t m_queueSum = 0; // Running sum of queue size.
248  size_t m_workRemoved = 0; // Count of items removed from the queue.
249  size_t m_maxQueue = 0; // Maximum queue size.
250 
251 
253  std::atomic<int> m_cleanTasks {0};
254 
256  std::unique_ptr<DelayedConditionsCleanerSvcProps> m_props;
257 };
258 
259 
260 } // namespace Athena
261 
262 
263 #endif // not ATHENASERVICES_DELAYEDCONDITIONSCLEANERTOOLSVC_H
Athena::DelayedConditionsCleanerSvc::cleanContainers
void cleanContainers(std::vector< CondContInfo * > &&cis, twoKeys_t &&twoKeys)
Clean a set of containers.
Definition: DelayedConditionsCleanerSvc.cxx:423
Athena::DelayedConditionsCleanerSvc::m_timestamp
Ring m_timestamp
Definition: DelayedConditionsCleanerSvc.h:206
Athena::DelayedConditionsCleanerSvc::QueueItem::operator<
bool operator<(const QueueItem &other) const
Definition: DelayedConditionsCleanerSvc.h:229
Athena::DelayedConditionsCleanerSvc::QueueItem
Item in the work queue.
Definition: DelayedConditionsCleanerSvc.h:221
Athena::DelayedConditionsCleanerSvc::m_slotLBN
std::vector< key_type > m_slotLBN
IOV keys currently in use for each slot.
Definition: DelayedConditionsCleanerSvc.h:209
IConditionsCleanerSvc.h
Interface for doing garbage collection of conditions objects.
Athena::DelayedConditionsCleanerSvc
Clean conditions containers after a delay.
Definition: DelayedConditionsCleanerSvc.h:59
Athena::DelayedConditionsCleanerSvc::initialize
virtual StatusCode initialize() override
Standard Gaudi initialize method.
Definition: DelayedConditionsCleanerSvc.cxx:166
CxxUtils::Ring< key_type >
Athena::DelayedConditionsCleanerSvc::~DelayedConditionsCleanerSvc
~DelayedConditionsCleanerSvc()
Standard destructor.
Definition: DelayedConditionsCleanerSvc.cxx:493
BeamSpot::mutex
std::mutex mutex
Definition: InDetBeamSpotVertex.cxx:18
Athena::DelayedConditionsCleanerSvc::m_maxQueue
size_t m_maxQueue
Definition: DelayedConditionsCleanerSvc.h:249
Athena::DelayedConditionsCleanerSvc::m_workMutex
mutex_t m_workMutex
Definition: DelayedConditionsCleanerSvc.h:242
Athena::DelayedConditionsCleanerSvc::CondContInfo::m_removed2plus
size_t m_removed2plus
Number of times two or more objects were removed.
Definition: DelayedConditionsCleanerSvc.h:161
Athena::DelayedConditionsCleanerSvc::QueueItem::m_evt
EventContext::ContextEvt_t m_evt
Definition: DelayedConditionsCleanerSvc.h:226
Athena::DelayedConditionsCleanerSvc::twoKeys_t
std::array< std::vector< key_type >, 2 > twoKeys_t
Definition: DelayedConditionsCleanerSvc.h:135
CondContBase::KeyType
KeyType
Type of key used for this container.
Definition: CondCont.h:180
Athena::DelayedConditionsCleanerSvc::getKeys
twoKeys_t getKeys(const Ring &runLBRing, const Ring &TSRing) const
Definition: DelayedConditionsCleanerSvc.cxx:345
LArG4FSStartPointFilter.evt
evt
Definition: LArG4FSStartPointFilter.py:42
Athena::DelayedConditionsCleanerSvc::condObjAdded
virtual StatusCode condObjAdded(const EventContext &ctx, CondContBase &cc) override
Called after a conditions object has been added.
Definition: DelayedConditionsCleanerSvc.cxx:256
Athena::DelayedConditionsCleanerSvc::m_queueSum
size_t m_queueSum
Definition: DelayedConditionsCleanerSvc.h:247
Athena::DelayedConditionsCleanerSvc::m_slotTimestamp
std::vector< key_type > m_slotTimestamp
Definition: DelayedConditionsCleanerSvc.h:210
Athena::DelayedConditionsCleanerSvc::mutex_t
std::mutex mutex_t
Serialize access to m_ccinfo and m_work.
Definition: DelayedConditionsCleanerSvc.h:240
Athena::DelayedConditionsCleanerSvc::DelayedConditionsCleanerTask
friend class DelayedConditionsCleanerTask
Definition: DelayedConditionsCleanerSvc.h:125
Athena::DelayedConditionsCleanerSvc::CondContInfo
Information that we maintain about each conditions container.
Definition: DelayedConditionsCleanerSvc.h:140
Athena::DelayedConditionsCleanerSvc::CondContInfo::m_removed0
size_t m_removed0
Number of times exactly 0 objects were removed.
Definition: DelayedConditionsCleanerSvc.h:155
Athena::DelayedConditionsCleanerSvc::m_ccinfo
CCInfoMap_t m_ccinfo
Definition: DelayedConditionsCleanerSvc.h:215
Athena::DelayedConditionsCleanerSvc::CondContInfo::CondContInfo
CondContInfo(CondContBase &cc)
Definition: DelayedConditionsCleanerSvc.h:142
Athena::DelayedConditionsCleanerSvc::CondContInfo::m_removed1
size_t m_removed1
Number of times exactly 1 object was removed.
Definition: DelayedConditionsCleanerSvc.h:158
Athena
Some weak symbol referencing magic...
Definition: AthLegacySequence.h:21
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
CondContBase
Base class for all conditions containers.
Definition: CondCont.h:140
Athena::DelayedConditionsCleanerSvc::m_nEvents
size_t m_nEvents
Priority queue statistics.
Definition: DelayedConditionsCleanerSvc.h:246
Athena::DelayedConditionsCleanerSvc::scheduleClean
void scheduleClean(std::vector< CondContInfo * > &&cis, twoKeys_t &&twoKeys, bool allowAsync)
Do cleaning for a set of containers.
Definition: DelayedConditionsCleanerSvc.cxx:386
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
Athena::DelayedConditionsCleanerSvc::m_work
std::priority_queue< QueueItem > m_work
Priority queue of pending cleaning requests.
Definition: DelayedConditionsCleanerSvc.h:237
Athena::DelayedConditionsCleanerSvc::printStats
virtual StatusCode printStats() const override
Print some statistics about the garbage collection.
Definition: DelayedConditionsCleanerSvc.cxx:277
Athena::DelayedConditionsCleanerSvc::DelayedConditionsCleanerSvc
DelayedConditionsCleanerSvc(const std::string &name, ISvcLocator *svc)
Standard Gaudi constructor.
Definition: DelayedConditionsCleanerSvc.cxx:155
Athena::DelayedConditionsCleanerSvc::CondContInfo::m_nClean
size_t m_nClean
Number of times cleaning was attempted.
Definition: DelayedConditionsCleanerSvc.h:149
Athena::DelayedConditionsCleanerSvc::lock_t
std::lock_guard< mutex_t > lock_t
Definition: DelayedConditionsCleanerSvc.h:241
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Athena::DelayedConditionsCleanerSvc::m_props
std::unique_ptr< DelayedConditionsCleanerSvcProps > m_props
Component properties.
Definition: DelayedConditionsCleanerSvc.h:256
Athena::DelayedConditionsCleanerSvc::CCInfoMap_t
std::unordered_map< CondContBase *, CondContInfo > CCInfoMap_t
Map of information, indexed by the conditions container.
Definition: DelayedConditionsCleanerSvc.h:214
Athena::DelayedConditionsCleanerSvc::event
virtual StatusCode event(const EventContext &ctx, bool allowAsync) override
Called at the start of each event.
Definition: DelayedConditionsCleanerSvc.cxx:188
Athena::DelayedConditionsCleanerSvc::m_cleanTasks
std::atomic< int > m_cleanTasks
Number of active asynchronous cleaning tasks.
Definition: DelayedConditionsCleanerSvc.h:253
Athena::DelayedConditionsCleanerSvc::cleanContainer
bool cleanContainer(CondContInfo *ci, const twoKeys_t &keys) const
Clean a single container.
Definition: DelayedConditionsCleanerSvc.cxx:468
Athena::DelayedConditionsCleanerSvc::m_workRemoved
size_t m_workRemoved
Definition: DelayedConditionsCleanerSvc.h:248
Athena::DelayedConditionsCleanerSvc::finalize
virtual StatusCode finalize() override
Standard Gaudi finalize method.
Definition: DelayedConditionsCleanerSvc.cxx:498
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
Ring.h
A simple ring buffer.
Athena::DelayedConditionsCleanerSvc::Ring
CxxUtils::Ring< key_type > Ring
Ring buffer holding most recent IOV keys of a given type.
Definition: DelayedConditionsCleanerSvc.h:129
Athena::DelayedConditionsCleanerSvc::m_runlbn
Ring m_runlbn
Two ring buffers for recent IOV keys, one for run+LBN and one for timestamp.
Definition: DelayedConditionsCleanerSvc.h:205
Athena::DelayedConditionsCleanerSvc::key_type
CondContBase::key_type key_type
Packed key type.
Definition: DelayedConditionsCleanerSvc.h:62
CondContBase::key_type
uint64_t key_type
Type used to store an IOV time internally.
Definition: CondCont.h:204
AthService.h
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
Athena::DelayedConditionsCleanerSvc::QueueItem::QueueItem
QueueItem(EventContext::ContextEvt_t evt, CondContInfo &ci)
Definition: DelayedConditionsCleanerSvc.h:222
Athena::DelayedConditionsCleanerSvc::reset
virtual StatusCode reset() override
Clear the internal state of the service.
Definition: DelayedConditionsCleanerSvc.cxx:322
Athena::DelayedConditionsCleanerSvc::QueueItem::m_ci
CondContInfo * m_ci
Definition: DelayedConditionsCleanerSvc.h:227
python.handimod.cc
int cc
Definition: handimod.py:523
Athena::DelayedConditionsCleanerSvc::CondContInfo::m_cc
CondContBase & m_cc
The conditions container.
Definition: DelayedConditionsCleanerSvc.h:146
Athena::DelayedConditionsCleanerSvc::CondContInfo::m_nRemoved
size_t m_nRemoved
Total number of objects removed by cleaning.
Definition: DelayedConditionsCleanerSvc.h:152