The Gaudi Framework  master (9f3f8895)
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, Gaudi::Concurrency::ConcurrencyManager >
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::PropertyBase * declareProperty (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::PropertyBase * declareProperty (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::PropertyBase & declareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property.
Gaudi::Details::PropertyBase * declareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property.
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 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::PropertyBase * property (std::string_view name) const
 \fixme property and bindPropertiesTo should be protected
void bindPropertiesTo (Gaudi::Interfaces::IOptionsSvc &optsSvc)
PropertyHolder & operator= (const PropertyHolder &)=delete
Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor.
const SmartIF< IMessageSvc > & msgSvc () const
 The standard message service.
MsgStream & msgStream () const
 Return an uninitialized MsgStream.
MsgStream & msgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts.
MsgStream & always () const
 shortcut for the method msgStream(MSG::ALWAYS)
MsgStream & fatal () const
 shortcut for the method msgStream(MSG::FATAL)
MsgStream & err () const
 shortcut for the method msgStream(MSG::ERROR)
MsgStream & error () const
 shortcut for the method msgStream(MSG::ERROR)
MsgStream & warning () const
 shortcut for the method msgStream(MSG::WARNING)
MsgStream & info () const
 shortcut for the method msgStream(MSG::INFO)
MsgStream & debug () const
 shortcut for the method msgStream(MSG::DEBUG)
MsgStream & verbose () const
 shortcut for the method msgStream(MSG::VERBOSE)
MsgStream & msg () const
 shortcut for the method msgStream(MSG::INFO)
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

Protected Attributes

Gaudi::Property< CLID > m_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< IConversionSvc > m_dataLoader
 Pointer to data loader service.
SmartIF< IAddressCreator > m_addrCreator
 Reference to address creator.
std::vector< SynchronizedPartition > 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< IAuditorSvc > m_pAuditorSvc
 Auditor Service.

Additional Inherited Members

Public Types inherited from extends< Service, IDataProviderSvc, IDataManagerSvc, IHiveWhiteBoard, Gaudi::Concurrency::ConcurrencyManager >
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 override final
 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 IHiveWhiteBoard interfaces.

Author
Markus Frank
Sebastien Ponce
Pere Mato
Version
1.0

Definition at line 99 of file HiveWhiteBoard.cpp.

Constructor & Destructor Documentation

◆ ~HiveWhiteBoard()

HiveWhiteBoard::~HiveWhiteBoard ( )
inlineoverride

Standard Destructor.

Definition at line 126 of file HiveWhiteBoard.cpp.

126 {
127 setDataLoader( 0 ).ignore();
129 clearStore().ignore();
130 for_each( m_partitions, []( Partition& p ) {
131 p.dataManager->release();
132 p.dataProvider->release();
133 } );
134 m_partitions.clear();
135 }
StatusCode setDataLoader(IConversionSvc *pDataLoader, IDataProviderSvc *=nullptr) override
IDataManagerSvc: Pass a default data loader to the service.
std::vector< SynchronizedPartition > m_partitions
Datastore partitions.
StatusCode resetPreLoad() override
Clear the preload list.
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
void ignore() const
Allow discarding a StatusCode without warning.
Definition StatusCode.h:128
void for_each(ContainerOfSynced &c, Fun &&f)

Member Function Documentation

◆ addPreLoadItem()

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

Add an item to the preload list.

Definition at line 229 of file HiveWhiteBoard.cpp.

229 {
230 for_each( m_partitions, [&]( Partition& p ) {
231 p.dataProvider->addPreLoadItem( item ).ignore( /* AUTOMATICALLY ADDED FOR gaudi/Gaudi!763 */ );
232 } );
233 return StatusCode::SUCCESS;
234 }
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 350 of file HiveWhiteBoard.cpp.

350 {
351 // take next free slot in the list
352 size_t slot = std::string::npos;
353 if ( m_freeSlots.try_pop( slot ) ) {
354 assert( slot != std::string::npos );
355 assert( slot < m_partitions.size() );
356 m_partitions[slot].with_lock( [evtnumber]( Partition& p ) {
357 assert( p.eventNumber == -1 ); // or whatever value represents 'free'
358 p.eventNumber = evtnumber;
359 } );
360 }
361 return slot;
362 }
tbb::concurrent_queue< size_t > m_freeSlots
fifo queue of free slots

◆ attachServices()

StatusCode HiveWhiteBoard::attachServices ( )
inline

Definition at line 381 of file HiveWhiteBoard.cpp.

381 {
382 m_addrCreator = service( m_loader, true );
383 if ( !m_addrCreator ) {
384 error() << "Failed to retrieve data loader "
385 << "\"" << m_loader << "\"" << endmsg;
386 return StatusCode::FAILURE;
387 }
388 SmartIF<IConversionSvc> dataLoader{ service( m_loader, true ) };
389 if ( !dataLoader ) {
390 error() << MSG::ERROR << "Failed to retrieve data loader "
391 << "\"" << m_loader << "\"" << endmsg;
392 return StatusCode::FAILURE;
393 }
394 StatusCode sc = setDataLoader( dataLoader );
395 if ( !sc.isSuccess() ) {
396 error() << MSG::ERROR << "Failed to set data loader "
397 << "\"" << m_loader << "\"" << endmsg;
398 return sc;
399 }
400 return sc;
401 }
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:302
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 186 of file HiveWhiteBoard.cpp.

186 {
187 for_each( m_partitions, []( Partition& p ) { p.dataManager->clearStore().ignore(); } );
188 return StatusCode::SUCCESS;
189 }

◆ clearStore() [2/2]

StatusCode HiveWhiteBoard::clearStore ( size_t partition)
inlineoverride

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

Definition at line 319 of file HiveWhiteBoard.cpp.

319 {
320 return m_partitions[partition].with_lock( []( Partition& p ) { return p.dataManager->clearStore(); } );
321 }

◆ clearSubTree() [1/2]

StatusCode HiveWhiteBoard::clearSubTree ( DataObject * pObject)
inlineoverride

Remove all data objects below the sub tree identified.

Definition at line 182 of file HiveWhiteBoard.cpp.

182 {
183 return fwd( [&]( IDataManagerSvc& p ) { return p.clearSubTree( pObject ); } );
184 }
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 178 of file HiveWhiteBoard.cpp.

178 {
179 return fwd( [&]( IDataManagerSvc& p ) { return p.clearSubTree( path ); } );
180 }

◆ detachServices()

StatusCode HiveWhiteBoard::detachServices ( )
inline

Definition at line 403 of file HiveWhiteBoard.cpp.

403 {
404 m_addrCreator.reset();
405 m_dataLoader.reset();
406 return StatusCode::SUCCESS;
407 }
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 344 of file HiveWhiteBoard.cpp.

344 {
345 DataObject* pObject{ nullptr };
346 return findObject( id.fullKey(), pObject ).isSuccess();
347 }
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 474 of file HiveWhiteBoard.cpp.

474 {
475 setDataLoader( 0 ).ignore();
476 clearStore().ignore();
477 return Service::finalize();
478 }
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 282 of file HiveWhiteBoard.cpp.

282 {
283 return fwd( [&]( IDataProviderSvc& p ) { return p.retrieveObject( parent, path, pObj ); } );
284 }
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 278 of file HiveWhiteBoard.cpp.

278 {
279 return fwd( [&]( IDataProviderSvc& p ) { return p.retrieveObject( path, pObj ); } );
280 }

◆ freeSlots()

size_t HiveWhiteBoard::freeSlots ( )
inlineoverride

Get free slots number.

Definition at line 138 of file HiveWhiteBoard.cpp.

138{ return m_freeSlots.unsafe_size(); }

◆ freeStore()

StatusCode HiveWhiteBoard::freeStore ( size_t partition)
inlineoverride

Free a store partition.

Definition at line 365 of file HiveWhiteBoard.cpp.

365 {
366 assert( partition < m_partitions.size() );
367 auto prev = m_partitions[partition].with_lock( []( Partition& p ) { return std::exchange( p.eventNumber, -1 ); } );
368 if ( prev == -1 ) return StatusCode::FAILURE; // double free -- should never happen!
369 m_freeSlots.push( partition );
370 return StatusCode::SUCCESS;
371 }

◆ getNumberOfStores()

size_t HiveWhiteBoard::getNumberOfStores ( ) const
inlineoverride

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

Definition at line 341 of file HiveWhiteBoard.cpp.

341{ 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 374 of file HiveWhiteBoard.cpp.

374 {
375 auto i = std::find_if(
377 Gaudi::cxx::with_lock( [eventnumber]( const Partition& p ) { return p.eventNumber == eventnumber; } ) );
378 return i != end( m_partitions ) ? std::distance( begin( m_partitions ), i ) : std::string::npos;
379 }
AttribStringParser::Iterator begin(const AttribStringParser &parser)
auto with_lock(Fun &&f)

◆ initialize()

StatusCode HiveWhiteBoard::initialize ( )
inlineoverride

Service initialisation.

Definition at line 414 of file HiveWhiteBoard.cpp.

414 {
415 StatusCode sc = Service::initialize();
416 if ( !sc.isSuccess() ) {
417 error() << "Unable to initialize base class" << endmsg;
418 return sc;
419 }
420 if ( m_slots < (size_t)1 ) {
421 error() << "Invalid number of slots (" << m_slots << ")" << endmsg;
422 return StatusCode::FAILURE;
423 }
424
425 if ( !setNumberOfStores( m_slots ).isSuccess() ) {
426 error() << "Cannot set number of slots" << endmsg;
427 return StatusCode::FAILURE;
428 }
429
430 m_partitions = std::vector<SynchronizedPartition>( m_slots );
431 for ( size_t i = 0; i < m_slots; i++ ) {
432 DataSvc* svc = new DataSvc( name() + "_" + std::to_string( i ), serviceLocator() );
433 // Percolate properties
434 svc->setProperty( m_rootCLID ).ignore();
435 svc->setProperty( m_rootName ).ignore();
438 // make sure that CommonMessaging is initialized
441
442 sc = svc->initialize();
443 if ( !sc.isSuccess() ) {
444 error() << "Failed to instantiate DataSvc as store partition" << endmsg;
445 return sc;
446 }
447 m_partitions[i].with_lock( [&]( Partition& p ) {
448 p.dataProvider = svc;
449 p.dataManager = svc;
450 } );
451 m_freeSlots.push( i );
452 }
453 selectStore( 0 ).ignore();
454 return attachServices();
455 }
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 286 of file HiveWhiteBoard.cpp.

286 {
287 return fwd( [&]( IDataProviderSvc& p ) { return p.linkObject( from, objPath, to ); } );
288 }
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 290 of file HiveWhiteBoard.cpp.

290 {
291 return fwd( [&]( IDataProviderSvc& p ) { return p.linkObject( fullPath, to ); } );
292 }

◆ 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 162 of file HiveWhiteBoard.cpp.

162 {
163 return fwd( [&]( IDataManagerSvc& p ) { return p.objectLeaves( pObject, leaves ); } );
164 }
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 166 of file HiveWhiteBoard.cpp.

166 {
167 return fwd( [&]( IDataManagerSvc& p ) { return p.objectLeaves( pObject, leaves ); } );
168 }

◆ 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 170 of file HiveWhiteBoard.cpp.

170 {
171 return fwd( [&]( IDataManagerSvc& p ) { return p.objectParent( pObject, refpParent ); } );
172 }
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 174 of file HiveWhiteBoard.cpp.

174 {
175 return fwd( [&]( IDataManagerSvc& p ) { return p.objectParent( pObject, refpParent ); } );
176 }

◆ preLoad()

StatusCode HiveWhiteBoard::preLoad ( )
inlineoverride

load all preload items of the list

Definition at line 250 of file HiveWhiteBoard.cpp.

250 {
251 return fwd( [&]( IDataProviderSvc& p ) { return p.preLoad(); } );
252 }
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 150 of file HiveWhiteBoard.cpp.

150 {
151 return fwd( [&]( IDataManagerSvc& p ) { return p.registerAddress( parent, path, pAdd ); } );
152 }
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 146 of file HiveWhiteBoard.cpp.

146 {
147 return fwd( [&]( IDataManagerSvc& p ) { return p.registerAddress( path, pAddr ); } );
148 }

◆ registerObject() [1/2]

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

Register object with the data store.

Definition at line 258 of file HiveWhiteBoard.cpp.

258 {
259 return fwd( [&]( IDataProviderSvc& p ) { return p.registerObject( parent, obj, pObj ); } );
260 }
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 254 of file HiveWhiteBoard.cpp.

254 {
255 return fwd( [&]( IDataProviderSvc& p ) { return p.registerObject( parent, obj, pObj ); } );
256 }

◆ reinitialize()

StatusCode HiveWhiteBoard::reinitialize ( )
inlineoverride

Service initialisation.

Definition at line 458 of file HiveWhiteBoard.cpp.

458 {
459 StatusCode sc = Service::reinitialize();
460 if ( !sc.isSuccess() ) {
461 error() << "Unable to reinitialize base class" << endmsg;
462 return sc;
463 }
464 detachServices().ignore( /* AUTOMATICALLY ADDED FOR gaudi/Gaudi!763 */ );
465 sc = attachServices();
466 if ( !sc.isSuccess() ) {
467 error() << "Failed to attach necessary services." << endmsg;
468 return sc;
469 }
470 return StatusCode::SUCCESS;
471 }
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 236 of file HiveWhiteBoard.cpp.

236 {
237 for_each( m_partitions, [&]( Partition& p ) {
238 p.dataProvider->removePreLoadItem( item ).ignore( /* AUTOMATICALLY ADDED FOR gaudi/Gaudi!763 */ );
239 } );
240 return StatusCode::SUCCESS;
241 }

◆ resetPreLoad()

StatusCode HiveWhiteBoard::resetPreLoad ( )
inlineoverride

Clear the preload list.

Definition at line 243 of file HiveWhiteBoard.cpp.

243 {
244 for_each( m_partitions, [&]( Partition& p ) {
245 p.dataProvider->resetPreLoad().ignore( /* AUTOMATICALLY ADDED FOR gaudi/Gaudi!763 */ );
246 } );
247 return StatusCode::SUCCESS;
248 }

◆ retrieveObject()

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

Retrieve object from data store.

Definition at line 274 of file HiveWhiteBoard.cpp.

274 {
275 return fwd( [&]( IDataProviderSvc& p ) { return p.retrieveObject( parent, path, pObj ); } );
276 }

◆ rootCLID()

CLID HiveWhiteBoard::rootCLID ( ) const
inlineoverride

IDataManagerSvc: Accessor for root event CLID.

Definition at line 141 of file HiveWhiteBoard.cpp.

141{ 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 143 of file HiveWhiteBoard.cpp.

143{ return m_rootName; }

◆ selectStore()

StatusCode HiveWhiteBoard::selectStore ( size_t partition)
inlineoverride

Activate a partition object. The identifies the partition uniquely.

Definition at line 324 of file HiveWhiteBoard.cpp.

324 {
325 s_current = &m_partitions[partition];
326 return StatusCode::SUCCESS;
327 }

◆ 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 221 of file HiveWhiteBoard.cpp.

221 {
222 if ( pDataLoader ) pDataLoader->addRef();
223 if ( pDataLoader ) pDataLoader->setDataProvider( this ).ignore( /* AUTOMATICALLY ADDED FOR gaudi/Gaudi!763 */ );
224 m_dataLoader = pDataLoader;
225 for_each( m_partitions, [&]( Partition& p ) { p.dataManager->setDataLoader( m_dataLoader, this ).ignore(); } );
226 return StatusCode::SUCCESS;
227 }
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 330 of file HiveWhiteBoard.cpp.

330 {
332 warning() << "Too late to change the number of slots!" << endmsg;
333 return StatusCode::FAILURE;
334 }
335 m_slots = slots;
337 return StatusCode::SUCCESS;
338 }
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
static void setNumConcEvents(const std::size_t &nE)
Set the number of concurrent events (for MT).
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 205 of file HiveWhiteBoard.cpp.

205 {
206 return fwd(
207 [pObj, path = std::move( path )]( IDataManagerSvc& p ) { return p.setRoot( std::move( path ), pObj ); } );
208 }
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 212 of file HiveWhiteBoard.cpp.

212 {
213 return fwd(
214 [pAddr, path = std::move( path )]( IDataManagerSvc& p ) { return p.setRoot( std::move( path ), pAddr ); } );
215 }

◆ 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 196 of file HiveWhiteBoard.cpp.

196 {
197 return fwd( [&]( IDataManagerSvc& p ) { return p.traverseSubTree( pObject, pAgent ); } );
198 }
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 192 of file HiveWhiteBoard.cpp.

192 {
193 return fwd( [&]( IDataManagerSvc& p ) { return p.traverseSubTree( path, pAgent ); } );
194 }

◆ traverseTree()

StatusCode HiveWhiteBoard::traverseTree ( IDataStoreAgent * pAgent)
inlineoverride

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

Definition at line 200 of file HiveWhiteBoard.cpp.

200 {
201 return fwd( [&]( IDataManagerSvc& p ) { return p.traverseTree( pAgent ); } );
202 }
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 298 of file HiveWhiteBoard.cpp.

298 {
299 return fwd( [&]( IDataProviderSvc& p ) { return p.unlinkObject( from, objPath ); } );
300 }
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 294 of file HiveWhiteBoard.cpp.

294 {
295 return fwd( [&]( IDataProviderSvc& p ) { return p.unlinkObject( from, objPath ); } );
296 }

◆ unlinkObject() [3/3]

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

Remove a link to another object.

Definition at line 302 of file HiveWhiteBoard.cpp.

302 {
303 return fwd( [&]( IDataProviderSvc& p ) { return p.unlinkObject( path ); } );
304 }

◆ unregisterAddress() [1/2]

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

IDataManagerSvc: Unregister object address from the data store.

Definition at line 158 of file HiveWhiteBoard.cpp.

158 {
159 return fwd( [&]( IDataManagerSvc& p ) { return p.unregisterAddress( pParent, path ); } );
160 }
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 154 of file HiveWhiteBoard.cpp.

154 {
155 return fwd( [&]( IDataManagerSvc& p ) { return p.unregisterAddress( path ); } );
156 }

◆ unregisterObject() [1/3]

StatusCode HiveWhiteBoard::unregisterObject ( DataObject * pObj)
inlineoverride

Unregister object from the data store.

Definition at line 266 of file HiveWhiteBoard.cpp.

266 {
267 return fwd( [&]( IDataProviderSvc& p ) { return p.unregisterObject( pObj ); } );
268 }
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 270 of file HiveWhiteBoard.cpp.

270 {
271 return fwd( [&]( IDataProviderSvc& p ) { return p.unregisterObject( pObj, path ); } );
272 }

◆ unregisterObject() [3/3]

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

Unregister object from the data store.

Definition at line 262 of file HiveWhiteBoard.cpp.

262 {
263 return fwd( [&]( IDataProviderSvc& p ) { return p.unregisterObject( path ); } );
264 }

◆ updateObject() [1/2]

StatusCode HiveWhiteBoard::updateObject ( DataObject * pObj)
inlineoverride

Update object.

Definition at line 310 of file HiveWhiteBoard.cpp.

310 {
311 return fwd( [&]( IDataProviderSvc& p ) { return p.updateObject( pObj ); } );
312 }
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 306 of file HiveWhiteBoard.cpp.

306 {
307 return fwd( [&]( IDataProviderSvc& p ) { return p.updateObject( pDirectory ); } );
308 }

Member Data Documentation

◆ m_addrCreator

SmartIF<IAddressCreator> HiveWhiteBoard::m_addrCreator
protected

Reference to address creator.

Definition at line 115 of file HiveWhiteBoard.cpp.

◆ m_dataLoader

SmartIF<IConversionSvc> HiveWhiteBoard::m_dataLoader
protected

Pointer to data loader service.

Definition at line 113 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 108 of file HiveWhiteBoard.cpp.

108 { this, "EnableFaultHandler", false,
109 "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 106 of file HiveWhiteBoard.cpp.

106 { this, "ForceLeaves", false,
107 "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 119 of file HiveWhiteBoard.cpp.

◆ m_inhibitPathes

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

Definition at line 110 of file HiveWhiteBoard.cpp.

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

◆ m_loader

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

Definition at line 104 of file HiveWhiteBoard.cpp.

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

◆ m_partitions

std::vector<SynchronizedPartition> HiveWhiteBoard::m_partitions
protected

Datastore partitions.

Definition at line 117 of file HiveWhiteBoard.cpp.

◆ m_rootCLID

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

Definition at line 102 of file HiveWhiteBoard.cpp.

102{ 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 103 of file HiveWhiteBoard.cpp.

103{ 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 105 of file HiveWhiteBoard.cpp.

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

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