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

Data service base class. More...

Inheritance diagram for HiveWhiteBoard:
Collaboration diagram for HiveWhiteBoard:

Public Member Functions

 ~HiveWhiteBoard () override
 Standard Destructor.
 
size_t freeSlots () override
 Get free slots number.
 
CLID rootCLID () const override
 IDataManagerSvc: Accessor for root event CLID.
 
const std::string & rootName () const override
 Name for root Event.
 
StatusCode registerAddress (std::string_view path, IOpaqueAddress *pAddr) override
 IDataManagerSvc: Register object address with the data store.
 
StatusCode registerAddress (IRegistry *parent, std::string_view path, IOpaqueAddress *pAdd) override
 IDataManagerSvc: Register object address with the data store.
 
StatusCode unregisterAddress (std::string_view path) override
 IDataManagerSvc: Unregister object address from the data store.
 
StatusCode unregisterAddress (IRegistry *pParent, std::string_view path) override
 IDataManagerSvc: Unregister object address from the data store.
 
StatusCode objectLeaves (const DataObject *pObject, std::vector< IRegistry * > &leaves) override
 Explore the object store: retrieve all leaves attached to the object.
 
StatusCode objectLeaves (const IRegistry *pObject, std::vector< IRegistry * > &leaves) override
 Explore the object store: retrieve all leaves attached to the object.
 
StatusCode objectParent (const DataObject *pObject, IRegistry *&refpParent) override
 IDataManagerSvc: Explore the object store: retrieve the object's parent.
 
StatusCode objectParent (const IRegistry *pObject, IRegistry *&refpParent) override
 IDataManagerSvc: Explore the object store: retrieve the object's parent.
 
StatusCode clearSubTree (std::string_view path) override
 Remove all data objects below the sub tree identified.
 
StatusCode clearSubTree (DataObject *pObject) override
 Remove all data objects below the sub tree identified.
 
StatusCode clearStore () override
 IDataManagerSvc: Remove all data objects in the data store.
 
StatusCode traverseSubTree (std::string_view path, IDataStoreAgent *pAgent) override
 Analyze by traversing all data objects below the sub tree.
 
StatusCode traverseSubTree (DataObject *pObject, IDataStoreAgent *pAgent) override
 IDataManagerSvc: Analyze by traversing all data objects below the sub tree.
 
StatusCode traverseTree (IDataStoreAgent *pAgent) override
 IDataManagerSvc: Analyze by traversing all data objects in the data store.
 
StatusCode setRoot (std::string path, DataObject *pObj) override
 Initialize data store for new event by giving new event path and root object.
 
StatusCode setRoot (std::string path, IOpaqueAddress *pAddr) override
 Initialize data store for new event by giving new event path and address of root object.
 
StatusCode setDataLoader (IConversionSvc *pDataLoader, IDataProviderSvc *=nullptr) override
 IDataManagerSvc: Pass a default data loader to the service.
 
StatusCode addPreLoadItem (const DataStoreItem &item) override
 Add an item to the preload list.
 
StatusCode removePreLoadItem (const DataStoreItem &item) override
 Remove an item from the preload list.
 
StatusCode resetPreLoad () override
 Clear the preload list.
 
StatusCode preLoad () override
 load all preload items of the list
 
StatusCode registerObject (std::string_view parent, std::string_view obj, DataObject *pObj) override
 Register object with the data store.
 
StatusCode registerObject (DataObject *parent, std::string_view obj, DataObject *pObj) override
 Register object with the data store.
 
StatusCode unregisterObject (std::string_view path) override
 Unregister object from the data store.
 
StatusCode unregisterObject (DataObject *pObj) override
 Unregister object from the data store.
 
StatusCode unregisterObject (DataObject *pObj, std::string_view path) override
 Unregister object from the data store.
 
StatusCode retrieveObject (IRegistry *parent, std::string_view path, DataObject *&pObj) override
 Retrieve object from data store.
 
StatusCode findObject (std::string_view path, DataObject *&pObj) override
 Find object identified by its full path in the data store.
 
StatusCode findObject (IRegistry *parent, std::string_view path, DataObject *&pObj) override
 Find object identified by its full path in the data store.
 
StatusCode linkObject (IRegistry *from, std::string_view objPath, DataObject *to) override
 Add a link to another object.
 
StatusCode linkObject (std::string_view fullPath, DataObject *to) override
 Add a link to another object.
 
StatusCode unlinkObject (IRegistry *from, std::string_view objPath) override
 Remove a link to another object.
 
StatusCode unlinkObject (DataObject *from, std::string_view objPath) override
 Remove a link to another object.
 
StatusCode unlinkObject (std::string_view path) override
 Remove a link to another object.
 
StatusCode updateObject (IRegistry *pDirectory) override
 Update object identified by its directory entry.
 
StatusCode updateObject (DataObject *pObj) override
 Update object.
 
StatusCode clearStore (size_t partition) override
 Remove all data objects in one 'slot' of the data store.
 
StatusCode selectStore (size_t partition) override
 Activate a partition object. The identifies the partition uniquely.
 
StatusCode setNumberOfStores (size_t slots) override
 Set the number of event slots (copies of DataSvc objects).
 
size_t getNumberOfStores () const override
 Get the number of event slots (copies of DataSvc objects).
 
bool exists (const DataObjID &id) override
 check if a data object exists in the current store
 
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 getPartitionNumber (int eventnumber) const override
 Get the partition number corresponding to a given event.
 
StatusCode attachServices ()
 
StatusCode detachServices ()
 
StatusCode initialize () override
 Service initialisation.
 
StatusCode reinitialize () override
 Service initialisation.
 
StatusCode finalize () override
 Service initialisation.
 
- 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)
 

Protected 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< std::string > m_loader { this, "DataLoader", "EventPersistencySvc", "" }
 
Gaudi::Property< size_t > m_slots { this, "EventSlots", 1, "number of event slots" }
 
Gaudi::Property< bool > m_forceLeaves
 
Gaudi::Property< bool > m_enableFaultHdlr
 
Gaudi::Property< std::vector< std::string > > m_inhibitPathes { this, "InhibitPaths", {}, "inhibited leaves" }
 
SmartIF< IConversionSvcm_dataLoader
 Pointer to data loader service.
 
SmartIF< IAddressCreatorm_addrCreator
 Reference to address creator.
 
std::vector< Synced< Partition > > m_partitions
 Datastore partitions.
 
tbb::concurrent_queue< size_t > m_freeSlots
 fifo queue of free slots
 
- 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.
 

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.
 

Detailed Description

Data service base class.

A data service manages the transient data stores and implements the IDataProviderSvc, the IDataManagerSvc and the IPartitionControl interfaces.

Author
Markus Frank
Sebastien Ponce
Pere Mato
Version
1.0

Definition at line 128 of file HiveWhiteBoard.cpp.

Constructor & Destructor Documentation

◆ ~HiveWhiteBoard()

HiveWhiteBoard::~HiveWhiteBoard ( )
inlineoverride

Standard Destructor.

Definition at line 154 of file HiveWhiteBoard.cpp.

154 {
155 setDataLoader( 0 ).ignore();
157 clearStore().ignore();
158 for_( m_partitions, []( Partition& p ) {
159 p.dataManager->release();
160 p.dataProvider->release();
161 } );
162 m_partitions.clear();
163 }
std::vector< Synced< Partition > > m_partitions
Datastore partitions.
StatusCode setDataLoader(IConversionSvc *pDataLoader, IDataProviderSvc *=nullptr) override
IDataManagerSvc: Pass a default data loader to the service.
StatusCode resetPreLoad() override
Clear the preload list.
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
const StatusCode & ignore() const
Allow discarding a StatusCode without warning.
Definition StatusCode.h:139
decltype(auto) for_(F &&f)

Member Function Documentation

◆ addPreLoadItem()

StatusCode HiveWhiteBoard::addPreLoadItem ( const DataStoreItem & item)
inlineoverride

Add an item to the preload list.

Definition at line 257 of file HiveWhiteBoard.cpp.

257 {
258 for_( m_partitions, [&]( Partition& p ) {
259 p.dataProvider->addPreLoadItem( item ).ignore( /* AUTOMATICALLY ADDED FOR gaudi/Gaudi!763 */ );
260 } );
261 return StatusCode::SUCCESS;
262 }
constexpr static const auto SUCCESS
Definition StatusCode.h:99

◆ allocateStore()

size_t HiveWhiteBoard::allocateStore ( int evtnumber)
inlineoverride

Allocate a store partition for a given event number.

Definition at line 378 of file HiveWhiteBoard.cpp.

378 {
379 // take next free slot in the list
380 size_t slot = std::string::npos;
381 if ( m_freeSlots.try_pop( slot ) ) {
382 assert( slot != std::string::npos );
383 assert( slot < m_partitions.size() );
384 m_partitions[slot].with_lock( [evtnumber]( Partition& p ) {
385 assert( p.eventNumber == -1 ); // or whatever value represents 'free'
386 p.eventNumber = evtnumber;
387 } );
388 }
389 return slot;
390 }
tbb::concurrent_queue< size_t > m_freeSlots
fifo queue of free slots

◆ attachServices()

StatusCode HiveWhiteBoard::attachServices ( )
inline

Definition at line 408 of file HiveWhiteBoard.cpp.

408 {
409 m_addrCreator = service( m_loader, true );
410 if ( !m_addrCreator ) {
411 error() << "Failed to retrieve data loader "
412 << "\"" << m_loader << "\"" << endmsg;
413 return StatusCode::FAILURE;
414 }
415 SmartIF<IConversionSvc> dataLoader{ service( m_loader, true ) };
416 if ( !dataLoader ) {
417 error() << MSG::ERROR << "Failed to retrieve data loader "
418 << "\"" << m_loader << "\"" << endmsg;
419 return StatusCode::FAILURE;
420 }
421 StatusCode sc = setDataLoader( dataLoader );
422 if ( !sc.isSuccess() ) {
423 error() << MSG::ERROR << "Failed to set data loader "
424 << "\"" << m_loader << "\"" << endmsg;
425 return sc;
426 }
427 return sc;
428 }
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition MsgStream.h:198
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
SmartIF< IAddressCreator > m_addrCreator
Reference to address creator.
Gaudi::Property< std::string > m_loader
SmartIF< IFace > service(const std::string &name, bool createIf=true) const
Definition Service.h:79
bool isSuccess() const
Definition StatusCode.h:314
constexpr static const auto FAILURE
Definition StatusCode.h:100
@ ERROR
Definition IMessageSvc.h:22

◆ clearStore() [1/2]

StatusCode HiveWhiteBoard::clearStore ( )
inlineoverride

IDataManagerSvc: Remove all data objects in the data store.

Definition at line 214 of file HiveWhiteBoard.cpp.

214 {
215 for_( m_partitions, []( Partition& p ) { p.dataManager->clearStore().ignore(); } );
216 return StatusCode::SUCCESS;
217 }

◆ clearStore() [2/2]

StatusCode HiveWhiteBoard::clearStore ( size_t partition)
inlineoverride

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

Definition at line 347 of file HiveWhiteBoard.cpp.

347 {
348 return m_partitions[partition].with_lock( []( Partition& p ) { return p.dataManager->clearStore(); } );
349 }

◆ clearSubTree() [1/2]

StatusCode HiveWhiteBoard::clearSubTree ( DataObject * pObject)
inlineoverride

Remove all data objects below the sub tree identified.

Definition at line 210 of file HiveWhiteBoard.cpp.

210 {
211 return fwd( [&]( IDataManagerSvc& p ) { return p.clearSubTree( pObject ); } );
212 }
virtual StatusCode clearSubTree(std::string_view sub_path)=0
Remove all data objects below the sub tree identified by its full path name.

◆ clearSubTree() [2/2]

StatusCode HiveWhiteBoard::clearSubTree ( std::string_view path)
inlineoverride

Remove all data objects below the sub tree identified.

Definition at line 206 of file HiveWhiteBoard.cpp.

206 {
207 return fwd( [&]( IDataManagerSvc& p ) { return p.clearSubTree( path ); } );
208 }

◆ detachServices()

StatusCode HiveWhiteBoard::detachServices ( )
inline

Definition at line 430 of file HiveWhiteBoard.cpp.

430 {
431 m_addrCreator.reset();
432 m_dataLoader.reset();
433 return StatusCode::SUCCESS;
434 }
SmartIF< IConversionSvc > m_dataLoader
Pointer to data loader service.

◆ exists()

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

check if a data object exists in the current store

Definition at line 372 of file HiveWhiteBoard.cpp.

372 {
373 DataObject* pObject{ nullptr };
374 return findObject( id.fullKey(), pObject ).isSuccess();
375 }
StatusCode findObject(std::string_view path, DataObject *&pObj) override
Find object identified by its full path in the data store.

◆ finalize()

StatusCode HiveWhiteBoard::finalize ( )
inlineoverride

Service initialisation.

Definition at line 501 of file HiveWhiteBoard.cpp.

501 {
502 setDataLoader( 0 ).ignore();
503 clearStore().ignore();
504 return Service::finalize();
505 }
StatusCode finalize() override
Definition Service.cpp:223

◆ findObject() [1/2]

StatusCode HiveWhiteBoard::findObject ( IRegistry * parent,
std::string_view path,
DataObject *& pObj )
inlineoverride

Find object identified by its full path in the data store.

Definition at line 310 of file HiveWhiteBoard.cpp.

310 {
311 return fwd( [&]( IDataProviderSvc& p ) { return p.retrieveObject( parent, path, pObj ); } );
312 }
virtual StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject)=0
Retrieve object identified by its directory entry.

◆ findObject() [2/2]

StatusCode HiveWhiteBoard::findObject ( std::string_view path,
DataObject *& pObj )
inlineoverride

Find object identified by its full path in the data store.

Definition at line 306 of file HiveWhiteBoard.cpp.

306 {
307 return fwd( [&]( IDataProviderSvc& p ) { return p.retrieveObject( path, pObj ); } );
308 }

◆ freeSlots()

size_t HiveWhiteBoard::freeSlots ( )
inlineoverride

Get free slots number.

Definition at line 166 of file HiveWhiteBoard.cpp.

166{ return m_freeSlots.unsafe_size(); }

◆ freeStore()

StatusCode HiveWhiteBoard::freeStore ( size_t partition)
inlineoverride

Free a store partition.

Definition at line 393 of file HiveWhiteBoard.cpp.

393 {
394 assert( partition < m_partitions.size() );
395 auto prev = m_partitions[partition].with_lock( []( Partition& p ) { return std::exchange( p.eventNumber, -1 ); } );
396 if ( prev == -1 ) return StatusCode::FAILURE; // double free -- should never happen!
397 m_freeSlots.push( partition );
398 return StatusCode::SUCCESS;
399 }

◆ getNumberOfStores()

size_t HiveWhiteBoard::getNumberOfStores ( ) const
inlineoverride

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

Definition at line 369 of file HiveWhiteBoard.cpp.

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

◆ getPartitionNumber()

size_t HiveWhiteBoard::getPartitionNumber ( int eventnumber) const
inlineoverride

Get the partition number corresponding to a given event.

Definition at line 402 of file HiveWhiteBoard.cpp.

402 {
403 auto i = std::find_if( begin( m_partitions ), end( m_partitions ),
404 with_lock( [eventnumber]( const Partition& p ) { return p.eventNumber == eventnumber; } ) );
405 return i != end( m_partitions ) ? std::distance( begin( m_partitions ), i ) : std::string::npos;
406 }
AttribStringParser::Iterator begin(const AttribStringParser &parser)
auto with_lock(Fun &&f)

◆ initialize()

StatusCode HiveWhiteBoard::initialize ( )
inlineoverride

Service initialisation.

Definition at line 441 of file HiveWhiteBoard.cpp.

441 {
442 StatusCode sc = Service::initialize();
443 if ( !sc.isSuccess() ) {
444 error() << "Unable to initialize base class" << endmsg;
445 return sc;
446 }
447 if ( m_slots < (size_t)1 ) {
448 error() << "Invalid number of slots (" << m_slots << ")" << endmsg;
449 return StatusCode::FAILURE;
450 }
451
452 if ( !setNumberOfStores( m_slots ).isSuccess() ) {
453 error() << "Cannot set number of slots" << endmsg;
454 return StatusCode::FAILURE;
455 }
456
457 m_partitions = std::vector<Synced<Partition>>( m_slots );
458 for ( size_t i = 0; i < m_slots; i++ ) {
459 DataSvc* svc = new DataSvc( name() + "_" + std::to_string( i ), serviceLocator() );
460 // Percolate properties
461 svc->setProperty( m_rootCLID ).ignore();
462 svc->setProperty( m_rootName ).ignore();
465 // make sure that CommonMessaging is initialized
468
469 sc = svc->initialize();
470 if ( !sc.isSuccess() ) {
471 error() << "Failed to instantiate DataSvc as store partition" << endmsg;
472 return sc;
473 }
474 m_partitions[i].with_lock( [&]( Partition& p ) {
475 p.dataProvider = svc;
476 p.dataManager = svc;
477 } );
478 m_freeSlots.push( i );
479 }
480 selectStore( 0 ).ignore();
481 return attachServices();
482 }
StatusCode initialize() override
Service initialization.
Definition DataSvc.cpp:795
Gaudi::Property< bool > m_forceLeaves
Gaudi::Property< std::string > m_rootName
Gaudi::Property< bool > m_enableFaultHdlr
StatusCode attachServices()
Gaudi::Property< std::vector< std::string > > m_inhibitPathes
Gaudi::Property< CLID > m_rootCLID
StatusCode setNumberOfStores(size_t slots) override
Set the number of event slots (copies of DataSvc objects).
StatusCode selectStore(size_t partition) override
Activate a partition object. The identifies the partition uniquely.
StatusCode setProperty(const Gaudi::Details::PropertyBase &p)
Set the property from a property.
Definition IProperty.h:38
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition Service.cpp:336
Gaudi::Property< int > m_outputLevel
flag indicating whether ToolHandle tools have been added to m_tools
Definition Service.h:184
const std::string & name() const override
Retrieve name of the service.
Definition Service.cpp:333
StatusCode initialize() override
Definition Service.cpp:118

◆ linkObject() [1/2]

StatusCode HiveWhiteBoard::linkObject ( IRegistry * from,
std::string_view objPath,
DataObject * to )
inlineoverride

Add a link to another object.

Definition at line 314 of file HiveWhiteBoard.cpp.

314 {
315 return fwd( [&]( IDataProviderSvc& p ) { return p.linkObject( from, objPath, to ); } );
316 }
virtual StatusCode linkObject(IRegistry *from, std::string_view objPath, DataObject *toObj)=0
Add a link to another object.

◆ linkObject() [2/2]

StatusCode HiveWhiteBoard::linkObject ( std::string_view fullPath,
DataObject * to )
inlineoverride

Add a link to another object.

Definition at line 318 of file HiveWhiteBoard.cpp.

318 {
319 return fwd( [&]( IDataProviderSvc& p ) { return p.linkObject( fullPath, to ); } );
320 }

◆ objectLeaves() [1/2]

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

Explore the object store: retrieve all leaves attached to the object.

Definition at line 190 of file HiveWhiteBoard.cpp.

190 {
191 return fwd( [&]( IDataManagerSvc& p ) { return p.objectLeaves( pObject, leaves ); } );
192 }
virtual StatusCode objectLeaves(const DataObject *pObject, std::vector< IRegistry * > &refLeaves)=0
Explore the object store: retrieve all leaves attached to the object The object is identified by its ...

◆ objectLeaves() [2/2]

StatusCode HiveWhiteBoard::objectLeaves ( const IRegistry * pObject,
std::vector< IRegistry * > & leaves )
inlineoverride

Explore the object store: retrieve all leaves attached to the object.

Definition at line 194 of file HiveWhiteBoard.cpp.

194 {
195 return fwd( [&]( IDataManagerSvc& p ) { return p.objectLeaves( pObject, leaves ); } );
196 }

◆ objectParent() [1/2]

StatusCode HiveWhiteBoard::objectParent ( const DataObject * pObject,
IRegistry *& refpParent )
inlineoverride

IDataManagerSvc: Explore the object store: retrieve the object's parent.

Definition at line 198 of file HiveWhiteBoard.cpp.

198 {
199 return fwd( [&]( IDataManagerSvc& p ) { return p.objectParent( pObject, refpParent ); } );
200 }
virtual StatusCode objectParent(const DataObject *pObject, IRegistry *&refpParent)=0
IDataManagerSvc: Explore the object store: retrieve the object's parent.

◆ objectParent() [2/2]

StatusCode HiveWhiteBoard::objectParent ( const IRegistry * pObject,
IRegistry *& refpParent )
inlineoverride

IDataManagerSvc: Explore the object store: retrieve the object's parent.

Definition at line 202 of file HiveWhiteBoard.cpp.

202 {
203 return fwd( [&]( IDataManagerSvc& p ) { return p.objectParent( pObject, refpParent ); } );
204 }

◆ preLoad()

StatusCode HiveWhiteBoard::preLoad ( )
inlineoverride

load all preload items of the list

Definition at line 278 of file HiveWhiteBoard.cpp.

278 {
279 return fwd( [&]( IDataProviderSvc& p ) { return p.preLoad(); } );
280 }
virtual StatusCode preLoad()=0
Load all preload items of the list.

◆ registerAddress() [1/2]

StatusCode HiveWhiteBoard::registerAddress ( IRegistry * parent,
std::string_view path,
IOpaqueAddress * pAdd )
inlineoverride

IDataManagerSvc: Register object address with the data store.

Definition at line 178 of file HiveWhiteBoard.cpp.

178 {
179 return fwd( [&]( IDataManagerSvc& p ) { return p.registerAddress( parent, path, pAdd ); } );
180 }
virtual StatusCode registerAddress(std::string_view fullPath, IOpaqueAddress *pAddress)=0
Register object address with the data store.

◆ registerAddress() [2/2]

StatusCode HiveWhiteBoard::registerAddress ( std::string_view path,
IOpaqueAddress * pAddr )
inlineoverride

IDataManagerSvc: Register object address with the data store.

Definition at line 174 of file HiveWhiteBoard.cpp.

174 {
175 return fwd( [&]( IDataManagerSvc& p ) { return p.registerAddress( path, pAddr ); } );
176 }

◆ registerObject() [1/2]

StatusCode HiveWhiteBoard::registerObject ( DataObject * parent,
std::string_view obj,
DataObject * pObj )
inlineoverride

Register object with the data store.

Definition at line 286 of file HiveWhiteBoard.cpp.

286 {
287 return fwd( [&]( IDataProviderSvc& p ) { return p.registerObject( parent, obj, pObj ); } );
288 }
StatusCode registerObject(std::string_view fullPath, DataObject *pObject)
Register object with the data store.

◆ registerObject() [2/2]

StatusCode HiveWhiteBoard::registerObject ( std::string_view parent,
std::string_view obj,
DataObject * pObj )
inlineoverride

Register object with the data store.

Definition at line 282 of file HiveWhiteBoard.cpp.

282 {
283 return fwd( [&]( IDataProviderSvc& p ) { return p.registerObject( parent, obj, pObj ); } );
284 }

◆ reinitialize()

StatusCode HiveWhiteBoard::reinitialize ( )
inlineoverride

Service initialisation.

Definition at line 485 of file HiveWhiteBoard.cpp.

485 {
486 StatusCode sc = Service::reinitialize();
487 if ( !sc.isSuccess() ) {
488 error() << "Unable to reinitialize base class" << endmsg;
489 return sc;
490 }
491 detachServices().ignore( /* AUTOMATICALLY ADDED FOR gaudi/Gaudi!763 */ );
492 sc = attachServices();
493 if ( !sc.isSuccess() ) {
494 error() << "Failed to attach necessary services." << endmsg;
495 return sc;
496 }
497 return StatusCode::SUCCESS;
498 }
StatusCode detachServices()
StatusCode reinitialize() override
Definition Service.cpp:296

◆ removePreLoadItem()

StatusCode HiveWhiteBoard::removePreLoadItem ( const DataStoreItem & item)
inlineoverride

Remove an item from the preload list.

Definition at line 264 of file HiveWhiteBoard.cpp.

264 {
265 for_( m_partitions, [&]( Partition& p ) {
266 p.dataProvider->removePreLoadItem( item ).ignore( /* AUTOMATICALLY ADDED FOR gaudi/Gaudi!763 */ );
267 } );
268 return StatusCode::SUCCESS;
269 }

◆ resetPreLoad()

StatusCode HiveWhiteBoard::resetPreLoad ( )
inlineoverride

Clear the preload list.

Definition at line 271 of file HiveWhiteBoard.cpp.

271 {
272 for_( m_partitions, [&]( Partition& p ) {
273 p.dataProvider->resetPreLoad().ignore( /* AUTOMATICALLY ADDED FOR gaudi/Gaudi!763 */ );
274 } );
275 return StatusCode::SUCCESS;
276 }

◆ retrieveObject()

StatusCode HiveWhiteBoard::retrieveObject ( IRegistry * parent,
std::string_view path,
DataObject *& pObj )
inlineoverride

Retrieve object from data store.

Definition at line 302 of file HiveWhiteBoard.cpp.

302 {
303 return fwd( [&]( IDataProviderSvc& p ) { return p.retrieveObject( parent, path, pObj ); } );
304 }

◆ rootCLID()

CLID HiveWhiteBoard::rootCLID ( ) const
inlineoverride

IDataManagerSvc: Accessor for root event CLID.

Definition at line 169 of file HiveWhiteBoard.cpp.

169{ return (CLID)m_rootCLID; }
unsigned int CLID
Class ID definition.
Definition ClassID.h:16

◆ rootName()

const std::string & HiveWhiteBoard::rootName ( ) const
inlineoverride

Name for root Event.

Definition at line 171 of file HiveWhiteBoard.cpp.

171{ return m_rootName; }

◆ selectStore()

StatusCode HiveWhiteBoard::selectStore ( size_t partition)
inlineoverride

Activate a partition object. The identifies the partition uniquely.

Definition at line 352 of file HiveWhiteBoard.cpp.

352 {
353 s_current = &m_partitions[partition];
354 return StatusCode::SUCCESS;
355 }

◆ setDataLoader()

StatusCode HiveWhiteBoard::setDataLoader ( IConversionSvc * pDataLoader,
IDataProviderSvc * = nullptr )
inlineoverride

IDataManagerSvc: Pass a default data loader to the service.

The optional data provider is not considered. On the other hand, the data provider is specified to be the whiteboard.

Definition at line 249 of file HiveWhiteBoard.cpp.

249 {
250 if ( pDataLoader ) pDataLoader->addRef();
251 if ( pDataLoader ) pDataLoader->setDataProvider( this ).ignore( /* AUTOMATICALLY ADDED FOR gaudi/Gaudi!763 */ );
252 m_dataLoader = pDataLoader;
253 for_( m_partitions, [&]( Partition& p ) { p.dataManager->setDataLoader( m_dataLoader, this ).ignore(); } );
254 return StatusCode::SUCCESS;
255 }
virtual StatusCode setDataProvider(IDataProviderSvc *pService)=0
Set Data provider service.
virtual unsigned long addRef() const =0
Increment the reference count of Interface instance.

◆ setNumberOfStores()

StatusCode HiveWhiteBoard::setNumberOfStores ( size_t slots)
inlineoverride

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

Definition at line 358 of file HiveWhiteBoard.cpp.

358 {
360 warning() << "Too late to change the number of slots!" << endmsg;
361 return StatusCode::FAILURE;
362 }
363 m_slots = slots;
365 return StatusCode::SUCCESS;
366 }
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
static GAUDI_API void setNumConcEvents(const std::size_t &nE)
Gaudi::StateMachine::State FSMState() const override
Definition Service.h:55

◆ setRoot() [1/2]

StatusCode HiveWhiteBoard::setRoot ( std::string path,
DataObject * pObj )
inlineoverride

Initialize data store for new event by giving new event path and root object.

Takes care to clear the store before reinitializing it

Definition at line 233 of file HiveWhiteBoard.cpp.

233 {
234 return fwd(
235 [pObj, path = std::move( path )]( IDataManagerSvc& p ) { return p.setRoot( std::move( path ), pObj ); } );
236 }
virtual StatusCode setRoot(std::string root_name, DataObject *pObject)=0
Initialize data store for new event by giving new event path.

◆ setRoot() [2/2]

StatusCode HiveWhiteBoard::setRoot ( std::string path,
IOpaqueAddress * pAddr )
inlineoverride

Initialize data store for new event by giving new event path and address of root object.

Takes care to clear the store before reinitializing it

Definition at line 240 of file HiveWhiteBoard.cpp.

240 {
241 return fwd(
242 [pAddr, path = std::move( path )]( IDataManagerSvc& p ) { return p.setRoot( std::move( path ), pAddr ); } );
243 }

◆ traverseSubTree() [1/2]

StatusCode HiveWhiteBoard::traverseSubTree ( DataObject * pObject,
IDataStoreAgent * pAgent )
inlineoverride

IDataManagerSvc: Analyze by traversing all data objects below the sub tree.

Definition at line 224 of file HiveWhiteBoard.cpp.

224 {
225 return fwd( [&]( IDataManagerSvc& p ) { return p.traverseSubTree( pObject, pAgent ); } );
226 }
virtual StatusCode traverseSubTree(std::string_view sub_tree_path, IDataStoreAgent *pAgent)=0
Analyse by traversing all data objects below the sub tree identified by its full path name.

◆ traverseSubTree() [2/2]

StatusCode HiveWhiteBoard::traverseSubTree ( std::string_view path,
IDataStoreAgent * pAgent )
inlineoverride

Analyze by traversing all data objects below the sub tree.

Definition at line 220 of file HiveWhiteBoard.cpp.

220 {
221 return fwd( [&]( IDataManagerSvc& p ) { return p.traverseSubTree( path, pAgent ); } );
222 }

◆ traverseTree()

StatusCode HiveWhiteBoard::traverseTree ( IDataStoreAgent * pAgent)
inlineoverride

IDataManagerSvc: Analyze by traversing all data objects in the data store.

Definition at line 228 of file HiveWhiteBoard.cpp.

228 {
229 return fwd( [&]( IDataManagerSvc& p ) { return p.traverseTree( pAgent ); } );
230 }
virtual StatusCode traverseTree(IDataStoreAgent *pAgent)=0
Analyse by traversing all data objects in the data store.

◆ unlinkObject() [1/3]

StatusCode HiveWhiteBoard::unlinkObject ( DataObject * from,
std::string_view objPath )
inlineoverride

Remove a link to another object.

Definition at line 326 of file HiveWhiteBoard.cpp.

326 {
327 return fwd( [&]( IDataProviderSvc& p ) { return p.unlinkObject( from, objPath ); } );
328 }
virtual StatusCode unlinkObject(IRegistry *from, std::string_view objPath)=0
Remove a link to another object.

◆ unlinkObject() [2/3]

StatusCode HiveWhiteBoard::unlinkObject ( IRegistry * from,
std::string_view objPath )
inlineoverride

Remove a link to another object.

Definition at line 322 of file HiveWhiteBoard.cpp.

322 {
323 return fwd( [&]( IDataProviderSvc& p ) { return p.unlinkObject( from, objPath ); } );
324 }

◆ unlinkObject() [3/3]

StatusCode HiveWhiteBoard::unlinkObject ( std::string_view path)
inlineoverride

Remove a link to another object.

Definition at line 330 of file HiveWhiteBoard.cpp.

330 {
331 return fwd( [&]( IDataProviderSvc& p ) { return p.unlinkObject( path ); } );
332 }

◆ unregisterAddress() [1/2]

StatusCode HiveWhiteBoard::unregisterAddress ( IRegistry * pParent,
std::string_view path )
inlineoverride

IDataManagerSvc: Unregister object address from the data store.

Definition at line 186 of file HiveWhiteBoard.cpp.

186 {
187 return fwd( [&]( IDataManagerSvc& p ) { return p.unregisterAddress( pParent, path ); } );
188 }
virtual StatusCode unregisterAddress(std::string_view fullPath)=0
Unregister object address from the data store.

◆ unregisterAddress() [2/2]

StatusCode HiveWhiteBoard::unregisterAddress ( std::string_view path)
inlineoverride

IDataManagerSvc: Unregister object address from the data store.

Definition at line 182 of file HiveWhiteBoard.cpp.

182 {
183 return fwd( [&]( IDataManagerSvc& p ) { return p.unregisterAddress( path ); } );
184 }

◆ unregisterObject() [1/3]

StatusCode HiveWhiteBoard::unregisterObject ( DataObject * pObj)
inlineoverride

Unregister object from the data store.

Definition at line 294 of file HiveWhiteBoard.cpp.

294 {
295 return fwd( [&]( IDataProviderSvc& p ) { return p.unregisterObject( pObj ); } );
296 }
virtual StatusCode unregisterObject(std::string_view fullPath)=0
Unregister object from the data store.

◆ unregisterObject() [2/3]

StatusCode HiveWhiteBoard::unregisterObject ( DataObject * pObj,
std::string_view path )
inlineoverride

Unregister object from the data store.

Definition at line 298 of file HiveWhiteBoard.cpp.

298 {
299 return fwd( [&]( IDataProviderSvc& p ) { return p.unregisterObject( pObj, path ); } );
300 }

◆ unregisterObject() [3/3]

StatusCode HiveWhiteBoard::unregisterObject ( std::string_view path)
inlineoverride

Unregister object from the data store.

Definition at line 290 of file HiveWhiteBoard.cpp.

290 {
291 return fwd( [&]( IDataProviderSvc& p ) { return p.unregisterObject( path ); } );
292 }

◆ updateObject() [1/2]

StatusCode HiveWhiteBoard::updateObject ( DataObject * pObj)
inlineoverride

Update object.

Definition at line 338 of file HiveWhiteBoard.cpp.

338 {
339 return fwd( [&]( IDataProviderSvc& p ) { return p.updateObject( pObj ); } );
340 }
virtual StatusCode updateObject(IRegistry *pDirectory)=0
Update object identified by its directory entry.

◆ updateObject() [2/2]

StatusCode HiveWhiteBoard::updateObject ( IRegistry * pDirectory)
inlineoverride

Update object identified by its directory entry.

Definition at line 334 of file HiveWhiteBoard.cpp.

334 {
335 return fwd( [&]( IDataProviderSvc& p ) { return p.updateObject( pDirectory ); } );
336 }

Member Data Documentation

◆ m_addrCreator

SmartIF<IAddressCreator> HiveWhiteBoard::m_addrCreator
protected

Reference to address creator.

Definition at line 143 of file HiveWhiteBoard.cpp.

◆ m_dataLoader

SmartIF<IConversionSvc> HiveWhiteBoard::m_dataLoader
protected

Pointer to data loader service.

Definition at line 141 of file HiveWhiteBoard.cpp.

◆ m_enableFaultHdlr

Gaudi::Property<bool> HiveWhiteBoard::m_enableFaultHdlr
protected
Initial value:
{ this, "EnableFaultHandler", false,
"enable incidents on data creation requests" }

Definition at line 136 of file HiveWhiteBoard.cpp.

136 { this, "EnableFaultHandler", false,
137 "enable incidents on data creation requests" };

◆ m_forceLeaves

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

Definition at line 134 of file HiveWhiteBoard.cpp.

134 { this, "ForceLeaves", false,
135 "force creation of default leaves on registerObject" };

◆ m_freeSlots

tbb::concurrent_queue<size_t> HiveWhiteBoard::m_freeSlots
protected

fifo queue of free slots

Definition at line 147 of file HiveWhiteBoard.cpp.

◆ m_inhibitPathes

Gaudi::Property<std::vector<std::string> > HiveWhiteBoard::m_inhibitPathes { this, "InhibitPaths", {}, "inhibited leaves" }
protected

Definition at line 138 of file HiveWhiteBoard.cpp.

138{ this, "InhibitPaths", {}, "inhibited leaves" };

◆ m_loader

Gaudi::Property<std::string> HiveWhiteBoard::m_loader { this, "DataLoader", "EventPersistencySvc", "" }
protected

Definition at line 132 of file HiveWhiteBoard.cpp.

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

◆ m_partitions

std::vector<Synced<Partition> > HiveWhiteBoard::m_partitions
protected

Datastore partitions.

Definition at line 145 of file HiveWhiteBoard.cpp.

◆ m_rootCLID

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

Definition at line 130 of file HiveWhiteBoard.cpp.

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

◆ m_rootName

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

Definition at line 131 of file HiveWhiteBoard.cpp.

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

◆ m_slots

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

Definition at line 133 of file HiveWhiteBoard.cpp.

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

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