The Gaudi Framework  master (ff829712)
Loading...
Searching...
No Matches
EvtStoreSvc Class Reference

Use a minimal event store implementation, and adds everything required to satisfy the IDataProviderSvc, IDataManagerSvc and IHiveWhiteBoard interfaces by throwing exceptions except when the functionality is really needed... More...

Inheritance diagram for EvtStoreSvc:
Collaboration diagram for EvtStoreSvc:

Public Member Functions

CLID rootCLID () const override
 
const std::string & rootName () const override
 
StatusCode setDataLoader (IConversionSvc *svc, IDataProviderSvc *dpsvc) override
 
size_t allocateStore (int evtnumber) override
 Allocate a store partition for a given event number.
 
StatusCode freeStore (size_t partition) override
 Free a store partition.
 
size_t freeSlots () override
 
StatusCode selectStore (size_t partition) override
 Activate a partition object. The identifies the partition uniquely.
 
StatusCode clearStore () override
 
StatusCode clearStore (size_t partition) override
 Remove all data objects in one 'slot' of the data store.
 
StatusCode setNumberOfStores (size_t slots) override
 Set the number of event slots (copies of DataSvc objects).
 
size_t getNumberOfStores () const override
 
size_t getPartitionNumber (int eventnumber) const override
 Get the partition number corresponding to a given event.
 
bool exists (const DataObjID &id) override
 
StatusCode objectParent (const DataObject *, IRegistry *&) override
 
StatusCode objectParent (const IRegistry *, IRegistry *&) override
 
StatusCode objectLeaves (const DataObject *, std::vector< IRegistry * > &) override
 
StatusCode objectLeaves (const IRegistry *, std::vector< IRegistry * > &) override
 
StatusCode clearSubTree (std::string_view) override
 
StatusCode clearSubTree (DataObject *obj) override
 
StatusCode traverseSubTree (std::string_view, IDataStoreAgent *) override
 
StatusCode traverseSubTree (DataObject *obj, IDataStoreAgent *pAgent) override
 
StatusCode traverseTree (IDataStoreAgent *pAgent) override
 
StatusCode setRoot (std::string root_name, DataObject *pObject) override
 
StatusCode setRoot (std::string root_path, IOpaqueAddress *pRootAddr) override
 
StatusCode unregisterAddress (std::string_view) override
 
StatusCode unregisterAddress (IRegistry *, std::string_view) override
 
StatusCode registerAddress (std::string_view fullPath, IOpaqueAddress *pAddress) override
 
StatusCode registerAddress (IRegistry *parentObj, std::string_view objectPath, IOpaqueAddress *pAddress) override
 
StatusCode registerObject (std::string_view parentPath, std::string_view objectPath, DataObject *pObject) override
 
StatusCode registerObject (DataObject *parentObj, std::string_view objectPath, DataObject *pObject) override
 
StatusCode unregisterObject (std::string_view) override
 
StatusCode unregisterObject (DataObject *obj) override
 
StatusCode unregisterObject (DataObject *obj, std::string_view sr) override
 
StatusCode retrieveObject (IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
 
StatusCode findObject (IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
 
StatusCode findObject (std::string_view fullPath, DataObject *&pObject) override
 
StatusCode updateObject (IRegistry *) override
 
StatusCode updateObject (DataObject *) override
 
StatusCode addPreLoadItem (const DataStoreItem &) override
 
StatusCode removePreLoadItem (const DataStoreItem &) override
 
StatusCode resetPreLoad () override
 
StatusCode preLoad () override
 
StatusCode linkObject (IRegistry *, std::string_view, DataObject *) override
 
StatusCode linkObject (std::string_view, DataObject *) override
 
StatusCode unlinkObject (IRegistry *, std::string_view) override
 
StatusCode unlinkObject (DataObject *, std::string_view) override
 
StatusCode unlinkObject (std::string_view) override
 
StatusCode initialize () override
 
StatusCode finalize () override
 
- Public Member Functions inherited from extends< Service, IDataProviderSvc, IDataManagerSvc, IHiveWhiteBoard >
void const * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast.
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface.
 
std::vector< std::string > getInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames.
 
- Public Member Functions inherited from Service
const std::string & name () const override
 Retrieve name of the service.
 
StatusCode configure () override
 
StatusCode initialize () override
 
StatusCode start () override
 
StatusCode stop () override
 
StatusCode finalize () override
 
StatusCode terminate () override
 
Gaudi::StateMachine::State FSMState () const override
 
Gaudi::StateMachine::State targetFSMState () const override
 
StatusCode reinitialize () override
 
StatusCode restart () override
 
StatusCode sysInitialize () override
 Initialize Service.
 
StatusCode sysStart () override
 Initialize Service.
 
StatusCode sysStop () override
 Initialize Service.
 
StatusCode sysFinalize () override
 Finalize Service.
 
StatusCode sysReinitialize () override
 Re-initialize the Service.
 
StatusCode sysRestart () override
 Re-initialize the Service.
 
 Service (std::string name, ISvcLocator *svcloc)
 Standard Constructor.
 
SmartIF< ISvcLocator > & serviceLocator () const override
 Retrieve pointer to service locator.
 
template<typename IFace = IService>
SmartIF< IFace > service (const std::string &name, bool createIf=true) const
 
template<class T>
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, ToolHandle< T > &hndl, const std::string &doc="none")
 
template<class T>
StatusCode declareTool (ToolHandle< T > &handle, bool createIf=true)
 
template<class T>
StatusCode declareTool (ToolHandle< T > &handle, const std::string &toolTypeAndName, bool createIf=true)
 Declare used tool.
 
template<class T>
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, ToolHandleArray< T > &hndlArr, const std::string &doc="none")
 
template<class T>
void addToolsArray (ToolHandleArray< T > &hndlArr)
 
const std::vector< IAlgTool * > & tools () const
 
SmartIF< IAuditorSvc > & auditorSvc () const
 The standard auditor service.May not be invoked before sysInitialize() has been invoked.
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
StatusCode setProperty (const Gaudi::Details::PropertyBase &p)
 Set the property from a property.
 
StatusCode setProperty (const std::string &name, const char *v)
 Special case for string literals.
 
StatusCode setProperty (const std::string &name, const std::string &v)
 Special case for std::string.
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value
 
 PropertyHolder ()=default
 
Gaudi::Details::PropertyBasedeclareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property.
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, TYPE &value, const std::string &doc="none")
 Helper to wrap a regular data member and use it as a regular property.
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, Gaudi::Property< TYPE, VERIFIER, HANDLERS > &prop, const std::string &doc="none")
 Declare a PropertyBase instance setting name and documentation.
 
Gaudi::Details::PropertyBasedeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property.
 
StatusCode setProperty (const std::string &name, const Gaudi::Details::PropertyBase &p) override
 set the property from another property with a different name
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string
 
StatusCode setProperty (const Gaudi::Details::PropertyBase &p)
 Set the property from a property.
 
StatusCode setProperty (const std::string &name, const char *v)
 Special case for string literals.
 
StatusCode setProperty (const std::string &name, const std::string &v)
 Special case for std::string.
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value
 
StatusCode setPropertyRepr (const std::string &n, const std::string &r) override
 set the property from name and value string representation
 
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property
 
const Gaudi::Details::PropertyBasegetProperty (std::string_view name) const override
 get the property by name
 
StatusCode getProperty (std::string_view n, std::string &v) const override
 convert the property to the string
 
const std::vector< Gaudi::Details::PropertyBase * > & getProperties () const override
 get all properties
 
bool hasProperty (std::string_view name) const override
 Return true if we have a property with the given name.
 
Gaudi::Details::PropertyBaseproperty (std::string_view name) const
 \fixme property and bindPropertiesTo should be protected
 
void bindPropertiesTo (Gaudi::Interfaces::IOptionsSvc &optsSvc)
 
 PropertyHolder (const PropertyHolder &)=delete
 
PropertyHolderoperator= (const PropertyHolder &)=delete
 
- Public Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level msgLevel () const
 get the cached level (originally extracted from the embedded MsgStream)
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream
 
- Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor.
 
const SmartIF< IMessageSvc > & msgSvc () const
 The standard message service.
 
MsgStreammsgStream () const
 Return an uninitialized MsgStream.
 
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts.
 
MsgStreamalways () const
 shortcut for the method msgStream(MSG::ALWAYS)
 
MsgStreamfatal () const
 shortcut for the method msgStream(MSG::FATAL)
 
MsgStreamerr () const
 shortcut for the method msgStream(MSG::ERROR)
 
MsgStreamerror () const
 shortcut for the method msgStream(MSG::ERROR)
 
MsgStreamwarning () const
 shortcut for the method msgStream(MSG::WARNING)
 
MsgStreaminfo () const
 shortcut for the method msgStream(MSG::INFO)
 
MsgStreamdebug () const
 shortcut for the method msgStream(MSG::DEBUG)
 
MsgStreamverbose () const
 shortcut for the method msgStream(MSG::VERBOSE)
 
MsgStreammsg () const
 shortcut for the method msgStream(MSG::INFO)
 

Private Member Functions

std::size_t poolSize () const
 
void fillStats (Partition &p) const
 
void initStore (Partition &p) const
 

Private Attributes

Gaudi::Property< CLIDm_rootCLID { this, "RootCLID", 110 , "CLID of root entry" }
 
Gaudi::Property< std::string > m_rootName { this, "RootName", "/Event", "name of root entry" }
 
Gaudi::Property< bool > m_forceLeaves
 
Gaudi::Property< std::string > m_loader { this, "DataLoader", "EventPersistencySvc" }
 
Gaudi::Property< size_t > m_slots { this, "EventSlots", 1, "number of event slots" }
 
Gaudi::Property< bool > m_printPoolStats { this, "PrintPoolStats", false, "Print memory pool statistics" }
 
Gaudi::Property< std::size_t > m_poolSize { this, "PoolSize", 1024, "Initial per-event memory pool size [KiB]" }
 
Gaudi::Property< std::size_t > m_estStoreBuckets
 
Gaudi::Accumulators::AveragingCounter< std::size_t > m_usedPoolSize
 
Gaudi::Accumulators::AveragingCounter< std::size_t > m_servedPoolAllocations
 
Gaudi::Accumulators::AveragingCounter< std::size_t > m_usedPoolAllocations
 
Gaudi::Accumulators::AveragingCounter< std::size_t > m_storeEntries
 
Gaudi::Accumulators::AveragingCounter< std::size_t > m_storeBuckets
 
SmartIF< IConversionSvcm_dataLoader
 
std::vector< DataStoreItemm_preLoads
 Items to be pre-loaded.
 
std::vector< Synced< Partition > > m_partitions
 The actual store(s)
 
tbb::concurrent_queue< size_t > m_freeSlots
 
Gaudi::Property< std::vector< std::string > > m_inhibitPrefixes
 
Gaudi::Property< bool > m_followLinksToAncestors
 
std::string_view m_onlyThisID
 

Additional Inherited Members

- Public Types inherited from extends< Service, IDataProviderSvc, IDataManagerSvc, IHiveWhiteBoard >
using base_class
 Typedef to this class.
 
using extend_interfaces_base
 Typedef to the base of this class.
 
- Public Types inherited from Service
using Factory = Gaudi::PluginService::Factory<IService*( const std::string&, ISvcLocator* )>
 
- Public Types inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
using PropertyHolderImpl
 Typedef used to refer to this class from derived classes, as in.
 
- Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
using base_class
 
- Public Types inherited from extend_interfaces< Interfaces... >
using ext_iids
 take union of the ext_iids of all Interfaces...
 
- Protected Member Functions inherited from Service
std::vector< IAlgTool * > & tools ()
 
 ~Service () override
 
int outputLevel () const
 get the Service's output level
 
- Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level setUpMessaging () const
 Set up local caches.
 
MSG::Level resetMessaging ()
 Reinitialize internal states.
 
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream.
 
- Protected Attributes inherited from Service
Gaudi::StateMachine::State m_state = Gaudi::StateMachine::OFFLINE
 Service state.
 
Gaudi::StateMachine::State m_targetState = Gaudi::StateMachine::OFFLINE
 Service state.
 
Gaudi::Property< int > m_outputLevel { this, "OutputLevel", MSG::NIL, "output level" }
 flag indicating whether ToolHandle tools have been added to m_tools
 
Gaudi::Property< bool > m_auditorInitialize { this, "AuditInitialize", false, "trigger auditor on initialize()" }
 
Gaudi::Property< bool > m_auditorStart { this, "AuditStart", false, "trigger auditor on start()" }
 
Gaudi::Property< bool > m_auditorStop { this, "AuditStop", false, "trigger auditor on stop()" }
 
Gaudi::Property< bool > m_auditorFinalize { this, "AuditFinalize", false, "trigger auditor on finalize()" }
 
Gaudi::Property< bool > m_auditorReinitialize { this, "AuditReinitialize", false, "trigger auditor on reinitialize()" }
 
Gaudi::Property< bool > m_auditorRestart { this, "AuditRestart", false, "trigger auditor on restart()" }
 
Gaudi::Property< bool > m_autoRetrieveTools
 
Gaudi::Property< bool > m_checkToolDeps
 
SmartIF< IAuditorSvcm_pAuditorSvc
 Auditor Service.
 

Detailed Description

Use a minimal event store implementation, and adds everything required to satisfy the IDataProviderSvc, IDataManagerSvc and IHiveWhiteBoard interfaces by throwing exceptions except when the functionality is really needed...

Author
Gerhard Raven
Version
1.0

Definition at line 235 of file EvtStoreSvc.cpp.

Member Function Documentation

◆ addPreLoadItem()

StatusCode EvtStoreSvc::addPreLoadItem ( const DataStoreItem & item)
override

Definition at line 653 of file EvtStoreSvc.cpp.

653 {
654 auto i = std::find( m_preLoads.begin(), m_preLoads.begin(), item );
655 if ( i == m_preLoads.end() ) m_preLoads.push_back( item );
656 return StatusCode::SUCCESS;
657}
std::vector< DataStoreItem > m_preLoads
Items to be pre-loaded.
constexpr static const auto SUCCESS
Definition StatusCode.h:99

◆ allocateStore()

size_t EvtStoreSvc::allocateStore ( int evtnumber)
override

Allocate a store partition for a given event number.

Definition at line 419 of file EvtStoreSvc.cpp.

419 {
420 // take next free slot in the list
421 size_t slot = std::string::npos;
422 if ( m_freeSlots.try_pop( slot ) ) {
423 assert( slot != std::string::npos );
424 assert( slot < m_partitions.size() );
425 [[maybe_unused]] auto prev = m_partitions[slot].with_lock(
426 [evtnumber]( Partition& p ) { return std::exchange( p.eventNumber, evtnumber ); } );
427 assert( prev == -1 ); // or whatever value represents 'free'
428 }
429 return slot;
430}
std::vector< Synced< Partition > > m_partitions
The actual store(s)
tbb::concurrent_queue< size_t > m_freeSlots

◆ clearStore() [1/2]

StatusCode EvtStoreSvc::clearStore ( )
override

Definition at line 480 of file EvtStoreSvc.cpp.

480 {
481 m_onlyThisID = {};
482 return fwd( [this]( Partition& p ) {
483 fillStats( p );
484 initStore( p ); // replace with a clean store
485 return StatusCode::SUCCESS;
486 } );
487}
void fillStats(Partition &p) const
void initStore(Partition &p) const
std::string_view m_onlyThisID

◆ clearStore() [2/2]

StatusCode EvtStoreSvc::clearStore ( size_t partition)
override

Remove all data objects in one 'slot' of the data store.

Definition at line 465 of file EvtStoreSvc.cpp.

465 {
466 m_onlyThisID = {};
467 return m_partitions[partition].with_lock( [this]( Partition& p ) {
468 fillStats( p );
469 initStore( p ); // replace with a clean store
470 return StatusCode::SUCCESS;
471 } );
472}

◆ clearSubTree() [1/2]

StatusCode EvtStoreSvc::clearSubTree ( DataObject * obj)
inlineoverride

Definition at line 320 of file EvtStoreSvc.cpp.

320 {
321 return obj && obj->registry() ? clearSubTree( obj->registry()->identifier() ) : StatusCode::FAILURE;
322 }
IRegistry * registry() const
Get pointer to Registry.
Definition DataObject.h:79
StatusCode clearSubTree(std::string_view) override
virtual const id_type & identifier() const =0
Full identifier (or key)

◆ clearSubTree() [2/2]

StatusCode EvtStoreSvc::clearSubTree ( std::string_view top)
override

Definition at line 473 of file EvtStoreSvc.cpp.

473 {
474 top = normalize_path( top, rootName() );
475 return fwd( [&]( Partition& p ) {
476 p.store->erase_if( [top]( const auto& value ) { return value.first.starts_with( top ); } );
477 return StatusCode::SUCCESS;
478 } );
479}
const std::string & rootName() const override

◆ exists()

bool EvtStoreSvc::exists ( const DataObjID & id)
inlineoverride

Definition at line 309 of file EvtStoreSvc.cpp.

309 {
310 DataObject* pObject{ nullptr };
311 return findObject( id.fullKey(), pObject ).isSuccess();
312 }
StatusCode findObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
bool isSuccess() const
Definition StatusCode.h:314

◆ fillStats()

void EvtStoreSvc::fillStats ( Partition & p) const
inlineprivate

Definition at line 252 of file EvtStoreSvc.cpp.

252 {
253 if ( !m_printPoolStats ) return;
254 auto n_allocs = p.store->num_allocations();
255 if ( n_allocs ) {
256 m_storeEntries += p.store->size();
257 m_usedPoolSize += p.store->used_bytes();
258 m_storeBuckets += p.store->used_buckets();
259 m_usedPoolAllocations += p.store->used_blocks();
260 m_servedPoolAllocations += n_allocs;
261 }
262 }
Gaudi::Accumulators::AveragingCounter< std::size_t > m_usedPoolAllocations
Gaudi::Accumulators::AveragingCounter< std::size_t > m_storeBuckets
Gaudi::Accumulators::AveragingCounter< std::size_t > m_servedPoolAllocations
Gaudi::Property< bool > m_printPoolStats
Gaudi::Accumulators::AveragingCounter< std::size_t > m_usedPoolSize
Gaudi::Accumulators::AveragingCounter< std::size_t > m_storeEntries

◆ finalize()

StatusCode EvtStoreSvc::finalize ( )
inlineoverride

Definition at line 395 of file EvtStoreSvc.cpp.

395 {
396 if ( m_printPoolStats ) {
397 info() << "Mean memory pool usage: " << float( 1e-3f * float( m_usedPoolSize.mean() ) ) << " KiB serving "
398 << float( m_servedPoolAllocations.mean() ) << " allocations from " << float( m_usedPoolAllocations.mean() )
399 << " to produce " << float( m_storeEntries.mean() ) << " entries in " << float( m_storeBuckets.mean() )
400 << " buckets" << endmsg;
401 }
402 setDataLoader( nullptr, nullptr ).ignore(); // release
403 return extends::finalize();
404 }
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition MsgStream.h:198
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
StatusCode setDataLoader(IConversionSvc *svc, IDataProviderSvc *dpsvc) override
const StatusCode & ignore() const
Allow discarding a StatusCode without warning.
Definition StatusCode.h:139

◆ findObject() [1/2]

StatusCode EvtStoreSvc::findObject ( IRegistry * pDirectory,
std::string_view path,
DataObject *& pObject )
override

Definition at line 644 of file EvtStoreSvc.cpp.

644 {
645 return retrieveObject( pDirectory, path, pObject );
646}
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override

◆ findObject() [2/2]

StatusCode EvtStoreSvc::findObject ( std::string_view fullPath,
DataObject *& pObject )
override

Definition at line 647 of file EvtStoreSvc.cpp.

647 {
648 return retrieveObject( nullptr, fullPath, pObject );
649}

◆ freeSlots()

size_t EvtStoreSvc::freeSlots ( )
inlineoverride

Definition at line 302 of file EvtStoreSvc.cpp.

302{ return m_freeSlots.unsafe_size(); }

◆ freeStore()

StatusCode EvtStoreSvc::freeStore ( size_t partition)
override

Free a store partition.

Definition at line 457 of file EvtStoreSvc.cpp.

457 {
458 assert( partition < m_partitions.size() );
459 auto prev = m_partitions[partition].with_lock( []( Partition& p ) { return std::exchange( p.eventNumber, -1 ); } );
460 if ( prev == -1 ) return StatusCode::FAILURE; // double free -- should never happen!
461 m_freeSlots.push( partition );
462 return StatusCode::SUCCESS;
463}
constexpr static const auto FAILURE
Definition StatusCode.h:100

◆ getNumberOfStores()

size_t EvtStoreSvc::getNumberOfStores ( ) const
inlineoverride

Definition at line 307 of file EvtStoreSvc.cpp.

307{ return m_slots; }
Gaudi::Property< size_t > m_slots

◆ getPartitionNumber()

size_t EvtStoreSvc::getPartitionNumber ( int eventnumber) const
override

Get the partition number corresponding to a given event.

Definition at line 446 of file EvtStoreSvc.cpp.

446 {
447 auto i = std::find_if( begin( m_partitions ), end( m_partitions ),
448 with_lock( [eventnumber]( const Partition& p ) { return p.eventNumber == eventnumber; } ) );
449 return i != end( m_partitions ) ? std::distance( begin( m_partitions ), i ) : std::string::npos;
450}
AttribStringParser::Iterator begin(const AttribStringParser &parser)
auto with_lock(Fun &&f)

◆ initialize()

StatusCode EvtStoreSvc::initialize ( )
inlineoverride

Definition at line 373 of file EvtStoreSvc.cpp.

373 {
374 Entry::setDataProviderSvc( this );
375 extends::initialize().ignore();
376 if ( !setNumberOfStores( m_slots ).isSuccess() ) {
377 error() << "Cannot set number of slots" << endmsg;
378 return StatusCode::FAILURE;
379 }
380 m_partitions = std::vector<Synced<Partition>>( m_slots );
381 // m_partitions is now full of empty std::optionals, fill them now.
382 for ( auto& synced_p : m_partitions ) {
383 synced_p.with_lock( [this]( Partition& p ) { initStore( p ); } );
384 }
385 for ( size_t i = 0; i < m_slots; i++ ) { m_freeSlots.push( i ); }
386 selectStore( 0 ).ignore();
387
388 auto loader = serviceLocator()->service( m_loader ).as<IConversionSvc>().get();
389 if ( !loader ) {
390 error() << "Cannot get IConversionSvc " << m_loader.value() << endmsg;
391 return StatusCode::FAILURE;
392 }
393 return setDataLoader( loader, nullptr );
394 }
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
StatusCode selectStore(size_t partition) override
Activate a partition object. The identifies the partition uniquely.
Gaudi::Property< std::string > m_loader
StatusCode setNumberOfStores(size_t slots) override
Set the number of event slots (copies of DataSvc objects).
virtual SmartIF< IService > & service(const Gaudi::Utils::TypeNameString &typeName, const bool createIf=true)=0
Returns a smart pointer to a service.
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition Service.cpp:336
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
Definition SmartIF.h:110
get
decorate the vector of properties
Definition decorators.py:94

◆ initStore()

void EvtStoreSvc::initStore ( Partition & p) const
inlineprivate

Definition at line 264 of file EvtStoreSvc.cpp.

264 {
265 if ( p.store ) {
266 // re-use the existing memory pool
267 p.store->reset();
268 } else {
269 p.store.emplace( m_estStoreBuckets, poolSize() );
270 }
271 }
std::size_t poolSize() const
Gaudi::Property< std::size_t > m_estStoreBuckets

◆ linkObject() [1/2]

StatusCode EvtStoreSvc::linkObject ( IRegistry * ,
std::string_view ,
DataObject *  )
inlineoverride

Definition at line 367 of file EvtStoreSvc.cpp.

367{ return dummy( __FUNCTION__ ); }

◆ linkObject() [2/2]

StatusCode EvtStoreSvc::linkObject ( std::string_view ,
DataObject *  )
inlineoverride

Definition at line 368 of file EvtStoreSvc.cpp.

368{ return dummy( __FUNCTION__ ); }

◆ objectLeaves() [1/2]

StatusCode EvtStoreSvc::objectLeaves ( const DataObject * ,
std::vector< IRegistry * > &  )
inlineoverride

Definition at line 316 of file EvtStoreSvc.cpp.

316{ return dummy( __FUNCTION__ ); }

◆ objectLeaves() [2/2]

StatusCode EvtStoreSvc::objectLeaves ( const IRegistry * ,
std::vector< IRegistry * > &  )
inlineoverride

Definition at line 317 of file EvtStoreSvc.cpp.

317{ return dummy( __FUNCTION__ ); }

◆ objectParent() [1/2]

StatusCode EvtStoreSvc::objectParent ( const DataObject * ,
IRegistry *&  )
inlineoverride

Definition at line 314 of file EvtStoreSvc.cpp.

314{ return dummy( __FUNCTION__ ); }

◆ objectParent() [2/2]

StatusCode EvtStoreSvc::objectParent ( const IRegistry * ,
IRegistry *&  )
inlineoverride

Definition at line 315 of file EvtStoreSvc.cpp.

315{ return dummy( __FUNCTION__ ); }

◆ poolSize()

std::size_t EvtStoreSvc::poolSize ( ) const
inlineprivate

Definition at line 250 of file EvtStoreSvc.cpp.

250{ return m_poolSize * 1024; }
Gaudi::Property< std::size_t > m_poolSize

◆ preLoad()

StatusCode EvtStoreSvc::preLoad ( )
override

Definition at line 663 of file EvtStoreSvc.cpp.

663 {
664 for ( const auto& i : m_preLoads ) {
665 DataObject* pObj;
666 if ( msgLevel( MSG::DEBUG ) ) debug() << "Preloading " << i.path() << endmsg;
667 retrieveObject( nullptr, i.path(), pObj ).ignore();
668 }
669 return StatusCode::SUCCESS;
670}
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
@ DEBUG
Definition IMessageSvc.h:22

◆ registerAddress() [1/2]

StatusCode EvtStoreSvc::registerAddress ( IRegistry * parentObj,
std::string_view objectPath,
IOpaqueAddress * pAddress )
override

Definition at line 552 of file EvtStoreSvc.cpp.

552 {
553 auto addr = std::unique_ptr<IOpaqueAddress>( pAddr );
554 if ( !addr ) return Status::INVALID_OBJ_ADDR; // Precondition: Address must be valid
555 if ( msgLevel( MSG::DEBUG ) ) {
556 debug() << "registerAddress( (IRegistry*)" << (void*)pReg << ", " << path << ", (IOpaqueAddress*)" << addr.get()
557 << "[ " << addr->par()[0] << ", " << addr->par()[1] << " ]"
558 << " )" << endmsg;
559 }
560 if ( path.empty() || path[0] != '/' ) return StatusCode::FAILURE;
561 if ( !m_onlyThisID.empty() && addr->par()[0] != m_onlyThisID ) {
562 if ( msgLevel( MSG::DEBUG ) )
563 debug() << "Attempt to load " << addr->par()[1] << " from file " << addr->par()[0] << " blocked -- different file"
564 << endmsg;
565 return StatusCode::SUCCESS;
566 }
567 if ( std::any_of(
569 [addrPath = addr->par()[1]]( std::string_view prefix ) { return addrPath.starts_with( prefix ); } ) ) {
570 if ( msgLevel( MSG::DEBUG ) )
571 debug() << "Attempt to load " << addr->par()[1] << " from file " << addr->par()[0] << " blocked -- path inhibited"
572 << endmsg;
573 return StatusCode::SUCCESS;
574 }
575
576 auto object = createObj( *m_dataLoader, *addr ); // Call data loader
577 if ( !object ) return Status::INVALID_OBJECT;
578 auto fullpath = ( pReg ? pReg->identifier() : m_rootName.value() ) + std::string{ path };
579 // the data loader expects the path _including_ the root
580 LocalArena dummy_arena{ fullpath.size() + 1 };
581 auto dummy = Entry{ fullpath, {}, {}, &dummy_arena };
582 object->setRegistry( &dummy );
583 addr->setRegistry( &dummy );
584 auto status = m_dataLoader->fillObjRefs( addr.get(), object.get() );
585 if ( !status.isSuccess() ) return status;
586 // note: put will overwrite the registry in pObject to point at the
587 // one actually used -- so we do not dangle, pointing at dummy beyond its
588 // lifetime
589 if ( msgLevel( MSG::DEBUG ) ) {
590 auto ptr = object.get();
591 debug() << "registerAddress: " << std::quoted( normalize_path( fullpath, rootName() ) ) << " (DataObject*)"
592 << static_cast<void*>( ptr ) << ( ptr ? " -> " + System::typeinfoName( typeid( *ptr ) ) : std::string{} )
593 << endmsg;
594 }
595 fwd( [&]( Partition& p ) {
596 p.store->put( normalize_path( fullpath, rootName() ), std::move( object ), std::move( addr ) );
597 return StatusCode::SUCCESS;
598 } ).ignore();
599 return status;
600}
Gaudi::Property< std::vector< std::string > > m_inhibitPrefixes
SmartIF< IConversionSvc > m_dataLoader
Gaudi::Property< std::string > m_rootName
GAUDI_API std::string path(const AIDA::IBaseHistogram *aida)
get the path in THS for AIDA histogram
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition System.cpp:260

◆ registerAddress() [2/2]

StatusCode EvtStoreSvc::registerAddress ( std::string_view fullPath,
IOpaqueAddress * pAddress )
override

Definition at line 549 of file EvtStoreSvc.cpp.

549 {
550 return registerAddress( nullptr, path, pAddr );
551}
StatusCode registerAddress(std::string_view fullPath, IOpaqueAddress *pAddress) override

◆ registerObject() [1/2]

StatusCode EvtStoreSvc::registerObject ( DataObject * parentObj,
std::string_view objectPath,
DataObject * pObject )
override

Definition at line 607 of file EvtStoreSvc.cpp.

607 {
608 if ( parentObj ) return StatusCode::FAILURE;
609 return fwd( [&, object = std::unique_ptr<DataObject>( pObject ),
610 path = normalize_path( path, rootName() )]( Partition& p ) mutable {
611 if ( m_forceLeaves ) {
612 auto dir = path;
613 for ( auto i = dir.rfind( '/' ); i != std::string_view::npos; i = dir.rfind( '/' ) ) {
614 dir = dir.substr( 0, i );
615 if ( !p.store->find( dir ) ) {
616 if ( msgLevel( MSG::DEBUG ) ) {
617 debug() << "registerObject: adding directory " << std::quoted( dir ) << endmsg;
618 }
619 p.store->put( dir, std::unique_ptr<DataObject>{} );
620 }
621 }
622 }
623 if ( msgLevel( MSG::DEBUG ) ) {
624 auto ptr = object.get();
625 debug() << "registerObject: " << std::quoted( path ) << " (DataObject*)" << static_cast<void*>( ptr )
626 << ( ptr ? " -> " + System::typeinfoName( typeid( *ptr ) ) : std::string{} ) << endmsg;
627 }
628 p.store->put( path, std::move( object ) );
629 return StatusCode::SUCCESS;
630 } );
631}
Gaudi::Property< bool > m_forceLeaves

◆ registerObject() [2/2]

StatusCode EvtStoreSvc::registerObject ( std::string_view parentPath,
std::string_view objectPath,
DataObject * pObject )
override

Definition at line 601 of file EvtStoreSvc.cpp.

602 {
603 return parentPath.empty()
604 ? registerObject( nullptr, objectPath, pObject )
605 : registerObject( nullptr, std::string{ parentPath }.append( "/" ).append( objectPath ), pObject );
606}
StatusCode registerObject(std::string_view parentPath, std::string_view objectPath, DataObject *pObject) override

◆ removePreLoadItem()

StatusCode EvtStoreSvc::removePreLoadItem ( const DataStoreItem & item)
override

Definition at line 658 of file EvtStoreSvc.cpp.

658 {
659 auto i = std::remove( m_preLoads.begin(), m_preLoads.begin(), item );
660 m_preLoads.erase( i, m_preLoads.end() );
661 return StatusCode::SUCCESS;
662}

◆ resetPreLoad()

StatusCode EvtStoreSvc::resetPreLoad ( )
inlineoverride

Definition at line 361 of file EvtStoreSvc.cpp.

361 {
362 m_preLoads.clear();
363 return StatusCode::SUCCESS;
364 }

◆ retrieveObject()

StatusCode EvtStoreSvc::retrieveObject ( IRegistry * pDirectory,
std::string_view path,
DataObject *& pObject )
override

Definition at line 632 of file EvtStoreSvc.cpp.

632 {
633 if ( pDirectory ) return StatusCode::FAILURE;
634 return fwd( [&]( Partition& p ) {
635 path = normalize_path( path, rootName() );
636 pObject = const_cast<DataObject*>( p.store->get( path ) );
637 if ( msgLevel( MSG::DEBUG ) ) {
638 debug() << "retrieveObject: " << std::quoted( path ) << " (DataObject*)" << (void*)pObject
639 << ( pObject ? " -> " + System::typeinfoName( typeid( *pObject ) ) : std::string{} ) << endmsg;
640 }
641 return pObject ? StatusCode::SUCCESS : StatusCode::FAILURE;
642 } );
643}

◆ rootCLID()

CLID EvtStoreSvc::rootCLID ( ) const
override

Definition at line 411 of file EvtStoreSvc.cpp.

411{ return m_rootCLID; }
Gaudi::Property< CLID > m_rootCLID

◆ rootName()

const std::string & EvtStoreSvc::rootName ( ) const
override

Definition at line 412 of file EvtStoreSvc.cpp.

412{ return m_rootName; }

◆ selectStore()

StatusCode EvtStoreSvc::selectStore ( size_t partition)
override

Activate a partition object. The identifies the partition uniquely.

Definition at line 452 of file EvtStoreSvc.cpp.

452 {
453 s_current = &m_partitions[partition];
454 return StatusCode::SUCCESS;
455}

◆ setDataLoader()

StatusCode EvtStoreSvc::setDataLoader ( IConversionSvc * svc,
IDataProviderSvc * dpsvc )
override

Definition at line 413 of file EvtStoreSvc.cpp.

413 {
414 m_dataLoader = pDataLoader;
415 if ( m_dataLoader ) m_dataLoader->setDataProvider( dpsvc ? dpsvc : this ).ignore();
416 return StatusCode::SUCCESS;
417}

◆ setNumberOfStores()

StatusCode EvtStoreSvc::setNumberOfStores ( size_t slots)
override

Set the number of event slots (copies of DataSvc objects).

Definition at line 432 of file EvtStoreSvc.cpp.

432 {
433 if ( slots < size_t{ 1 } ) {
434 error() << "Invalid number of slots (" << slots << ")" << endmsg;
435 return StatusCode::FAILURE;
436 }
438 error() << "Too late to change the number of slots!" << endmsg;
439 return StatusCode::FAILURE;
440 }
441 m_slots = slots;
443 return StatusCode::SUCCESS;
444}
static GAUDI_API void setNumConcEvents(const std::size_t &nE)
Gaudi::StateMachine::State FSMState() const override
Definition Service.h:55

◆ setRoot() [1/2]

StatusCode EvtStoreSvc::setRoot ( std::string root_name,
DataObject * pObject )
override

Definition at line 509 of file EvtStoreSvc.cpp.

509 {
510 if ( msgLevel( MSG::DEBUG ) ) {
511 debug() << "setRoot( " << root_path << ", (DataObject*)" << (void*)pObject << " )" << endmsg;
512 }
513 if ( !fwd( []( Partition& p ) {
514 return p.store->empty() ? StatusCode::SUCCESS : StatusCode::FAILURE;
515 } ).isSuccess() ) {
516 throw GaudiException{ "setRoot called with non-empty store", "EvtStoreSvc", StatusCode::FAILURE };
517 }
518 return registerObject( nullptr, root_path, pObject );
519}

◆ setRoot() [2/2]

StatusCode EvtStoreSvc::setRoot ( std::string root_path,
IOpaqueAddress * pRootAddr )
override

Definition at line 520 of file EvtStoreSvc.cpp.

520 {
521 auto rootAddr = std::unique_ptr<IOpaqueAddress>( pRootAddr );
522 if ( msgLevel( MSG::DEBUG ) ) {
523 debug() << "setRoot( " << root_path << ", (IOpaqueAddress*)" << rootAddr.get();
524 if ( rootAddr ) debug() << "[ " << rootAddr->par()[0] << ", " << rootAddr->par()[1] << " ]";
525 debug() << " )" << endmsg;
526 }
527 if ( !fwd( []( Partition& p ) {
528 return p.store->empty() ? StatusCode::SUCCESS : StatusCode::FAILURE;
529 } ).isSuccess() ) {
530 throw GaudiException{ "setRoot called with non-empty store", "EvtStoreSvc", StatusCode::FAILURE };
531 }
532 if ( !rootAddr ) return Status::INVALID_OBJ_ADDR; // Precondition: Address must be valid
533 if ( !m_followLinksToAncestors ) m_onlyThisID = rootAddr->par()[0];
534 auto object = createObj( *m_dataLoader, *rootAddr ); // Call data loader
535 if ( !object ) return Status::INVALID_OBJECT;
536 if ( msgLevel( MSG::DEBUG ) ) { debug() << "Root Object " << root_path << " created " << endmsg; }
537 LocalArena dummy_arena{ root_path.size() + 1 };
538 auto dummy = Entry{ root_path, {}, {}, &dummy_arena };
539 object->setRegistry( &dummy );
540 rootAddr->setRegistry( &dummy );
541 auto status = m_dataLoader->fillObjRefs( rootAddr.get(), object.get() );
542 if ( status.isSuccess() ) {
543 auto pObject = object.get();
544 status = registerObject( nullptr, root_path, object.release() );
545 if ( status.isSuccess() ) pObject->registry()->setAddress( rootAddr.release() );
546 }
547 return status;
548}
Gaudi::Property< bool > m_followLinksToAncestors
str release
Definition conf.py:27

◆ traverseSubTree() [1/2]

StatusCode EvtStoreSvc::traverseSubTree ( DataObject * obj,
IDataStoreAgent * pAgent )
inlineoverride

Definition at line 325 of file EvtStoreSvc.cpp.

325 {
326 return ( obj && obj->registry() ) ? traverseSubTree( obj->registry()->identifier(), pAgent ) : StatusCode::FAILURE;
327 }
StatusCode traverseSubTree(std::string_view, IDataStoreAgent *) override

◆ traverseSubTree() [2/2]

StatusCode EvtStoreSvc::traverseSubTree ( std::string_view top,
IDataStoreAgent * pAgent )
override

Definition at line 488 of file EvtStoreSvc.cpp.

488 {
489 return fwd( [&]( Partition& p ) {
490 top = normalize_path( top, rootName() );
491 unsigned int nbSlashesInRootName = std::count( rootName().begin(), rootName().end(), '/' );
492 auto cmp = []( const Entry* lhs, const Entry* rhs ) { return lhs->identifier() < rhs->identifier(); };
493 std::set<const Entry*, decltype( cmp )> keys{ std::move( cmp ) };
494 for ( const auto& v : *p.store ) {
495 if ( v.second.identifier().starts_with( top ) ) keys.insert( &v.second );
496 }
497 auto k = keys.begin();
498 while ( k != keys.end() ) {
499 const auto& id = ( *k )->identifier();
500 int level = std::count( id.begin(), id.end(), '/' ) + nbSlashesInRootName;
501 bool accept = pAgent->analyse( const_cast<Entry*>( *( k++ ) ), level );
502 if ( !accept ) {
503 k = std::find_if_not( k, keys.end(), [&id]( const auto& e ) { return e->identifier().starts_with( id ); } );
504 }
505 }
506 return StatusCode::SUCCESS;
507 } );
508}
virtual bool analyse(IRegistry *pObject, int level)=0
Analyse the data object.

◆ traverseTree()

StatusCode EvtStoreSvc::traverseTree ( IDataStoreAgent * pAgent)
inlineoverride

Definition at line 328 of file EvtStoreSvc.cpp.

328{ return traverseSubTree( std::string_view{}, pAgent ); }

◆ unlinkObject() [1/3]

StatusCode EvtStoreSvc::unlinkObject ( DataObject * ,
std::string_view  )
inlineoverride

Definition at line 370 of file EvtStoreSvc.cpp.

370{ return dummy( __FUNCTION__ ); }

◆ unlinkObject() [2/3]

StatusCode EvtStoreSvc::unlinkObject ( IRegistry * ,
std::string_view  )
inlineoverride

Definition at line 369 of file EvtStoreSvc.cpp.

369{ return dummy( __FUNCTION__ ); }

◆ unlinkObject() [3/3]

StatusCode EvtStoreSvc::unlinkObject ( std::string_view )
inlineoverride

Definition at line 371 of file EvtStoreSvc.cpp.

371{ return dummy( __FUNCTION__ ); }

◆ unregisterAddress() [1/2]

StatusCode EvtStoreSvc::unregisterAddress ( IRegistry * ,
std::string_view  )
inlineoverride

Definition at line 334 of file EvtStoreSvc.cpp.

334{ return dummy( __FUNCTION__ ); };

◆ unregisterAddress() [2/2]

StatusCode EvtStoreSvc::unregisterAddress ( std::string_view )
inlineoverride

Definition at line 333 of file EvtStoreSvc.cpp.

333{ return dummy( __FUNCTION__ ); };

◆ unregisterObject() [1/3]

StatusCode EvtStoreSvc::unregisterObject ( DataObject * obj)
inlineoverride

Definition at line 342 of file EvtStoreSvc.cpp.

342 {
343 return ( obj && obj->registry() ) ? unregisterObject( obj->registry()->identifier() ) : StatusCode::FAILURE;
344 }
StatusCode unregisterObject(std::string_view) override

◆ unregisterObject() [2/3]

StatusCode EvtStoreSvc::unregisterObject ( DataObject * obj,
std::string_view sr )
inlineoverride

Definition at line 345 of file EvtStoreSvc.cpp.

345 {
346 return !obj ? unregisterObject( sr )
347 : obj->registry() ? unregisterObject( ( obj->registry()->identifier() + '/' ).append( sr ) )
348 : StatusCode::FAILURE;
349 };
constexpr double sr

◆ unregisterObject() [3/3]

StatusCode EvtStoreSvc::unregisterObject ( std::string_view sr)
override

Definition at line 650 of file EvtStoreSvc.cpp.

650 {
651 return fwd( [&]( Partition& p ) { return p.store->erase( sr ) != 0 ? StatusCode::SUCCESS : StatusCode::FAILURE; } );
652}

◆ updateObject() [1/2]

StatusCode EvtStoreSvc::updateObject ( DataObject * )
inlineoverride

Definition at line 357 of file EvtStoreSvc.cpp.

357{ return dummy( __FUNCTION__ ); }

◆ updateObject() [2/2]

StatusCode EvtStoreSvc::updateObject ( IRegistry * )
inlineoverride

Definition at line 356 of file EvtStoreSvc.cpp.

356{ return dummy( __FUNCTION__ ); }

Member Data Documentation

◆ m_dataLoader

SmartIF<IConversionSvc> EvtStoreSvc::m_dataLoader
private

Definition at line 273 of file EvtStoreSvc.cpp.

◆ m_estStoreBuckets

Gaudi::Property<std::size_t> EvtStoreSvc::m_estStoreBuckets
private
Initial value:
{ this, "StoreBuckets", 100,
"Estimated number of buckets in the store" }

Definition at line 244 of file EvtStoreSvc.cpp.

244 { this, "StoreBuckets", 100,
245 "Estimated number of buckets in the store" };

◆ m_followLinksToAncestors

Gaudi::Property<bool> EvtStoreSvc::m_followLinksToAncestors
private
Initial value:
{
this, "FollowLinksToAncestors", true,
"Load objects which reside in files other than the one corresponding to the root of the event store" }

Definition at line 288 of file EvtStoreSvc.cpp.

288 {
289 this, "FollowLinksToAncestors", true,
290 "Load objects which reside in files other than the one corresponding to the root of the event store" };

◆ m_forceLeaves

Gaudi::Property<bool> EvtStoreSvc::m_forceLeaves
private
Initial value:
{ this, "ForceLeaves", false,
"force creation of default leaves on registerObject" }

Definition at line 238 of file EvtStoreSvc.cpp.

238 { this, "ForceLeaves", false,
239 "force creation of default leaves on registerObject" };

◆ m_freeSlots

tbb::concurrent_queue<size_t> EvtStoreSvc::m_freeSlots
private

Definition at line 281 of file EvtStoreSvc.cpp.

◆ m_inhibitPrefixes

Gaudi::Property<std::vector<std::string> > EvtStoreSvc::m_inhibitPrefixes
private
Initial value:
{
this,
"InhibitedPathPrefixes",
{},
"Prefixes of TES locations that will not be loaded by the persistency service " }

Definition at line 283 of file EvtStoreSvc.cpp.

283 {
284 this,
285 "InhibitedPathPrefixes",
286 {},
287 "Prefixes of TES locations that will not be loaded by the persistency service " };

◆ m_loader

Gaudi::Property<std::string> EvtStoreSvc::m_loader { this, "DataLoader", "EventPersistencySvc" }
private

Definition at line 240 of file EvtStoreSvc.cpp.

240{ this, "DataLoader", "EventPersistencySvc" };

◆ m_onlyThisID

std::string_view EvtStoreSvc::m_onlyThisID
private

Definition at line 291 of file EvtStoreSvc.cpp.

◆ m_partitions

std::vector<Synced<Partition> > EvtStoreSvc::m_partitions
private

The actual store(s)

Definition at line 279 of file EvtStoreSvc.cpp.

◆ m_poolSize

Gaudi::Property<std::size_t> EvtStoreSvc::m_poolSize { this, "PoolSize", 1024, "Initial per-event memory pool size [KiB]" }
private

Definition at line 243 of file EvtStoreSvc.cpp.

243{ this, "PoolSize", 1024, "Initial per-event memory pool size [KiB]" };

◆ m_preLoads

std::vector<DataStoreItem> EvtStoreSvc::m_preLoads
private

Items to be pre-loaded.

Definition at line 276 of file EvtStoreSvc.cpp.

◆ m_printPoolStats

Gaudi::Property<bool> EvtStoreSvc::m_printPoolStats { this, "PrintPoolStats", false, "Print memory pool statistics" }
private

Definition at line 242 of file EvtStoreSvc.cpp.

242{ this, "PrintPoolStats", false, "Print memory pool statistics" };

◆ m_rootCLID

Gaudi::Property<CLID> EvtStoreSvc::m_rootCLID { this, "RootCLID", 110 , "CLID of root entry" }
private

Definition at line 236 of file EvtStoreSvc.cpp.

236{ this, "RootCLID", 110 /*CLID_Event*/, "CLID of root entry" };

◆ m_rootName

Gaudi::Property<std::string> EvtStoreSvc::m_rootName { this, "RootName", "/Event", "name of root entry" }
private

Definition at line 237 of file EvtStoreSvc.cpp.

237{ this, "RootName", "/Event", "name of root entry" };

◆ m_servedPoolAllocations

Gaudi::Accumulators::AveragingCounter<std::size_t> EvtStoreSvc::m_servedPoolAllocations
private

Definition at line 246 of file EvtStoreSvc.cpp.

◆ m_slots

Gaudi::Property<size_t> EvtStoreSvc::m_slots { this, "EventSlots", 1, "number of event slots" }
private

Definition at line 241 of file EvtStoreSvc.cpp.

241{ this, "EventSlots", 1, "number of event slots" };

◆ m_storeBuckets

Gaudi::Accumulators::AveragingCounter<std::size_t> EvtStoreSvc::m_storeBuckets
private

Definition at line 247 of file EvtStoreSvc.cpp.

◆ m_storeEntries

Gaudi::Accumulators::AveragingCounter<std::size_t> EvtStoreSvc::m_storeEntries
private

Definition at line 247 of file EvtStoreSvc.cpp.

◆ m_usedPoolAllocations

Gaudi::Accumulators::AveragingCounter<std::size_t> EvtStoreSvc::m_usedPoolAllocations
private

Definition at line 247 of file EvtStoreSvc.cpp.

◆ m_usedPoolSize

Gaudi::Accumulators::AveragingCounter<std::size_t> EvtStoreSvc::m_usedPoolSize
mutableprivate

Definition at line 246 of file EvtStoreSvc.cpp.


The documentation for this class was generated from the following file: