ATLAS Offline Software
DelayedConditionsCleanerSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
14 #include "AthenaKernel/CondCont.h"
15 #include "AthenaKernel/IRCUSvc.h"
16 #include "CxxUtils/StrFormat.h"
17 #include "GaudiKernel/EventContext.h"
18 #include "GaudiKernel/ServiceHandle.h"
19 #include <algorithm>
20 #include <unordered_set>
21 
22 
23 // We wanted to try to allow cleaning to run as asynchronous tasks,
24 // but there are some race conditions that appear to be difficult
25 // to resolve. These stem from the fact that conditions are only
26 // written from CondInputLoader. If we clean after that, and don't
27 // have the full set of IOV keys for all executing events, then we can
28 // clean an item which the slot won't be able to recover.
29 // Leave the code commented-out for now while we think about this further.
30 #define USE_ASYNC_TASK 0
31 
32 
33 #if USE_ASYNC_TASK
34 #include "tbb/task.h"
35 #endif
36 
37 
38 namespace Athena {
39 
40 
42  : public AthProperties<DelayedConditionsCleanerSvc>
43 {
44 public:
47 
49  Gaudi::Property<size_t> m_ringSize
50  { parent(), "RingSize", 100,
51  "Number of previous events for which to remember IOV history." };
52 
55  Gaudi::Property<size_t> m_cleanDelay
56  { parent(), "CleanDelay", 100,
57  "Number of events after adding a conditions object we try to clean its container." };
58 
60  Gaudi::Property<size_t> m_lookAhead
61  { parent(), "LookAhead", 10,
62  "Maximum number of events to consolodate together when cleaning." };
63 
64 
66 #if USE_ASYNC_TASK
67  Gaudi::Property<bool> m_async
68  { parent(), "Async", false,
69  "If true, run cleaning asynchronously in an MT job." };
70 #else
71  bool m_async = false;
72 #endif
73 
76  { parent(), "RCUSvc", "Athena::RCUSvc",
77  "The RCU service." };
78 };
79 
80 
81 #if USE_ASYNC_TASK
82 
85 class DelayedConditionsCleanerTask
86  : public tbb::task
87 {
88 public:
96  DelayedConditionsCleanerTask (DelayedConditionsCleanerSvc& cleaner,
97  std::vector<DelayedConditionsCleanerSvc::CondContInfo*>&& cis,
99 
103  tbb::task* execute() override;
104 
105 
106 private:
108  DelayedConditionsCleanerSvc& m_cleaner;
109 
111  std::vector<DelayedConditionsCleanerSvc::CondContInfo*> m_cis;
112 
115 };
116 
117 
124 DelayedConditionsCleanerTask::DelayedConditionsCleanerTask
125  (DelayedConditionsCleanerSvc& cleaner,
126  std::vector<DelayedConditionsCleanerSvc::CondContInfo*>&& cis,
128  : m_cleaner (cleaner),
129  m_cis (cis),
130  m_keys (keys)
131 {
132 }
133 
134 
139 {
140  // Do the cleaning.
141  m_cleaner.cleanContainers (std::move (m_cis), std::move (m_keys));
142 
143  // This task is terminating.
144  --m_cleaner.m_cleanTasks;
145  return nullptr;
146 }
147 #endif // USE_ASYNC_TASK
148 
149 
156  ISvcLocator* svc)
157  : base_class (name, svc),
158  m_props (std::make_unique<DelayedConditionsCleanerSvcProps> (this))
159 {
160 }
161 
162 
167 {
168  // Set the ring buffer sizes.
169  m_runlbn.reset (m_props->m_ringSize);
170  m_timestamp.reset (m_props->m_ringSize);
171 
172  ATH_CHECK( m_props->m_rcu.retrieve() );
173  size_t nslots = m_props->m_rcu->getNumSlots();
174  m_slotLBN.resize (nslots);
175  m_slotTimestamp.resize (nslots);
176 
177  return StatusCode::SUCCESS;
178 }
179 
180 
188 DelayedConditionsCleanerSvc::event (const EventContext& ctx, bool allowAsync)
189 {
190  // Push the IOV key for the current event into the ring buffers.
191  // Also save in the per-slot arrays.
192  key_type key_lbn = CondContBase::keyFromRunLBN (ctx.eventID());
193  key_type key_ts = CondContBase::keyFromTimestamp (ctx.eventID());
194  m_runlbn.push (key_lbn);
195  m_timestamp.push (key_ts);
196  EventContext::ContextID_t slot = ctx.slot();
197  if (slot != EventContext::INVALID_CONTEXT_ID) {
198  m_slotLBN[slot] = key_lbn;
199  m_slotTimestamp[slot] = key_ts;
200  }
201 
202  // Return now if an asynchronous cleaning task is still running ---
203  // we don't want to start a new one yet. We'll check pending work
204  // on the next call.
205  if (m_cleanTasks > 0) {
206  return StatusCode::SUCCESS;
207  }
208 
209  // Collect conditions containers in need of cleaning.
210  std::vector<CondContInfo*> ci_vec;
211  {
212  lock_t lock (m_workMutex);
213  // Is it time to clean the container at the top of the work queue?
214  if (!m_work.empty() && m_work.top().m_evt <= ctx.evt()) {
215  ++m_nEvents;
216  size_t sz = m_work.size();
217  m_queueSum += sz;
219 
220  // Yes. Put it on the correct list. Also look ahead in the queue
221  // a bit; if there are other containers that we want to clean soon,
222  // go ahead and do them now.
223  do {
224  CondContInfo* ci = m_work.top().m_ci;
225  switch (ci->m_cc.keyType()) {
226  case KeyType::SINGLE:
227  break;
228  case KeyType::RUNLBN:
229  case KeyType::MIXED:
230  case KeyType::TIMESTAMP:
231  ci_vec.push_back (ci);
232  break;
233  default:
234  std::abort();
235  }
236  m_work.pop();
237  ++m_workRemoved;
238  } while (!m_work.empty() && m_work.top().m_evt <= ctx.evt() + m_props->m_lookAhead);
239  }
240  }
241 
242  // Clean the containers.
243  if (!ci_vec.empty()) {
244  scheduleClean (std::move (ci_vec), getKeys(m_runlbn,m_timestamp),
245  allowAsync);
246  }
247  return StatusCode::SUCCESS;
248 }
249 
250 
257  CondContBase& cc)
258 {
259  // Add this container to the priority queue.
260  lock_t lock (m_workMutex);
262  if (it == m_ccinfo.end()) {
263  it = m_ccinfo.emplace (&cc, CondContInfo (cc)).first;
264  }
265 
266  EventContext::ContextEvt_t evt = ctx.evt();
267  m_work.emplace (evt + m_props->m_cleanDelay, it->second);
268  return StatusCode::SUCCESS;
269 }
270 
271 
278 {
279  // Suppress output if we didn't actually do anything.
280  if (m_nEvents == 0) {
281  return StatusCode::SUCCESS;
282  }
283 
284  ATH_MSG_INFO( "Conditions container statistics" );
285  ATH_MSG_INFO( CxxUtils::strformat (" Work q: Max size: %zu (%zu queries) ",
286  m_maxQueue, m_nEvents) );
287  size_t den = std::max (m_nEvents, 1lu);
288  ATH_MSG_INFO( CxxUtils::strformat (" Avg size: %.2f / Avg removed: %.2f",
289  static_cast<float>(m_queueSum)/den,
290  static_cast<float>(m_workRemoved)/den) );
291 
292  std::vector<const CondContInfo*> infos;
293  for (const auto& p : m_ccinfo) {
294  infos.push_back (&p.second);
295  }
296  std::sort (infos.begin(), infos.end(),
297  [](const CondContInfo* a, const CondContInfo* b)
298  { return a->m_cc.id().key() < b->m_cc.id().key(); });
299 
300  for (const CondContInfo* ci : infos) {
301  ATH_MSG_INFO( CxxUtils::strformat (" %-20s nInserts %6zu maxSize %3zu",
302  ci->m_cc.id().key().c_str(),
303  ci->m_cc.nInserts(),
304  ci->m_cc.maxSize()) );
305  den = std::max (ci->m_nClean, 1lu);
306  ATH_MSG_INFO( CxxUtils::strformat (" nClean %zu avgRemoved %.2f 0/1/2+ %zu/%zu/%zu",
307  ci->m_nClean,
308  static_cast<float> (ci->m_nRemoved) / den,
309  ci->m_removed0,
310  ci->m_removed1,
311  ci->m_removed2plus) );
312  }
313 
314  return StatusCode::SUCCESS;
315 }
316 
317 
323 {
324  m_runlbn.reset (m_props->m_ringSize);
325  m_timestamp.reset (m_props->m_ringSize);
326 
327  std::fill (m_slotLBN.begin(), m_slotLBN.end(), 0);
328  std::fill (m_slotTimestamp.begin(), m_slotTimestamp.end(), 0);
329 
330  m_ccinfo.clear();
331  std::priority_queue<QueueItem> tmp;
332  m_work.swap (tmp);
333 
334  m_nEvents = 0;
335  m_queueSum = 0;
336  m_workRemoved = 0;
337  m_maxQueue = 0;
338  m_cleanTasks = 0;
339 
340  return StatusCode::SUCCESS;
341 }
342 
343 
345 DelayedConditionsCleanerSvc::getKeys(const Ring& runLBRing, const Ring& TSRing) const {
346 
347  // Get a copy of the contents of the ring buffer holding runLumi and time-stamp keys
348  std::vector<key_type> runLBKeys=runLBRing.getKeysDedup();
349  std::vector<key_type> TSKeys=TSRing.getKeysDedup();
350 
351  // Add in the keys for the currently-executing slots.
352  // These are very likely to already be in the ring, but that's
353  // not absolutely guaranteed.
354  // FIXME: This probably does another memory allocation, due to
355  // growing the buffer. Would be nice to avoid that.
356  runLBKeys.insert (runLBKeys.end(), m_slotLBN.begin(), m_slotLBN.end());
357  TSKeys.insert(TSKeys.end(), m_slotTimestamp.begin(), m_slotTimestamp.end());
358 
359  twoKeys_t result{runLBKeys, TSKeys};
360 
365  for ( auto& keys : result ) {
366  std::sort (keys.begin(), keys.end());
367  auto end = std::unique (keys.begin(), keys.end());
368  keys.resize (end - keys.begin());
369  }
370 
371 
372  return result;
373 }
374 
375 
385 void
386 DelayedConditionsCleanerSvc::scheduleClean (std::vector<CondContInfo*>&& cis,
387  twoKeys_t&& twoKeys,
388  bool allowAsync)
389 {
390  // Remove any duplicates from the list of containers.
391  std::sort (cis.begin(), cis.end());
392  auto pos = std::unique (cis.begin(), cis.end());
393  cis.resize (pos - cis.begin());
394 
395  if (allowAsync && m_props->m_async) {
396 #if USE_ASYNC_TASK
397  // Queue cleaning as a TBB task.
398  // Count that we have another executing task.
399  ++m_cleanTasks;
400 
401  // Create the TBB task and queue it.
402  // TBB will delete the task object after it completes.
403  tbb::task* t = new (tbb::task::allocate_root())
404  DelayedConditionsCleanerTask (*this, std::move (cis),
405  std::move (twoKeys));
406  tbb::task::enqueue (*t);
407 #endif
408  }
409  else
410  {
411  // Call cleaning directly.
412  cleanContainers (std::move (cis), std::move (twoKeys));
413  }
414 }
415 
416 
422 void
423 DelayedConditionsCleanerSvc::cleanContainers (std::vector<CondContInfo*>&& cis,
424  twoKeys_t&& twoKeys)
425 {
426  // FIXME: Some conditions objects have pointers to parts of other
427  // conditions objects, which violates the lifetime guarantees of
428  // conditions containers (a pointer you get from a conditions container
429  // is guaranteed to be valid until the end of the current event, but
430  // not past that). In some cases, this can be dealt with by replacing
431  // the pointers with CondLink, but that is sometimes rather inconvenient.
432  // Try to work around this for now by ensuring that when we delete an object,
433  // we also try to clean the containers of other objects that may depend
434  // on it.
435  std::vector<CondContInfo*> toclean = std::move (cis);
436  std::unordered_set<CondContInfo*> cleaned (toclean.begin(), toclean.end());
437  while (!toclean.empty()) {
438  std::vector<CondContInfo*> newclean;
439  for (CondContInfo* ci : toclean) {
440  if (cleanContainer (ci, twoKeys)) {
441  lock_t lock (m_workMutex);
442  for (CondContBase* dep : ci->m_cc.getDeps()) {
443  CCInfoMap_t::iterator it = m_ccinfo.find (dep);
444  // If we don't find it, then dep must have no conditions objects.
445  if (it != m_ccinfo.end()) {
446  CondContInfo* ci_dep = &it->second;
447  if (cleaned.insert (ci_dep).second) {
448  newclean.push_back (ci_dep);
449  }
450  }
451  }
452  }
453  }
454  toclean = std::move (newclean);
455  }
456 }
457 
458 
467 bool
469  const twoKeys_t& twoKeys) const
470 {
471  size_t n = ci->m_cc.trim (twoKeys[0],twoKeys[1]);
472 
473  ++ci->m_nClean;
474  ci->m_nRemoved += n;
475  switch (n) {
476  case 0:
477  ++ci->m_removed0;
478  break;
479  case 1:
480  ++ci->m_removed1;
481  break;
482  default:
483  ++ci->m_removed2plus;
484  }
485 
486  return n > 0;
487 }
488 
494 
499 {
500  ATH_CHECK( printStats() );
501  return StatusCode::SUCCESS;
502 }
503 
504 
505 } // namespace Athena
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
Athena::DelayedConditionsCleanerSvc::cleanContainers
void cleanContainers(std::vector< CondContInfo * > &&cis, twoKeys_t &&twoKeys)
Clean a set of containers.
Definition: DelayedConditionsCleanerSvc.cxx:423
CondContBase::keyFromTimestamp
static key_type keyFromTimestamp(const EventIDBase &b)
Make a timestamp key from an EventIDBase.
Athena::DelayedConditionsCleanerSvc::m_timestamp
Ring m_timestamp
Definition: DelayedConditionsCleanerSvc.h:206
Athena::DelayedConditionsCleanerSvcProps::DelayedConditionsCleanerSvcProps
DelayedConditionsCleanerSvcProps(DelayedConditionsCleanerSvc *parent)
Definition: DelayedConditionsCleanerSvc.cxx:45
fitman.sz
sz
Definition: fitman.py:527
get_generator_info.result
result
Definition: get_generator_info.py:21
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
max
#define max(a, b)
Definition: cfImp.cxx:41
Athena::DelayedConditionsCleanerSvc::m_slotLBN
std::vector< key_type > m_slotLBN
IOV keys currently in use for each slot.
Definition: DelayedConditionsCleanerSvc.h:209
CondCont.h
Hold mappings of ranges to condition objects.
Athena::DelayedConditionsCleanerSvc
Clean conditions containers after a delay.
Definition: DelayedConditionsCleanerSvc.h:59
CxxUtils::Ring::getKeysDedup
std::vector< T > getKeysDedup() const
Return a copy of keys in the buffer.
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
Athena::DelayedConditionsCleanerSvcProps::m_async
bool m_async
Property: If true, run cleaning asynchronously in an MT job.
Definition: DelayedConditionsCleanerSvc.cxx:71
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
CondContBase::KeyType::RUNLBN
@ RUNLBN
Container uses run+lbn keys.
make_unique
std::unique_ptr< T > make_unique(Args &&... args)
Definition: SkimmingToolEXOT5.cxx:23
CondContBase::keyFromRunLBN
static key_type keyFromRunLBN(const EventIDBase &b)
Make a run+lbn key from an EventIDBase.
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::twoKeys_t
std::array< std::vector< key_type >, 2 > twoKeys_t
Definition: DelayedConditionsCleanerSvc.h:135
skel.it
it
Definition: skel.GENtoEVGEN.py:423
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::DelayedConditionsCleanerSvcProps::m_ringSize
Gaudi::Property< size_t > m_ringSize
Property: Number of previous events for which to remember IOV history.
Definition: DelayedConditionsCleanerSvc.cxx:50
CondContBase::keyType
KeyType keyType() const
Return the key type for this container.
CondContBase::getDeps
std::vector< CondContBase * > getDeps()
Return the list of conditions containers that depend on this one.
Definition: CondCont.cxx:705
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
Athena::DelayedConditionsCleanerSvcProps::m_rcu
ServiceHandle< Athena::IRCUSvc > m_rcu
Property: RCU Service.
Definition: DelayedConditionsCleanerSvc.cxx:76
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
CxxUtils::Ring::reset
void reset(size_t size)
Clear the buffer and set its size.
Athena::DelayedConditionsCleanerSvc::m_slotTimestamp
std::vector< key_type > m_slotTimestamp
Definition: DelayedConditionsCleanerSvc.h:210
IRCUSvc.h
read-copy-update (RCU) style synchronization for Athena.
Athena::DelayedConditionsCleanerSvc::DelayedConditionsCleanerTask
friend class DelayedConditionsCleanerTask
Definition: DelayedConditionsCleanerSvc.h:125
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
CondContBase::trim
virtual size_t trim(const std::vector< key_type > &runLbnKeys, const std::vector< key_type > &TSKeys)
Remove unused entries from the front of the list.
Definition: CondCont.cxx:320
LArG4FSStartPointFilterLegacy.execute
execute
Definition: LArG4FSStartPointFilterLegacy.py:20
AthProperties.h
pimpl-style holder for component properties.
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
StrFormat.h
Provide helper functions to create formatted strings.
Athena::DelayedConditionsCleanerSvc::m_ccinfo
CCInfoMap_t m_ccinfo
Definition: DelayedConditionsCleanerSvc.h:215
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
beamspotman.n
n
Definition: beamspotman.py:731
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
CondContBase::KeyType::TIMESTAMP
@ TIMESTAMP
Container uses timestamp keys.
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
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
python.CondDB.cleaner
cleaner
Definition: CondDB.py:50
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
DeMoUpdate.tmp
string tmp
Definition: DeMoUpdate.py:1167
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
CxxUtils::strformat
std::string strformat(const char *fmt,...)
return a std::string according to a format fmt and varargs
Definition: StrFormat.cxx:49
AthProperties
pimpl-style holder for component properties.
Definition: AthProperties.h:60
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
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
CondContBase::KeyType::MIXED
@ MIXED
Mixed Run+lbn / timestamp container.
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
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
Athena::DelayedConditionsCleanerSvc::m_workRemoved
size_t m_workRemoved
Definition: DelayedConditionsCleanerSvc.h:248
DelayedConditionsCleanerSvc.h
Clean conditions containers after a delay.
Athena::DelayedConditionsCleanerSvc::finalize
virtual StatusCode finalize() override
Standard Gaudi finalize method.
Definition: DelayedConditionsCleanerSvc.cxx:498
a
TList * a
Definition: liststreamerinfos.cxx:10
lumiFormat.fill
fill
Definition: lumiFormat.py:111
Athena::DelayedConditionsCleanerSvcProps
Definition: DelayedConditionsCleanerSvc.cxx:43
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::DelayedConditionsCleanerSvcProps::m_lookAhead
Gaudi::Property< size_t > m_lookAhead
Property: Maximum number of events to consolodate together when cleaning.
Definition: DelayedConditionsCleanerSvc.cxx:61
Athena::DelayedConditionsCleanerSvc::key_type
CondContBase::key_type key_type
Packed key type.
Definition: DelayedConditionsCleanerSvc.h:62
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
CxxUtils::Ring::push
void push(const T &x)
Add a new item to the buffer.
AthProperties< DelayedConditionsCleanerSvc >::parent
DelayedConditionsCleanerSvc * parent()
Definition: AthProperties.h:64
Athena::DelayedConditionsCleanerSvcProps::m_cleanDelay
Gaudi::Property< size_t > m_cleanDelay
Property: Number of events after adding a conditions object we try to clean its container.
Definition: DelayedConditionsCleanerSvc.cxx:56
Athena::DelayedConditionsCleanerSvc::reset
virtual StatusCode reset() override
Clear the internal state of the service.
Definition: DelayedConditionsCleanerSvc.cxx:322
CondContBase::KeyType::SINGLE
@ SINGLE
Either TIMESTAMP or RUNLBN, but nothing's been put in the container yet, so we don't know which one.
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
ServiceHandle< Athena::IRCUSvc >