The Gaudi Framework  v33r1 (b1225454)
TsDataSvc Class Reference

Data service base class. More...

#include <GaudiKernel/TsDataSvc.h>

Inheritance diagram for TsDataSvc:
Collaboration diagram for TsDataSvc:

Public Member Functions

CLID rootCLID () const override
 IDataManagerSvc: Accessor for root event CLID. More...
 
const std::stringrootName () const override
 IDataManagerSvc: Accessor for root event name. More...
 
StatusCode registerAddress (std::string_view fullPath, IOpaqueAddress *pAddress) override
 IDataManagerSvc: Register object address with the data store. More...
 
StatusCode registerAddress (IRegistry *parentObj, std::string_view objectPath, IOpaqueAddress *pAddress) override
 IDataManagerSvc: Register object address with the data store. More...
 
StatusCode unregisterAddress (std::string_view fullPath) override
 IDataManagerSvc: Unregister object address from the data store. More...
 
StatusCode unregisterAddress (IRegistry *pParent, std::string_view objPath) override
 IDataManagerSvc: Unregister object address from the data store. More...
 
StatusCode objectLeaves (const DataObject *pObject, std::vector< IRegistry * > &refLeaves) override
 IDataManagerSvc: Explore the object store: retrieve all leaves attached to the object. More...
 
StatusCode objectLeaves (const IRegistry *pRegistry, std::vector< IRegistry * > &refLeaves) override
 IDataManagerSvc: Explore the object store: retrieve all leaves attached to the object. More...
 
StatusCode objectParent (const DataObject *pObject, IRegistry *&refpParent) override
 IDataManagerSvc: Explore the object store: retrieve the object's parent. More...
 
StatusCode objectParent (const IRegistry *pRegistry, IRegistry *&refpParent) override
 IDataManagerSvc: Explore the object store: retrieve the object's parent. More...
 
StatusCode clearSubTree (std::string_view sub_tree_path) override
 IDataManagerSvc: Remove all data objects below the sub tree identified by its full path name. More...
 
StatusCode clearSubTree (DataObject *pObject) override
 IDataManagerSvc: Remove all data objects below the sub tree identified by the object. More...
 
StatusCode clearStore () override
 IDataManagerSvc: Remove all data objects in the data store. More...
 
StatusCode traverseSubTree (std::string_view sub_tree_path, IDataStoreAgent *pAgent) override
 IDataManagerSvc: Analyze by traversing all data objects below the sub tree identified by its full path name. More...
 
StatusCode traverseSubTree (DataObject *pObject, IDataStoreAgent *pAgent) override
 IDataManagerSvc: Analyze by traversing all data objects below the sub tree. More...
 
StatusCode traverseTree (IDataStoreAgent *pAgent) override
 IDataManagerSvc: Analyze by traversing all data objects in the data store. More...
 
StatusCode setRoot (std::string root_name, DataObject *pRootObj) override
 Initialize data store for new event by giving new event path and root object. More...
 
virtual StatusCode i_setRoot (std::string root_name, DataObject *pRootObj)
 Initialize data store for new event by giving new event path and root object. More...
 
StatusCode i_setRoot (DataObject *pRootObj)
 
StatusCode setRoot (std::string root_path, IOpaqueAddress *pRootAddr) override
 Initialize data store for new event by giving new event path and address of root object. More...
 
virtual StatusCode i_setRoot (std::string root_path, IOpaqueAddress *pRootAddr)
 Initialize data store for new event by giving new event path and address of root object. More...
 
StatusCode i_setRoot (IOpaqueAddress *pRootAddr)
 
StatusCode setDataLoader (IConversionSvc *svc, IDataProviderSvc *dpsvc=nullptr) override
 IDataManagerSvc: IDataManagerSvc: Pass a default data loader to the service and optionally a data provider. More...
 
StatusCode addPreLoadItem (const DataStoreItem &item) override
 Add an item to the preload list. More...
 
StatusCode removePreLoadItem (const DataStoreItem &item) override
 Remove an item from the preload list. More...
 
StatusCode resetPreLoad () override
 Clear the preload list. More...
 
virtual StatusCode preLoad (int depth, int load_depth, DataObject *pObject)
 Execute one level of preloading and recursively load until the final level is reached. More...
 
StatusCode preLoad () override
 load all preload items of the list More...
 
StatusCode registerObject (std::string_view parentPath, std::string_view objPath, DataObject *pObject) override
 Register object with the data store. More...
 
StatusCode registerObject (DataObject *parentObj, std::string_view objPath, DataObject *pObject) override
 Register object with the data store. More...
 
StatusCode unregisterObject (std::string_view fullPath) override
 Unregister object from the data store. More...
 
StatusCode unregisterObject (DataObject *pObject) override
 Unregister object from the data store. More...
 
StatusCode unregisterObject (DataObject *pObject, std::string_view objectPath) override
 Unregister object from the data store. More...
 
StatusCode retrieveObject (IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
 Retrieve object from data store. More...
 
StatusCode findObject (std::string_view fullPath, DataObject *&pObject) override
 Find object identified by its full path in the data store. More...
 
StatusCode findObject (IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
 Find object identified by its full path in the data store. More...
 
StatusCode linkObject (IRegistry *from, std::string_view objPath, DataObject *to) override
 Add a link to another object. More...
 
StatusCode linkObject (std::string_view fullPath, DataObject *to) override
 Add a link to another object. More...
 
StatusCode unlinkObject (IRegistry *from, std::string_view objPath) override
 Remove a link to another object. More...
 
StatusCode unlinkObject (DataObject *fromObj, std::string_view objPath) override
 Remove a link to another object. More...
 
StatusCode unlinkObject (std::string_view fullPath) override
 Remove a link to another object. More...
 
StatusCode updateObject (IRegistry *pDirectory) override
 Update object identified by its directory entry. More...
 
StatusCode updateObject (DataObject *toUpdate) override
 Update object. More...
 
StatusCode initialize () override
 Service initialization. More...
 
StatusCode reinitialize () override
 Service initialization. More...
 
StatusCode finalize () override
 Service initialization. More...
 
 TsDataSvc (const TsDataSvc &)=delete
 no copy constructor More...
 
TsDataSvcoperator= (const TsDataSvc &)=delete
 no assignment operator More...
 
virtual StatusCode registerAddress (std::string_view fullPath, IOpaqueAddress *pAddress)=0
 Register object address with the data store. More...
 
StatusCode registerAddress (DataObject *parentObj, std::string_view objectPath, IOpaqueAddress *pAddress)
 Register object address with the data store. More...
 
virtual StatusCode registerAddress (IRegistry *parentObj, std::string_view objectPath, IOpaqueAddress *pAddress)=0
 Register object address with the data store. More...
 
virtual StatusCode unregisterAddress (std::string_view fullPath)=0
 Unregister object address from the data store. More...
 
StatusCode unregisterAddress (DataObject *pParent, std::string_view objPath)
 Unregister object address from the data store. More...
 
virtual StatusCode unregisterAddress (IRegistry *pParent, std::string_view objPath)=0
 Unregister object address from the data store. More...
 
StatusCode registerObject (std::string_view fullPath, DataObject *pObject)
 Register object with the data store. More...
 
virtual StatusCode registerObject (std::string_view parentPath, std::string_view objectPath, DataObject *pObject)=0
 Register object with the data store. More...
 
StatusCode registerObject (std::string_view parentPath, int item, DataObject *pObject)
 Register object with the data store. More...
 
virtual StatusCode registerObject (DataObject *parentObj, std::string_view objectPath, DataObject *pObject)=0
 Register object with the data store. More...
 
StatusCode registerObject (DataObject *parentObj, int item, DataObject *pObject)
 Register object with the data store. More...
 
virtual StatusCode retrieveObject (IRegistry *pDirectory, std::string_view path, DataObject *&pObject)=0
 Retrieve object identified by its directory entry. More...
 
StatusCode retrieveObject (std::string_view fullPath, DataObject *&pObject)
 Retrieve object identified by its full path from the data store. More...
 
StatusCode retrieveObject (std::string_view parentPath, std::string_view objectPath, DataObject *&pObject)
 Retrieve object from data store. More...
 
StatusCode retrieveObject (std::string_view parentPath, int item, DataObject *&pObject)
 Retrieve object from data store. More...
 
StatusCode retrieveObject (DataObject *parentObj, std::string_view objectPath, DataObject *&pObject)
 Retrieve object from data store. More...
 
StatusCode retrieveObject (DataObject *parentObj, int item, DataObject *&pObject)
 Retrieve object from data store. More...
 
virtual StatusCode findObject (IRegistry *pDirectory, std::string_view path, DataObject *&pObject)=0
 Find object identified by its directory entry. More...
 
virtual StatusCode findObject (std::string_view fullPath, DataObject *&pObject)=0
 Find object identified by its full path in the data store. More...
 
StatusCode findObject (std::string_view parentPath, std::string_view objectPath, DataObject *&pObject)
 Find object identified by its parent object and the path to the object relative to the parent. More...
 
StatusCode findObject (std::string_view parentPath, int item, DataObject *&pObject)
 Find object identified by its parent object and an integer identifier in the data store. More...
 
StatusCode findObject (DataObject *parentObj, std::string_view objectPath, DataObject *&pObject)
 Find object identified by its parent object and the path to the object relative to the parent. More...
 
StatusCode findObject (DataObject *parentObj, int item, DataObject *&pObject)
 Find object identified by its parent object and an integer identifier in the data store. More...
 
virtual StatusCode linkObject (IRegistry *from, std::string_view objPath, DataObject *toObj)=0
 Add a link to another object. More...
 
StatusCode linkObject (std::string_view fromPath, std::string_view objPath, DataObject *toObj)
 Add a link to another object. More...
 
StatusCode linkObject (DataObject *fromObj, std::string_view objPath, DataObject *toObj)
 Add a link to another object. More...
 
virtual StatusCode linkObject (std::string_view fullPath, DataObject *toObj)=0
 Add a link to another object. More...
 
virtual StatusCode unlinkObject (IRegistry *from, std::string_view objPath)=0
 Remove a link to another object. More...
 
StatusCode unlinkObject (std::string_view fromPath, std::string_view objPath)
 Remove a link to another object. More...
 
virtual StatusCode unlinkObject (DataObject *fromObj, std::string_view objPath)=0
 Remove a link to another object. More...
 
virtual StatusCode unlinkObject (std::string_view fullPath)=0
 Remove a link to another object. More...
 
- Public Member Functions inherited from extends< Service, IDataProviderSvc, IDataManagerSvc >
void * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast. More...
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface. More...
 
std::vector< std::stringgetInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
- Public Member Functions inherited from Service
const std::stringname () const override
 Retrieve name of the service. More...
 
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. More...
 
StatusCode sysStart () override
 Initialize Service. More...
 
StatusCode sysStop () override
 Initialize Service. More...
 
StatusCode sysFinalize () override
 Finalize Service. More...
 
StatusCode sysReinitialize () override
 Re-initialize the Service. More...
 
StatusCode sysRestart () override
 Re-initialize the Service. More...
 
 Service (std::string name, ISvcLocator *svcloc)
 Standard Constructor. More...
 
SmartIF< ISvcLocator > & serviceLocator () const override
 Retrieve pointer to service locator. More...
 
StatusCode setProperties ()
 Method for setting declared properties to the values specified for the job. More...
 
template<class T >
StatusCode service (const std::string &name, const T *&psvc, bool createIf=true) const
 Access a service by name, creating it if it doesn't already exist. More...
 
template<class T >
StatusCode service (const std::string &name, T *&psvc, bool createIf=true) const
 
template<typename IFace = IService>
SmartIF< IFace > service (const std::string &name, bool createIf=true) const
 
template<class T >
StatusCode service (const std::string &svcType, const std::string &svcName, T *&psvc) const
 Access a service by name and type, creating it if it doesn't already exist. More...
 
template<class T >
StatusCode declareTool (ToolHandle< T > &handle, std::string toolTypeAndName, bool createIf=true)
 Declare used tool. More...
 
SmartIF< IAuditorSvc > & auditorSvc () const
 The standard auditor service.May not be invoked before sysInitialize() has been invoked. More...
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 PropertyHolder ()=default
 
Gaudi::Details::PropertyBasedeclareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property. More...
 
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. More...
 
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. More...
 
Gaudi::Details::PropertyBasedeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property. More...
 
StatusCode setProperty (const Gaudi::Details::PropertyBase &p) override
 set the property form another property More...
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string More...
 
StatusCode setProperty (const std::string &n, const std::string &v) override
 set the property from name and the value More...
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value More...
 
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property More...
 
const Gaudi::Details::PropertyBasegetProperty (const std::string &name) const override
 get the property by name More...
 
StatusCode getProperty (const std::string &n, std::string &v) const override
 convert the property to the string More...
 
const std::vector< Gaudi::Details::PropertyBase * > & getProperties () const override
 get all properties More...
 
bool hasProperty (const std::string &name) const override
 Return true if we have a property with the given name. More...
 
 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) More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 
- Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor. More...
 
const SmartIF< IMessageSvc > & msgSvc () const
 The standard message service. More...
 
MsgStreammsgStream () const
 Return an uninitialized MsgStream. More...
 
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts. More...
 
MsgStreamalways () const
 shortcut for the method msgStream(MSG::ALWAYS) More...
 
MsgStreamfatal () const
 shortcut for the method msgStream(MSG::FATAL) More...
 
MsgStreamerr () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamerror () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamwarning () const
 shortcut for the method msgStream(MSG::WARNING) More...
 
MsgStreaminfo () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MsgStreamdebug () const
 shortcut for the method msgStream(MSG::DEBUG) More...
 
MsgStreamverbose () const
 shortcut for the method msgStream(MSG::VERBOSE) More...
 
MsgStreammsg () const
 shortcut for the method msgStream(MSG::INFO) More...
 

Protected Member Functions

bool checkRoot ()
 Check if root path is valid. More...
 
virtual IConversionSvcgetDataLoader (IRegistry *pReg)
 Retrieve customizable data loader according to registry entry to be retrieved. More...
 
virtual DataObjectcreateDefaultObject () const
 Create default objects in case forced creation of leaves is requested. More...
 
virtual StatusCode loadObject (IRegistry *pNode)
 Invoke Persistency service to create transient object from its persistent representation. More...
 
virtual StatusCode loadObject (IConversionSvc *pLoader, IRegistry *pNode)
 Invoke Persistency service to create transient object from its persistent representation. More...
 
StatusCode retrieveEntry (DataSvcHelpers::RegistryEntry *pNode, std::string_view path, DataSvcHelpers::RegistryEntry *&pEntry)
 Retrieve registry entry from store. More...
 
DataObjecthandleDataFault (IRegistry *pReg, std::string_view path={})
 Invoke data fault handling if enabled. More...
 
- Protected Member Functions inherited from Service
 ~Service () override
 Standard Destructor. More...
 
int outputLevel () const
 get the Service's output level More...
 
- Protected Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
Gaudi::Details::PropertyBaseproperty (const std::string &name) const
 
- Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level setUpMessaging () const
 Set up local caches. More...
 
MSG::Level resetMessaging ()
 Reinitialize internal states. More...
 
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream. More...
 

Protected Attributes

tsDataSvcMutex m_accessMutex
 Mutex to protect access to the store. More...
 
- Protected Attributes inherited from Service
Gaudi::StateMachine::State m_state = Gaudi::StateMachine::OFFLINE
 Service state. More...
 
Gaudi::StateMachine::State m_targetState = Gaudi::StateMachine::OFFLINE
 Service state. More...
 
Gaudi::Property< int > m_outputLevel {this, "OutputLevel", MSG::NIL, "output level"}
 
Gaudi::Property< bool > m_auditInit {this, "AuditServices", false, " unused"}
 
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()"}
 
SmartIF< IAuditorSvcm_pAuditorSvc
 Auditor Service. More...
 

Private Attributes

IConversionSvcm_dataLoader = nullptr
 Pointer to data loader service. More...
 
IIncidentSvcm_incidentSvc = nullptr
 Pointer to incident service. More...
 
Gaudi::Property< CLIDm_rootCLID {this, "RootCLID", 110 , "CLID of root entry"}
 
Gaudi::Property< std::stringm_rootName {this, "RootName", "/Event", "name of root entry"}
 
Gaudi::Property< bool > m_forceLeaves {this, "ForceLeaves", false, "force creation of default leaves on registerObject"}
 
Gaudi::Property< std::vector< std::string > > m_inhibitPathes {this, "InhibitPathes", {}, "inhibited leaves"}
 
Gaudi::Property< bool > m_enableFaultHdlr
 
Gaudi::Property< std::stringm_faultName {this, "DataFaultName", "DataFault", "Name of the data fault incident"}
 
Gaudi::Property< bool > m_enableAccessHdlr
 
Gaudi::Property< std::stringm_accessName {this, "DataAccessName", "DataAccess", "Name of the data access incident"}
 
std::vector< DataStoreItemm_preLoads
 Items to be pre-loaded. More...
 
std::unique_ptr< DataSvcHelpers::RegistryEntrym_root
 Pointer to root entry. More...
 

Additional Inherited Members

- Public Types inherited from extends< Service, IDataProviderSvc, IDataManagerSvc >
using base_class = extends
 Typedef to this class. More...
 
using extend_interfaces_base = extend_interfaces< Interfaces... >
 Typedef to the base of this class. More...
 
- 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 = PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 Typedef used to refer to this class from derived classes, as in. More...
 
- Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
using base_class = CommonMessaging
 
- Public Types inherited from extend_interfaces< Interfaces... >
using ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type
 take union of the ext_iids of all Interfaces... More...
 

Detailed Description

Data service base class.

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

The accessor methods are protected with a lock. This is done having in mind the DetDataSvc and the retrieval of subdetectors in a multithreaded FW. This solution cannot solve the problem of having different conditions set available simultaneously but it is the simplest solution to allow multiple algorithms running concurrently to access detector components. In first approximation, since for the data we have the whiteboard, we protect only the retrieval of objects.

Author
Markus Frank
Sebastien Ponce
Danilo Piparo
Version
1.1

Definition at line 76 of file TsDataSvc.h.

Constructor & Destructor Documentation

◆ TsDataSvc()

TsDataSvc::TsDataSvc ( const TsDataSvc )
delete

no copy constructor

Member Function Documentation

◆ addPreLoadItem()

StatusCode TsDataSvc::addPreLoadItem ( const DataStoreItem item)
override

Add an item to the preload list.

Definition at line 766 of file TsDataSvc.cpp.

766  {
767  auto i = std::find( m_preLoads.begin(), m_preLoads.end(), item );
768  if ( i == m_preLoads.end() ) m_preLoads.push_back( item );
769  return StatusCode::SUCCESS;
770 }
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
T end(T... args)
T push_back(T... args)
T find(T... args)
T begin(T... args)
std::vector< DataStoreItem > m_preLoads
Items to be pre-loaded.
Definition: TsDataSvc.h:97

◆ checkRoot()

bool TsDataSvc::checkRoot ( )
inlineprotected

Check if root path is valid.

Definition at line 282 of file TsDataSvc.h.

282 { return 0 != m_root; }
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99

◆ clearStore()

StatusCode TsDataSvc::clearStore ( )
override

IDataManagerSvc: Remove all data objects in the data store.

Definition at line 114 of file TsDataSvc.cpp.

114  {
115  if ( !checkRoot() ) return Status::INVALID_ROOT;
116  m_root.reset();
117  return StatusCode::SUCCESS;
118 }
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
T reset(T... args)
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282

◆ clearSubTree() [1/2]

StatusCode TsDataSvc::clearSubTree ( std::string_view  sub_tree_path)
override

IDataManagerSvc: Remove all data objects below the sub tree identified by its full path name.

Definition at line 88 of file TsDataSvc.cpp.

88  {
89  DataObject* pObject = nullptr;
90  StatusCode status = findObject( sub_tree_path, pObject );
91  if ( !status.isSuccess() ) return status;
92  RegEntry* node_entry = CAST_REGENTRY( RegEntry*, pObject->registry() );
93  if ( !node_entry ) return Status::INVALID_OBJECT;
94  RegEntry* parent = node_entry->parentEntry();
95  if ( !parent ) return Status::INVALID_PARENT;
96  parent->remove( node_entry );
97  return StatusCode::SUCCESS;
98 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
StatusCode findObject(std::string_view fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:647
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
RegistryEntry * parentEntry()
Pointer to parent registry entry.
const Gaudi::Algorithm & parent
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75

◆ clearSubTree() [2/2]

StatusCode TsDataSvc::clearSubTree ( DataObject pObject)
override

IDataManagerSvc: Remove all data objects below the sub tree identified by the object.

Definition at line 103 of file TsDataSvc.cpp.

103  {
104  if ( !checkRoot() ) return Status::INVALID_ROOT;
105  RegEntry* entry = CAST_REGENTRY( RegEntry*, pObject->registry() );
106  if ( !entry ) return Status::INVALID_OBJECT;
107  RegEntry* parent = entry->parentEntry();
108  if ( !parent ) return Status::INVALID_PARENT;
109  parent->remove( entry );
110  return StatusCode::SUCCESS;
111 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
RegistryEntry * parentEntry()
Pointer to parent registry entry.
const Gaudi::Algorithm & parent
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75

◆ createDefaultObject()

DataObject * TsDataSvc::createDefaultObject ( ) const
protectedvirtual

Create default objects in case forced creation of leaves is requested.

Definition at line 869 of file TsDataSvc.cpp.

869 { return new DataObject(); }

◆ finalize()

StatusCode TsDataSvc::finalize ( )
override

Service initialization.

Service initialisation.

Definition at line 850 of file TsDataSvc.cpp.

850  {
851  // Nothing to do: just call base class initialisation
852  setDataLoader( nullptr ).ignore();
853  resetPreLoad().ignore();
854  clearStore().ignore();
855  if ( m_incidentSvc ) {
857  m_incidentSvc = nullptr;
858  }
859  return Service::finalize();
860 }
StatusCode finalize() override
Definition: Service.cpp:174
StatusCode setDataLoader(IConversionSvc *svc, IDataProviderSvc *dpsvc=nullptr) override
IDataManagerSvc: IDataManagerSvc: Pass a default data loader to the service and optionally a data pro...
Definition: TsDataSvc.cpp:194
StatusCode resetPreLoad() override
Clear the preload list.
Definition: TsDataSvc.cpp:780
IIncidentSvc * m_incidentSvc
Pointer to incident service.
Definition: TsDataSvc.h:81
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:168
virtual unsigned long release()=0
Release Interface instance.
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
Definition: TsDataSvc.cpp:114

◆ findObject() [1/8]

virtual StatusCode IDataProviderSvc::findObject

Find object identified by its directory entry.

The result will be returned in the second argument. In case the object is not present the pointer will be set to NULL. ** FASTEST ACCESS TO THE DATA STORE **

Parameters
pDirectoryPointer to the object.
pathString with relative path to directory. Ideally ""!
pObjectReference to the pointer of the object to be returned.
Returns
Status code indicating success or failure.

◆ findObject() [2/8]

virtual StatusCode IDataProviderSvc::findObject

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

The result will be returned in the second argument. In case the object is not present the pointer will be set to NULL.

Parameters
fullPathPath name of the object.
pObjectPointer to the object to be connected.
Returns
Status code indicating success or failure.

◆ findObject() [3/8]

StatusCode IDataProviderSvc::findObject
inline

Find object identified by its parent object and the path to the object relative to the parent.

The result will be returned in the second argument. In case the object is not present the pointer will be set to NULL.

Parameters
parentPathPath to parent node of the object.
objectPathRelative path name of the object.
pObjectReference to the pointer of the object to be returned.
Returns
Status code indicating success or failure.

Definition at line 334 of file IDataProviderSvc.h.

334  {
335  DataObject* parent = nullptr;
336  StatusCode status = findObject( parentPath, parent );
337  return status.isSuccess() ? findObject( parent, objectPath, pObject ) : status;
338  }
StatusCode findObject(std::string_view fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:647
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
const Gaudi::Algorithm & parent
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40

◆ findObject() [4/8]

StatusCode IDataProviderSvc::findObject
inline

Find object identified by its parent object and an integer identifier in the data store.

In case the object is not present the pointer will be set to NULL.

Parameters
parentPathPath to parent node of the object.
itemItem identifier.
pObjectReference to the pointer of the object to be returned.
Returns
Status code indicating success or failure.

Definition at line 348 of file IDataProviderSvc.h.

348  {
349  return findObject( parentPath, itemToPath( item ), pObject );
350  }
StatusCode findObject(std::string_view fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:647

◆ findObject() [5/8]

StatusCode IDataProviderSvc::findObject
inline

Find object identified by its parent object and the path to the object relative to the parent.

The result will be returned in the second argument. In case the object is not present the pointer will be set to NULL.

Parameters
parentObjPointer to parent node of the object.
objectPathRelative path name of the object.
pObjectReference to the pointer of the object to be returned.
Returns
Status code indicating success or failure.

Definition at line 361 of file IDataProviderSvc.h.

361  {
362  return findObject( parentObj ? parentObj->registry() : nullptr, objectPath, pObject );
363  }
StatusCode findObject(std::string_view fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:647

◆ findObject() [6/8]

StatusCode IDataProviderSvc::findObject
inline

Find object identified by its parent object and an integer identifier in the data store.

In case the object is not present the pointer will be set to NULL.

Parameters
parentObjPointer to parent node of the object.
itemItem identifier.
pObjectReference to the pointer of the object to be returned.
Returns
Status code indicating success or failure.

Definition at line 373 of file IDataProviderSvc.h.

373  {
374  return findObject( parentObj, itemToPath( item ), pObject );
375  }
StatusCode findObject(std::string_view fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:647

◆ findObject() [7/8]

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

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

Definition at line 647 of file TsDataSvc.cpp.

647  {
648  pObject = nullptr;
650  if ( !checkRoot() ) return Status::INVALID_ROOT;
651  if ( path.empty() || path == m_rootName ) {
652  pObject = m_root->object();
653  return !pObject ? Status::OBJ_NOT_LOADED : Status::IDataProviderSvc_NO_ERROR;
654  }
655  return findObject( path.front() != SEPARATOR ? m_root.get() : nullptr, path, pObject );
656 }
constexpr char SEPARATOR
StatusCode findObject(std::string_view fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:647
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
T get(T... args)
DataObject * object() const override
Retrive object behind the link.
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:54
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:84

◆ findObject() [8/8]

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

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

Retrieve object identified by its directory from the data store.

Definition at line 633 of file TsDataSvc.cpp.

633  {
635  pObject = nullptr;
636  IRegistry* pReg = ( pRegistry ? pRegistry : m_root.get() );
637  RegEntry* root_entry = CAST_REGENTRY( RegEntry*, pReg );
638  if ( root_entry ) {
639  if ( !path.empty() ) pReg = root_entry->find( path );
640  if ( !pReg ) return Status::INVALID_OBJ_PATH;
641  pObject = pReg->object();
642  }
643  return pObject ? Status::IDataProviderSvc_NO_ERROR : Status::OBJ_NOT_LOADED;
644 }
IRegistry * find(const IRegistry *obj) const
Try to find an object identified by its pointer.
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:32
virtual DataObject * object() const =0
Retrieve object behind the link.
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
T get(T... args)
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:54
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75

◆ getDataLoader()

IConversionSvc * TsDataSvc::getDataLoader ( IRegistry pReg)
protectedvirtual

Retrieve customizable data loader according to registry entry to be retrieved.

Definition at line 874 of file TsDataSvc.cpp.

874 { return m_dataLoader; }
IConversionSvc * m_dataLoader
Pointer to data loader service.
Definition: TsDataSvc.h:79

◆ handleDataFault()

DataObject * TsDataSvc::handleDataFault ( IRegistry pReg,
std::string_view  path = {} 
)
protected

Invoke data fault handling if enabled.

Parameters
pReg[IN] Pointer to missing registry entry
path[IN] Sub-path of requested object from pReg
Returns
Object corresponding to the specified leaf

Definition at line 439 of file TsDataSvc.cpp.

439  {
440  if ( m_enableFaultHdlr ) {
441  IRegistry* pLeaf = nullptr;
442  if ( pReg && path.empty() ) {
443  DataIncident incident( name(), m_faultName, pReg->identifier() );
444  m_incidentSvc->fireIncident( incident );
445  return pReg->object();
446  } else if ( pReg ) {
447  std::string p = pReg->identifier();
448  if ( path.front() != SEPARATOR ) p += SEPARATOR;
449  p.append( path.data(), path.size() );
450  DataIncident incident( name(), m_faultName, p );
451  m_incidentSvc->fireIncident( incident );
452  pLeaf = m_root->findLeaf( p );
453  } else {
455  if ( path.front() != SEPARATOR ) p += SEPARATOR;
456  p.append( path.data(), path.size() );
457  DataIncident incident( name(), m_faultName, p );
458  m_incidentSvc->fireIncident( incident );
459  pLeaf = m_root->findLeaf( p );
460  }
461  if ( pLeaf ) return pLeaf->object();
462  }
463  return nullptr;
464 }
constexpr char SEPARATOR
RegistryEntry * findLeaf(std::string_view path) const
Find identified leaf in this registry node.
STL class.
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:284
virtual void fireIncident(const Incident &incident)=0
Fire an Incident.
IIncidentSvc * m_incidentSvc
Pointer to incident service.
Definition: TsDataSvc.h:81
T append(T... args)
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:32
const std::string & identifier() const override
Full identifier (or key)
virtual DataObject * object() const =0
Retrieve object behind the link.
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
virtual const id_type & identifier() const =0
Full identifier (or key)
Data service incident class.
Gaudi::Property< bool > m_enableFaultHdlr
Definition: TsDataSvc.h:88
Gaudi::Property< std::string > m_faultName
Definition: TsDataSvc.h:90

◆ i_setRoot() [1/4]

StatusCode TsDataSvc::i_setRoot ( std::string  root_path,
DataObject pRootObj 
)
virtual

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

Does not clear the store before reinitializing it. This could lead to errors and should be handle with care. Use setRoot if unsure

Definition at line 159 of file TsDataSvc.cpp.

159  {
160  if ( pRootObj ) {
161  m_root = std::make_unique<RegEntry>( std::move( root_path ) );
162  m_root->makeHard( pRootObj );
163  m_root->setDataSvc( this );
164  // No done with GaudiHive. preLoad().ignore();
165  }
166  return StatusCode::SUCCESS;
167 }
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
void setDataSvc(IDataProviderSvc *s)
Set the transient data store.
Definition: RegistryEntry.h:99
T move(T... args)
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
void makeHard(DataObject *pObject)
Initialize link as hard link.

◆ i_setRoot() [2/4]

StatusCode TsDataSvc::i_setRoot ( DataObject pRootObj)
inline

Definition at line 169 of file TsDataSvc.h.

169 { return i_setRoot( m_rootName, pRootObj ); }
virtual StatusCode i_setRoot(std::string root_name, DataObject *pRootObj)
Initialize data store for new event by giving new event path and root object.
Definition: TsDataSvc.cpp:159
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:84

◆ i_setRoot() [3/4]

StatusCode TsDataSvc::i_setRoot ( std::string  root_path,
IOpaqueAddress pRootAddr 
)
virtual

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

Does not clear the store before reinitializing it. This could lead to errors and should be handle with care. Use setRoot if unsure

Definition at line 183 of file TsDataSvc.cpp.

183  {
184  if ( pRootAddr ) {
185  m_root = std::make_unique<RegEntry>( std::move( root_path ) );
186  m_root->makeHard( pRootAddr );
187  m_root->setDataSvc( this );
188  // Not done with GaudiHive. preLoad().ignore();
189  }
190  return StatusCode::SUCCESS;
191 }
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
void setDataSvc(IDataProviderSvc *s)
Set the transient data store.
Definition: RegistryEntry.h:99
T move(T... args)
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
void makeHard(DataObject *pObject)
Initialize link as hard link.

◆ i_setRoot() [4/4]

StatusCode TsDataSvc::i_setRoot ( IOpaqueAddress pRootAddr)
inline

Definition at line 180 of file TsDataSvc.h.

180 { return i_setRoot( m_rootName, pRootAddr ); }
virtual StatusCode i_setRoot(std::string root_name, DataObject *pRootObj)
Initialize data store for new event by giving new event path and root object.
Definition: TsDataSvc.cpp:159
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:84

◆ initialize()

StatusCode TsDataSvc::initialize ( )
override

Service initialization.

Definition at line 813 of file TsDataSvc.cpp.

813  {
814  // Nothing to do: just call base class initialisation
816  if ( !sc.isSuccess() ) return sc;
817  sc = service( "IncidentSvc", m_incidentSvc, true );
818  if ( UNLIKELY( !sc.isSuccess() ) ) { error() << "Failed to access incident service." << endmsg; }
819  return sc;
820 }
#define UNLIKELY(x)
Definition: Kernel.h:106
StatusCode initialize() override
Definition: Service.cpp:70
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
IIncidentSvc * m_incidentSvc
Pointer to incident service.
Definition: TsDataSvc.h:81
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
StatusCode service(const std::string &name, const T *&psvc, bool createIf=true) const
Access a service by name, creating it if it doesn't already exist.
Definition: Service.h:93
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202

◆ linkObject() [1/6]

StatusCode IDataProviderSvc::linkObject
inline

Add a link to another object.

Both objects must already be registered with the data store. Once linked, the object can only be unregistered after unlinking.

Parameters
fromPathPath to the object the link originates.
objPathPath of the entry to be linked relative to from.
toObjPointer to the object the link points to.
Returns
Status code indicating success or failure.

Definition at line 489 of file IDataProviderSvc.h.

489  {
490  DataObject* pO = nullptr;
491  StatusCode status = retrieveObject( fromPath, pO );
492  return status.isSuccess() ? linkObject( pO->registry(), objPath, toObj ) : status;
493  }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:624
StatusCode linkObject(IRegistry *from, std::string_view objPath, DataObject *to) override
Add a link to another object.
Definition: TsDataSvc.cpp:697
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40

◆ linkObject() [2/6]

virtual StatusCode IDataProviderSvc::linkObject

Add a link to another object.

Both objects must already be registered with the data store. Once linked, the object can only be unregistered after unlinking.

Parameters
fromPointer to data directory the link originates.
objPathPath of the entry to be linked relative to from.
toObjPointer to the object the link points to.
Returns
Status code indicating success or failure.

◆ linkObject() [3/6]

StatusCode IDataProviderSvc::linkObject
inline

Add a link to another object.

Both objects must already be registered with the data store. Once linked, the object can only be unregistered after unlinking.

Parameters
fromObjPointer to the object the link originates.
objPathPath of the entry to be linked relative to from.
toObjPointer to the object the link points to.
Returns
Status code indicating success or failure.

Definition at line 590 of file IDataProviderSvc.h.

590  {
591  if ( fromObj ) {
592  IRegistry* from_entry = fromObj->registry();
593  if ( from_entry ) return linkObject( from_entry, objPath, toObj );
594  }
595  return Status::INVALID_PARENT;
596 }
StatusCode linkObject(IRegistry *from, std::string_view objPath, DataObject *to) override
Add a link to another object.
Definition: TsDataSvc.cpp:697
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:32

◆ linkObject() [4/6]

virtual StatusCode IDataProviderSvc::linkObject

Add a link to another object.

Both objects must already be registered with the data store. Once linked, the object can only be unregistered after unlinking.

Parameters
fullPathFull path of the entry to be linked.
toObjPointer to the object the link points to.
Returns
Status code indicating success or failure.

◆ linkObject() [5/6]

StatusCode TsDataSvc::linkObject ( IRegistry from,
std::string_view  objPath,
DataObject to 
)
override

Add a link to another object.

Definition at line 697 of file TsDataSvc.cpp.

697  {
699  if ( !checkRoot() ) return Status::INVALID_ROOT;
700  try {
701  RegEntry* from_entry = CAST_REGENTRY( RegEntry*, from );
702  if ( from_entry ) {
703  // First check if both objects are already registered to the store
704  RegEntry* to_entry = m_root->findLeaf( to );
705  if ( !to_entry ) return Status::INVALID_OBJECT;
706  auto sep = objPath.rfind( SEPARATOR );
707  if ( sep > 0 && sep != std::string_view::npos ) { // in case the objPath is a sub-directory itself
708  DataObject* pO = nullptr;
709  StatusCode sc = retrieveObject( from, objPath.substr( 0, sep ), pO );
710  return sc.isSuccess() ? linkObject( pO->registry(), objPath.substr( sep ), to ) : sc;
711  }
712  // Now register the soft link
713  StatusCode status = from_entry->add( std::string{objPath}, to, true );
714  return status.isSuccess() ? Status::IDataProviderSvc_NO_ERROR : Status::DOUBL_OBJ_PATH;
715  }
716  } catch ( ... ) {}
717  return Status::INVALID_PARENT;
718 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
constexpr char SEPARATOR
RegistryEntry * findLeaf(std::string_view path) const
Find identified leaf in this registry node.
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:624
STL class.
StatusCode linkObject(IRegistry *from, std::string_view objPath, DataObject *to) override
Add a link to another object.
Definition: TsDataSvc.cpp:697
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
StatusCode add(std::string name, DataObject *pObject, bool is_soft=false)
Add entry to data store.
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:54
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75

◆ linkObject() [6/6]

StatusCode TsDataSvc::linkObject ( std::string_view  fullPath,
DataObject to 
)
override

Add a link to another object.

Definition at line 721 of file TsDataSvc.cpp.

721  {
722  if ( fullPath.empty() ) return Status::INVALID_OBJ_PATH;
723  if ( fullPath.front() == SEPARATOR ) {
724  auto sep = fullPath.rfind( SEPARATOR );
725  return linkObject( fullPath.substr( 0, sep ), fullPath.substr( sep ), to );
726  }
728  return linkObject( m_root.get(), fullPath, to );
729 }
constexpr char SEPARATOR
StatusCode linkObject(IRegistry *from, std::string_view objPath, DataObject *to) override
Add a link to another object.
Definition: TsDataSvc.cpp:697
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
T get(T... args)
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:54

◆ loadObject() [1/2]

StatusCode TsDataSvc::loadObject ( IRegistry pNode)
protectedvirtual

Invoke Persistency service to create transient object from its persistent representation.

Definition at line 469 of file TsDataSvc.cpp.

469  {
470  IConversionSvc* pLoader = getDataLoader( pRegistry );
471  return loadObject( pLoader, pRegistry );
472 }
virtual IConversionSvc * getDataLoader(IRegistry *pReg)
Retrieve customizable data loader according to registry entry to be retrieved.
Definition: TsDataSvc.cpp:874
virtual StatusCode loadObject(IRegistry *pNode)
Invoke Persistency service to create transient object from its persistent representation.
Definition: TsDataSvc.cpp:469

◆ loadObject() [2/2]

StatusCode TsDataSvc::loadObject ( IConversionSvc pLoader,
IRegistry pNode 
)
protectedvirtual

Invoke Persistency service to create transient object from its persistent representation.

Reimplemented in DetDataSvc.

Definition at line 477 of file TsDataSvc.cpp.

477  {
478  StatusCode status = Status::INVALID_OBJ_ADDR;
479  DataObject* pObject = nullptr;
481  if ( !pLoader ) { // Precondition: Data loader must be present
482  if ( handleDataFault( pRegistry ) )
483  return StatusCode::SUCCESS;
484  else
485  return Status::NO_DATA_LOADER;
486  }
487  if ( !pRegistry ) { // Precondition: Directory must be valid
488  if ( handleDataFault( pRegistry ) )
489  return StatusCode::SUCCESS;
490  else
491  return Status::INVALID_OBJ_ADDR;
492  }
493 
494  VERMSG << "Requested object " << pRegistry->identifier() << endmsg;
495 
496  if ( m_enableAccessHdlr ) {
497  // Fire data access incident
498  DataIncident incident( name(), m_accessName, pRegistry->identifier() );
499  m_incidentSvc->fireIncident( incident );
500  }
501  if ( !m_inhibitPathes.empty() ) {
502  const auto& ident = pRegistry->identifier();
503  auto inhibit = std::find( m_inhibitPathes.begin(), m_inhibitPathes.end(), ident );
504  if ( inhibit != m_inhibitPathes.end() ) return Status::NO_ACCESS;
505  }
506  IOpaqueAddress* pAddress = pRegistry->address();
507  if ( !pAddress ) { // Precondition:
508  return Status::INVALID_OBJ_ADDR; // Address must be valid
509  }
510  try {
511  status = pLoader->createObj( pAddress, pObject ); // Call data loader
512  if ( status.isSuccess() ) {
513 
514  VERMSG << "Object " << pRegistry->identifier() << " created" << endmsg;
515 
516  RegEntry* pEntry = CAST_REGENTRY( RegEntry*, pRegistry );
517  pEntry->setObject( pObject );
518 
519  VERMSG << "Filling object " << pRegistry->identifier() << endmsg;
520  status = pLoader->fillObjRefs( pAddress, pObject );
521  }
522  } catch ( const GaudiException& exc ) {
523  if ( handleDataFault( pRegistry ) ) return StatusCode::SUCCESS;
524  throw GaudiException( "GaudiException in loadObject() " + pRegistry->identifier(), name(), StatusCode::FAILURE,
525  exc );
526  } catch ( const std::exception& x ) {
527  if ( handleDataFault( pRegistry ) ) return StatusCode::SUCCESS;
528  throw GaudiException( "std::exception in loadObject() " + pRegistry->identifier() + ": " +
529  System::typeinfoName( typeid( x ) ) + ", " + x.what(),
531  } catch ( ... ) {
532  if ( handleDataFault( pRegistry ) ) return StatusCode::SUCCESS;
533  throw GaudiException( "UNKN exception in loadObject() " + pRegistry->identifier(), name(), StatusCode::FAILURE );
534  }
535  if ( !status.isSuccess() ) {
536  if ( handleDataFault( pRegistry ) ) return StatusCode::SUCCESS;
537  }
538  ON_VERBOSE if ( status.isSuccess() ) {
539  verbose() << "Object " << pRegistry->identifier() << " successfully loaded" << endmsg;
540  }
541  return status;
542 }
Define general base for Gaudi exception.
virtual StatusCode createObj(IOpaqueAddress *pAddress, DataObject *&refpObject)=0
Create the transient representation of an object.
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:308
Gaudi::Property< std::string > m_accessName
Definition: TsDataSvc.h:94
DataObject * handleDataFault(IRegistry *pReg, std::string_view path={})
Invoke data fault handling if enabled.
Definition: TsDataSvc.cpp:439
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
#define VERMSG
Definition: TsDataSvc.cpp:83
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:284
virtual void fireIncident(const Incident &incident)=0
Fire an Incident.
void setObject(DataObject *obj)
Set/Update object address.
IIncidentSvc * m_incidentSvc
Pointer to incident service.
Definition: TsDataSvc.h:81
#define ON_VERBOSE
Definition: TsDataSvc.cpp:80
T what(T... args)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
Gaudi::Property< bool > m_enableAccessHdlr
Definition: TsDataSvc.h:92
bool isSuccess() const
Definition: StatusCode.h:365
STL class.
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
T find(T... args)
virtual StatusCode fillObjRefs(IOpaqueAddress *pAddress, DataObject *pObject)=0
Resolve the references of the created transient object.
constexpr static const auto FAILURE
Definition: StatusCode.h:101
Data service incident class.
Opaque address interface definition.
Gaudi::Property< std::vector< std::string > > m_inhibitPathes
Definition: TsDataSvc.h:86
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:54
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202

◆ objectLeaves() [1/2]

StatusCode TsDataSvc::objectLeaves ( const DataObject pObject,
std::vector< IRegistry * > &  refLeaves 
)
override

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

IDataManagerSvc: Explore an object identified by its pointer.

Definition at line 218 of file TsDataSvc.cpp.

218  {
219  if ( !pObject ) return Status::INVALID_OBJECT;
220  return objectLeaves( pObject->registry(), leaves );
221 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
StatusCode objectLeaves(const DataObject *pObject, std::vector< IRegistry * > &refLeaves) override
IDataManagerSvc: Explore the object store: retrieve all leaves attached to the object.
Definition: TsDataSvc.cpp:218

◆ objectLeaves() [2/2]

StatusCode TsDataSvc::objectLeaves ( const IRegistry pRegistry,
std::vector< IRegistry * > &  refLeaves 
)
override

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

IDataManagerSvc: Explore an object identified by the pointer to the registry entry.

Definition at line 226 of file TsDataSvc.cpp.

226  {
227  if ( !pRegistry ) return Status::INVALID_OBJECT;
228  const RegEntry* node_entry = CAST_REGENTRY( const RegEntry*, pRegistry );
229  if ( !node_entry ) return Status::INVALID_OBJECT;
231  leaves.insert( leaves.end(), node_entry->leaves().begin(), node_entry->leaves().end() );
232  // leaves = node_entry->leaves();
233  return StatusCode::SUCCESS;
234 }
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
T end(T... args)
const Store & leaves() const
Access the leaves of the object.
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
T begin(T... args)
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:54
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75

◆ objectParent() [1/2]

StatusCode TsDataSvc::objectParent ( const DataObject pObject,
IRegistry *&  refpParent 
)
override

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

Definition at line 203 of file TsDataSvc.cpp.

203  {
204  if ( !pObject ) return Status::INVALID_OBJECT;
205  return objectParent( pObject->registry(), refpParent );
206 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
StatusCode objectParent(const DataObject *pObject, IRegistry *&refpParent) override
IDataManagerSvc: Explore the object store: retrieve the object's parent.
Definition: TsDataSvc.cpp:203

◆ objectParent() [2/2]

StatusCode TsDataSvc::objectParent ( const IRegistry pRegistry,
IRegistry *&  refpParent 
)
override

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

Definition at line 208 of file TsDataSvc.cpp.

208  {
210  if ( !checkRoot() ) return Status::INVALID_ROOT;
211  const RegEntry* node_entry = CAST_REGENTRY( const RegEntry*, pRegistry );
212  if ( !node_entry ) return Status::INVALID_OBJECT;
213  refpParent = node_entry->parent();
214  return StatusCode::SUCCESS;
215 }
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
IRegistry * parent() const
Pointer to parent directory entry.
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:54
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75

◆ operator=()

TsDataSvc& TsDataSvc::operator= ( const TsDataSvc )
delete

no assignment operator

◆ preLoad() [1/2]

StatusCode TsDataSvc::preLoad ( int  depth,
int  load_depth,
DataObject pObject 
)
virtual

Execute one level of preloading and recursively load until the final level is reached.

Preload one level deep, then recursively call the next level.

Parameters
depthcurrent level of loading from requested parent
load_depthmaximum level of object loading
pObjectpointer to next level root object
Returns
Status code indicating success or failure.

Definition at line 786 of file TsDataSvc.cpp.

786  {
787  // unused: StatusCode sc = StatusCode::FAILURE;
788  if ( pObject && depth++ < load_depth ) {
789  RegEntry* dir = CAST_REGENTRY( RegEntry*, pObject->registry() );
790  if ( dir ) {
791  for ( const auto& i : *dir ) {
792  DataObject* pObj = nullptr;
793  StatusCode status = retrieveObject( pObject, i->name(), pObj );
794  if ( status.isSuccess() && depth < load_depth ) { preLoad( depth, load_depth, pObj ).ignore(); }
795  }
796  }
797  }
798  return StatusCode::SUCCESS;
799 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:624
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
StatusCode preLoad() override
load all preload items of the list
Definition: TsDataSvc.cpp:802
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:168
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75

◆ preLoad() [2/2]

StatusCode TsDataSvc::preLoad ( )
override

load all preload items of the list

Definition at line 802 of file TsDataSvc.cpp.

802  {
803  DataObject* pObj = nullptr;
804  for ( const auto& i : m_preLoads ) {
805  StatusCode sc = retrieveObject( i.path(), pObj );
806  int load_depth = i.depth();
807  if ( sc.isSuccess() && load_depth > 1 ) { preLoad( 1, load_depth, pObj ).ignore(); }
808  }
809  return StatusCode::SUCCESS;
810 }
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:624
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
StatusCode preLoad() override
load all preload items of the list
Definition: TsDataSvc.cpp:802
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:168
std::vector< DataStoreItem > m_preLoads
Items to be pre-loaded.
Definition: TsDataSvc.h:97
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40

◆ registerAddress() [1/5]

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

IDataManagerSvc: Register object address with the data store.

Definition at line 237 of file TsDataSvc.cpp.

237  {
238  if ( fullPath.empty() ) return Status::INVALID_OBJ_PATH;
239  return registerAddress( fullPath.front() != SEPARATOR ? m_root.get() : nullptr, fullPath, pAddress );
240 }
constexpr char SEPARATOR
StatusCode registerAddress(std::string_view fullPath, IOpaqueAddress *pAddress) override
IDataManagerSvc: Register object address with the data store.
Definition: TsDataSvc.cpp:237
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
T get(T... args)

◆ registerAddress() [2/5]

virtual StatusCode IDataManagerSvc::registerAddress

Register object address with the data store.

Connect the object identified by its pointer to the node object identified by its path.

Parameters
fullPath[IN] Path to parent node of the object.
pAddress[IN] Pointer to the object to be registered.
Returns
Status code indicating success or failure.

◆ registerAddress() [3/5]

StatusCode IDataManagerSvc::registerAddress
inline

Register object address with the data store.

Connect the object identified by its pointer to the parent object and the relative path of the object with respect to the parent.

Parameters
parentObj[IN] Pointer to parent object.
objectPath[IN] Path of the object relative to the parent node
pAddress[IN] Pointer to the object to be connected.
Returns
Status code indicating success or failure.

Definition at line 215 of file IDataManagerSvc.h.

215  {
216  return registerAddress( parentObj ? parentObj->registry() : nullptr, objectPath, pAddress );
217  }
StatusCode registerAddress(std::string_view fullPath, IOpaqueAddress *pAddress) override
IDataManagerSvc: Register object address with the data store.
Definition: TsDataSvc.cpp:237

◆ registerAddress() [4/5]

virtual StatusCode IDataManagerSvc::registerAddress

Register object address with the data store.

Connect the object identified by its pointer to the parent object and the relative path of the object with respect to the parent.

Parameters
parentObj[IN] Pointer to parent object.
objectPath[IN] Path of the object relative to the parent node
pAddress[IN] Pointer to the object to be connected.
Returns
Status code indicating success or failure.

◆ registerAddress() [5/5]

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

IDataManagerSvc: Register object address with the data store.

Definition at line 243 of file TsDataSvc.cpp.

243  {
244  if ( !checkRoot() ) return Status::INVALID_ROOT;
245  if ( objPath.empty() ) return Status::INVALID_OBJ_PATH;
246  if ( !parentObj ) {
247  if ( objPath.front() != SEPARATOR ) { return registerAddress( m_root.get(), objPath, pAddress ); }
248  auto sep = find( objPath, SEPARATOR, 1 );
249  if ( sep == std::string_view::npos || objPath.substr( 0, sep ) != m_rootName.value() ) {
250  return Status::INVALID_PARENT;
251  }
252  return registerAddress( m_root.get(), objPath.substr( sep ), pAddress );
253  }
254  if ( objPath.front() != SEPARATOR ) { return registerAddress( parentObj, SEPARATOR + objPath, pAddress ); }
255  RegEntry* par_entry = CAST_REGENTRY( RegEntry*, parentObj );
256  if ( !par_entry ) return Status::INVALID_PARENT;
257  auto sep = objPath.rfind( SEPARATOR );
258  if ( sep > 0 && sep != std::string_view::npos ) {
259  auto p_path = objPath.substr( 0, sep );
260  auto o_path = objPath.substr( sep );
261  RegEntry* p_entry = par_entry->findLeaf( p_path );
262  // Create default object leafs if the
263  // intermediate nodes are not present
264  if ( !p_entry && m_forceLeaves ) {
265  DataObject* pLeaf = createDefaultObject();
266  StatusCode sc = registerObject( par_entry->identifier(), p_path, pLeaf );
267  if ( !sc.isSuccess() ) delete pLeaf;
268  p_entry = par_entry->findLeaf( p_path );
269  }
270  if ( !p_entry ) return Status::INVALID_PARENT;
271  return registerAddress( p_entry, o_path, pAddress );
272  }
273  StatusCode status = par_entry->add( std::string{objPath}, pAddress );
274  return status.isSuccess() ? status : Status::DOUBL_OBJ_PATH;
275 }
constexpr char SEPARATOR
RegistryEntry * findLeaf(std::string_view path) const
Find identified leaf in this registry node.
StatusCode registerObject(std::string_view parentPath, std::string_view objPath, DataObject *pObject) override
Register object with the data store.
Definition: TsDataSvc.cpp:313
STL class.
virtual DataObject * createDefaultObject() const
Create default objects in case forced creation of leaves is requested.
Definition: TsDataSvc.cpp:869
StatusCode registerAddress(std::string_view fullPath, IOpaqueAddress *pAddress) override
IDataManagerSvc: Register object address with the data store.
Definition: TsDataSvc.cpp:237
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
const std::string & identifier() const override
Full identifier (or key)
bool isSuccess() const
Definition: StatusCode.h:365
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
T get(T... args)
T find(T... args)
StatusCode add(std::string name, DataObject *pObject, bool is_soft=false)
Add entry to data store.
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282
Gaudi::Property< bool > m_forceLeaves
Definition: TsDataSvc.h:85
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:84

◆ registerObject() [1/7]

virtual StatusCode IDataProviderSvc::registerObject

Register object with the data store.

Connect the object identified by its pointer to the parent object and the relative path of the object with respect to the parent.

Parameters
parentObjPointer to parent object.
objectPathPath of the object relative to the parent node
pObjectPointer to the object to be connected.
Returns
Status code indicating success or failure.

◆ registerObject() [2/7]

StatusCode IDataProviderSvc::registerObject
inline

Register object with the data store.

Connect the object identified by its pointer to the node object identified by its pointer.

Parameters
parentObjPointer to parent object.
itemitem number of the object linked to the parent
pObjectPointer to the object to be connected.
Returns
Status code indicating success or failure.

Definition at line 117 of file IDataProviderSvc.h.

117  {
118  return registerObject( parentObj, itemToPath( item ), pObject );
119  }
StatusCode registerObject(std::string_view parentPath, std::string_view objPath, DataObject *pObject) override
Register object with the data store.
Definition: TsDataSvc.cpp:313

◆ registerObject() [3/7]

StatusCode IDataProviderSvc::registerObject
inline

Register object with the data store.

Connect the object identified by its pointer to the parent object and an integer identifier.

Parameters
parentPathPath to parent node of the object.
itemitem number of the object linked to the parent
pObjectPointer to the object to be registered.
Returns
Status code indicating success or failure.

Definition at line 95 of file IDataProviderSvc.h.

95  {
96  return registerObject( parentPath, itemToPath( item ), pObject );
97  }
StatusCode registerObject(std::string_view parentPath, std::string_view objPath, DataObject *pObject) override
Register object with the data store.
Definition: TsDataSvc.cpp:313

◆ registerObject() [4/7]

StatusCode IDataProviderSvc::registerObject
inline

Register object with the data store.

Connect the object identified by its pointer to the node object identified by its path.

Parameters
fullPathPath to parent node of the object.
pObjectPointer to the object to be registered.
Returns
Status code indicating success or failure.

Definition at line 72 of file IDataProviderSvc.h.

72  {
73  return registerObject( nullptr, fullPath, pObject );
74  }
StatusCode registerObject(std::string_view parentPath, std::string_view objPath, DataObject *pObject) override
Register object with the data store.
Definition: TsDataSvc.cpp:313

◆ registerObject() [5/7]

virtual StatusCode IDataProviderSvc::registerObject

Register object with the data store.

Connect the object identified by the path to the parent object and the path of the object itself relative to the specified parent.

Parameters
parentPathPath to parent node of the object.
objectPathPath of the object relative to the parent node
pObjectPointer to the object to be registered.
Returns
Status code indicating success or failure.

◆ registerObject() [6/7]

StatusCode TsDataSvc::registerObject ( std::string_view  parentPath,
std::string_view  objPath,
DataObject pObject 
)
override

Register object with the data store.

Definition at line 313 of file TsDataSvc.cpp.

313  {
314  DataObject* pO = nullptr;
315  StatusCode status = retrieveObject( parentPath, pO );
316  if ( !status.isSuccess() && m_forceLeaves ) {
317  pO = createDefaultObject();
318  status = registerObject( parentPath, pO );
319  if ( !status.isSuccess() ) pO->release();
320  }
321  return status.isSuccess() ? registerObject( pO, objPath, pObject ) : status;
322 }
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:624
StatusCode registerObject(std::string_view parentPath, std::string_view objPath, DataObject *pObject) override
Register object with the data store.
Definition: TsDataSvc.cpp:313
virtual DataObject * createDefaultObject() const
Create default objects in case forced creation of leaves is requested.
Definition: TsDataSvc.cpp:869
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
virtual unsigned long release()
release reference to object
Definition: DataObject.cpp:56
Gaudi::Property< bool > m_forceLeaves
Definition: TsDataSvc.h:85
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40

◆ registerObject() [7/7]

StatusCode TsDataSvc::registerObject ( DataObject parentObj,
std::string_view  objPath,
DataObject pObject 
)
override

Register object with the data store.

Definition at line 325 of file TsDataSvc.cpp.

325  {
326  if ( !checkRoot() ) return Status::INVALID_ROOT;
327  if ( !parentObj ) {
328  if ( !objPath.empty() ) {
329  if ( objPath.front() != SEPARATOR ) { return registerObject( m_rootName.value(), objPath, pObject ); }
330  auto sep = find( objPath, SEPARATOR, 1 );
331  if ( sep != std::string_view::npos ) {
332  return registerObject( objPath.substr( 0, sep ), objPath.substr( sep ), pObject );
333  }
334  }
335  return Status::INVALID_OBJ_PATH;
336  }
337  RegEntry* node_entry = CAST_REGENTRY( RegEntry*, parentObj->registry() );
338  if ( node_entry ) {
339  StatusCode status = Status::INVALID_PARENT;
340  auto sep = find( objPath, SEPARATOR, 1 );
341  if ( sep != std::string_view::npos ) {
342  auto p_path = objPath.substr( 0, sep );
343  auto o_path = objPath.substr( sep );
344  RegEntry* par_entry = node_entry->findLeaf( p_path );
345  // Create default object leafs if the
346  // intermediate nodes are not present
347  if ( !par_entry && m_forceLeaves ) {
348  DataObject* pLeaf = createDefaultObject();
349  StatusCode sc = registerObject( parentObj, p_path, pLeaf );
350  if ( !sc.isSuccess() ) delete pLeaf;
351  par_entry = node_entry->findLeaf( p_path );
352  } else if ( par_entry && !par_entry->object() ) {
353  status = retrieveEntry( node_entry, p_path, par_entry );
354  if ( !status.isSuccess() && !par_entry->address() && m_forceLeaves ) {
355  DataObject* pLeaf = createDefaultObject();
356  StatusCode sc = registerObject( parentObj, p_path, pLeaf );
357  if ( !sc.isSuccess() ) delete pLeaf;
358  par_entry = node_entry->findLeaf( p_path );
359  }
360  }
361  node_entry = par_entry;
362  if ( node_entry ) {
363  DataObject* obj = node_entry->object();
364  if ( obj ) status = registerObject( obj, o_path, pObject );
365  }
366  } else {
367  RegEntry* leaf = node_entry->findLeaf( objPath );
368  if ( !leaf ) {
369  status = node_entry->add( std::string{objPath}, pObject );
370  } else {
371  DataObject* obj = leaf->object();
372  if ( !obj ) {
373  if ( !pObject ) {
374  error() << "registerObject: trying to register null DataObject" << endmsg;
375  return StatusCode::FAILURE;
376  } else {
377  pObject->setRegistry( leaf );
378  }
379  leaf->setAddress( nullptr );
380  leaf->setObject( pObject );
381  status = StatusCode::SUCCESS;
382  } else {
383  status = Status::DOUBL_OBJ_PATH;
384  }
385  }
386  }
387  return status;
388  }
389  return Status::INVALID_PARENT;
390 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
constexpr char SEPARATOR
RegistryEntry * findLeaf(std::string_view path) const
Find identified leaf in this registry node.
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
void setRegistry(IRegistry *pRegistry)
Set pointer to Registry.
Definition: DataObject.h:80
void setAddress(IOpaqueAddress *pAddress) override
Set/Update Opaque address.
StatusCode registerObject(std::string_view parentPath, std::string_view objPath, DataObject *pObject) override
Register object with the data store.
Definition: TsDataSvc.cpp:313
STL class.
virtual DataObject * createDefaultObject() const
Create default objects in case forced creation of leaves is requested.
Definition: TsDataSvc.cpp:869
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
void setObject(DataObject *obj)
Set/Update object address.
IOpaqueAddress * address() const override
Retrieve opaque storage address.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
StatusCode retrieveEntry(DataSvcHelpers::RegistryEntry *pNode, std::string_view path, DataSvcHelpers::RegistryEntry *&pEntry)
Retrieve registry entry from store.
Definition: TsDataSvc.cpp:545
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
T find(T... args)
StatusCode add(std::string name, DataObject *pObject, bool is_soft=false)
Add entry to data store.
DataObject * object() const override
Retrive object behind the link.
constexpr static const auto FAILURE
Definition: StatusCode.h:101
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282
Gaudi::Property< bool > m_forceLeaves
Definition: TsDataSvc.h:85
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:84

◆ reinitialize()

StatusCode TsDataSvc::reinitialize ( )
override

Service initialization.

Service reinitialization.

Definition at line 823 of file TsDataSvc.cpp.

823  {
824  StatusCode sc;
825  // the finalize part is copied here
826  setDataLoader( nullptr ).ignore();
827  resetPreLoad().ignore();
828  clearStore().ignore();
829  if ( m_incidentSvc ) {
831  m_incidentSvc = nullptr;
832  }
833  // re-initialize the base class
834  sc = Service::reinitialize();
835  if ( UNLIKELY( !sc.isSuccess() ) ) {
836  error() << "Unable to reinitialize base class" << endmsg;
837  return sc;
838  }
839  // the initialize part is copied here
840  sc = service( "IncidentSvc", m_incidentSvc, true );
841  if ( UNLIKELY( !sc.isSuccess() ) ) {
842  error() << "Failed to access incident service." << endmsg;
843  return sc;
844  }
845  // return
846  return StatusCode::SUCCESS;
847 }
#define UNLIKELY(x)
Definition: Kernel.h:106
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
StatusCode setDataLoader(IConversionSvc *svc, IDataProviderSvc *dpsvc=nullptr) override
IDataManagerSvc: IDataManagerSvc: Pass a default data loader to the service and optionally a data pro...
Definition: TsDataSvc.cpp:194
StatusCode resetPreLoad() override
Clear the preload list.
Definition: TsDataSvc.cpp:780
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
IIncidentSvc * m_incidentSvc
Pointer to incident service.
Definition: TsDataSvc.h:81
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
StatusCode reinitialize() override
Definition: Service.cpp:247
bool isSuccess() const
Definition: StatusCode.h:365
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:168
virtual unsigned long release()=0
Release Interface instance.
StatusCode service(const std::string &name, const T *&psvc, bool createIf=true) const
Access a service by name, creating it if it doesn't already exist.
Definition: Service.h:93
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
Definition: TsDataSvc.cpp:114
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202

◆ removePreLoadItem()

StatusCode TsDataSvc::removePreLoadItem ( const DataStoreItem item)
override

Remove an item from the preload list.

Definition at line 773 of file TsDataSvc.cpp.

773  {
774  auto i = std::remove( m_preLoads.begin(), m_preLoads.end(), item );
775  m_preLoads.erase( i, m_preLoads.end() );
776  return StatusCode::SUCCESS;
777 }
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
T end(T... args)
T remove(T... args)
T erase(T... args)
T begin(T... args)
std::vector< DataStoreItem > m_preLoads
Items to be pre-loaded.
Definition: TsDataSvc.h:97

◆ resetPreLoad()

StatusCode TsDataSvc::resetPreLoad ( )
override

Clear the preload list.

Definition at line 780 of file TsDataSvc.cpp.

780  {
781  m_preLoads.clear();
782  return StatusCode::SUCCESS;
783 }
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
T clear(T... args)
std::vector< DataStoreItem > m_preLoads
Items to be pre-loaded.
Definition: TsDataSvc.h:97

◆ retrieveEntry()

StatusCode TsDataSvc::retrieveEntry ( DataSvcHelpers::RegistryEntry pNode,
std::string_view  path,
DataSvcHelpers::RegistryEntry *&  pEntry 
)
protected

Retrieve registry entry from store.

Definition at line 545 of file TsDataSvc.cpp.

545  {
546  auto sep = find( path, SEPARATOR, 1 );
547  StatusCode status = StatusCode( Status::INVALID_ROOT, true );
548  pEntry = nullptr;
550  // A.Valassi 16.08.2001 avoid core dump if store is empty
551  if ( checkRoot() ) {
552  if ( !parentObj ) {
553  if ( path.empty() || path == m_rootName ) return retrieveEntry( m_root.get(), "", pEntry );
554  if ( path.front() != SEPARATOR ) return retrieveEntry( m_root.get(), path, pEntry );
555  if ( sep == std::string_view::npos ) return Status::INVALID_OBJ_PATH;
556  if ( !m_root->object() ) {
557  RegEntry* r = nullptr;
558  status = retrieveEntry( m_root.get(), "", r );
559  if ( !status.isSuccess() ) return status;
560  }
561  return retrieveEntry( m_root.get(), path.substr( sep ), pEntry );
562  }
563  if ( sep != std::string_view::npos ) { // the string contains a separator (after pos 0)
564  auto p_path = path.substr( 0, sep );
565  auto o_path = path.substr( sep );
566  if ( !parentObj->object() ) { // if the parent object has not been loaded yet, load it now
567  status = loadObject( parentObj );
568  if ( !status.isSuccess() ) return status;
569  }
570  RegEntry* root_entry = parentObj->findLeaf( p_path );
571  if ( !root_entry && m_enableFaultHdlr ) {
572  // If not even the parent is there, an incident
573  // to load the parent must be fired...
574  handleDataFault( parentObj, p_path );
575  root_entry = parentObj->findLeaf( p_path );
576  }
577  if ( root_entry ) {
578  DataObject* pO = root_entry->object();
579  if ( !pO ) {
580  // Object is not loaded: load the object if at all possible
581  status = loadObject( root_entry );
582  if ( !status.isSuccess() ) return status;
583  }
584  if ( root_entry->isSoft() ) { root_entry = CAST_REGENTRY( RegEntry*, pO->registry() ); }
585  return retrieveEntry( root_entry, o_path, pEntry );
586  }
587  return status;
588  } else if ( path.empty() ) {
589  pEntry = parentObj;
590  } else {
591  if ( !parentObj->object() ) { // if the parent object has not been loaded yet, load it now
592  status = loadObject( parentObj );
593  if ( !status.isSuccess() ) return status;
594  }
595  // last leave in search: find leaf and load
596  pEntry = parentObj->findLeaf( path );
597  // If no registry entry was found, trigger incident for action-on-demand
598  if ( !pEntry && m_enableFaultHdlr ) {
599  handleDataFault( parentObj, path );
600  pEntry = ( path.empty() ? parentObj : parentObj->findLeaf( path ) );
601  }
602  }
603  // Check results and return
604  if ( !pEntry ) {
605  status = Status::INVALID_OBJ_PATH;
606  } else if ( !pEntry->object() ) {
607  status = loadObject( pEntry );
608  } else if ( m_enableAccessHdlr ) {
609  // Fire data access incident
610  // I do not know if this is a good idea....
611  // This fires too often!
612  //
613  // DataIncident incident(name(), m_accessName, pEntry->identifier());
614  // m_incidentSvc->fireIncident(incident);
615  status = StatusCode::SUCCESS;
616  } else {
617  status = StatusCode::SUCCESS;
618  }
619  }
620  return status;
621 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
constexpr char SEPARATOR
DataObject * handleDataFault(IRegistry *pReg, std::string_view path={})
Invoke data fault handling if enabled.
Definition: TsDataSvc.cpp:439
RegistryEntry * findLeaf(std::string_view path) const
Find identified leaf in this registry node.
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
Gaudi::Property< bool > m_enableAccessHdlr
Definition: TsDataSvc.h:92
bool isSuccess() const
Definition: StatusCode.h:365
StatusCode retrieveEntry(DataSvcHelpers::RegistryEntry *pNode, std::string_view path, DataSvcHelpers::RegistryEntry *&pEntry)
Retrieve registry entry from store.
Definition: TsDataSvc.cpp:545
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
T get(T... args)
T find(T... args)
DataObject * object() const override
Retrive object behind the link.
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282
bool isSoft() const
Is the link soft or hard.
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:54
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75
virtual StatusCode loadObject(IRegistry *pNode)
Invoke Persistency service to create transient object from its persistent representation.
Definition: TsDataSvc.cpp:469
Gaudi::Property< bool > m_enableFaultHdlr
Definition: TsDataSvc.h:88
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:84

◆ retrieveObject() [1/7]

virtual StatusCode IDataProviderSvc::retrieveObject

Retrieve object identified by its directory entry.

The result will be returned in the second argument. In case the object is not present it will be loaded and converted if possible. ** FASTEST ACCESS TO THE DATA STORE **

Parameters
pDirectoryPointer to the object.
pathString with relative path to directory. Ideally ""!
pObjectReference to the pointer of the object to be returned.
Returns
Status code indicating success or failure.

◆ retrieveObject() [2/7]

StatusCode IDataProviderSvc::retrieveObject
inline

Retrieve object from data store.

The object to be retrieved is identified by the path of the parent object and the relative path with respect to the node. In case the object is not present it will be loaded and converted if possible.

Parameters
parentPathPath to parent node of the object.
objectPathPath of the object relative to the parent.
pObjectReference to the pointer of the object to be returned.
Returns
Status code indicating success or failure.

Definition at line 257 of file IDataProviderSvc.h.

257  {
258  DataObject* parent = nullptr;
259  StatusCode status = retrieveObject( parentPath, parent );
260  return status.isSuccess() ? retrieveObject( parent, objectPath, pObject ) : status;
261  }
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:624
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
const Gaudi::Algorithm & parent
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40

◆ retrieveObject() [3/7]

StatusCode IDataProviderSvc::retrieveObject
inline

Retrieve object from data store.

The object to be retrieved is identified by the path to the parent object and an integer identifier. In case the object is not present it will be loaded and converted if possible.

Parameters
parentPathPath to parent node of the object.
itemItem identifier.
pObjectReference to the pointer of the object to be returned.
Returns
Status code indicating success or failure.

Definition at line 273 of file IDataProviderSvc.h.

273  {
274  return retrieveObject( parentPath, itemToPath( item ), pObject );
275  }
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:624

◆ retrieveObject() [4/7]

StatusCode IDataProviderSvc::retrieveObject
inline

Retrieve object identified by its full path from the data store.

The result will be returned in the second argument. In case the object is not present it will be loaded and converted if possible.

Parameters
fullPathPath name of the object.
pObjectReference to the pointer of the object to be returned.
Returns
Status code indicating success or failure.

Definition at line 243 of file IDataProviderSvc.h.

243  {
244  return retrieveObject( static_cast<IRegistry*>( nullptr ), fullPath, pObject );
245  }
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:624

◆ retrieveObject() [5/7]

StatusCode IDataProviderSvc::retrieveObject
inline

Retrieve object from data store.

The object to be retrieved is identified by the pointer to the parent object and the relative path with respect to the node. In case the object is not present it will be loaded and converted if possible.

Parameters
parentObjPointer to parent node of the object.
objectPathPath of the object relative to the parent.
pObjectReference to the pointer of the object to be returned.
Returns
Status code indicating success or failure.

Definition at line 287 of file IDataProviderSvc.h.

287  {
288  return retrieveObject( parentObj ? parentObj->registry() : nullptr, objectPath, pObject );
289  }
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:624

◆ retrieveObject() [6/7]

StatusCode IDataProviderSvc::retrieveObject
inline

Retrieve object from data store.

The object to be retrieved is identified by the pointer to the parent object and an integer identifier. In case the object is not present it will be loaded and converted if possible.

Parameters
parentObjPointer to parent node of the object.
itemItem identifier.
pObjectReference to the pointer of the object to be returned.
Returns
Status code indicating success or failure.

Definition at line 301 of file IDataProviderSvc.h.

301  {
302  return retrieveObject( parentObj, itemToPath( item ), pObject );
303  }
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:624

◆ retrieveObject() [7/7]

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

Retrieve object from data store.

Retrieve object identified by its directory from the data store.

Definition at line 624 of file TsDataSvc.cpp.

624  {
625  pObject = nullptr;
626  RegEntry * result = nullptr, *parent = CAST_REGENTRY( RegEntry*, pRegistry );
627  StatusCode status = retrieveEntry( parent, path, result );
628  if ( status.isSuccess() ) pObject = result->object();
629  return status;
630 }
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
StatusCode retrieveEntry(DataSvcHelpers::RegistryEntry *pNode, std::string_view path, DataSvcHelpers::RegistryEntry *&pEntry)
Retrieve registry entry from store.
Definition: TsDataSvc.cpp:545
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
DataObject * object() const override
Retrive object behind the link.
const Gaudi::Algorithm & parent
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75

◆ rootCLID()

CLID TsDataSvc::rootCLID ( ) const
override

IDataManagerSvc: Accessor for root event CLID.

CLID for root Event.

Definition at line 863 of file TsDataSvc.cpp.

863 { return ( (CLID)m_rootCLID ); }
Gaudi::Property< CLID > m_rootCLID
Definition: TsDataSvc.h:83
unsigned int CLID
Class ID definition.
Definition: ClassID.h:18

◆ rootName()

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

IDataManagerSvc: Accessor for root event name.

Name for root Event.

Definition at line 866 of file TsDataSvc.cpp.

866 { return ( m_rootName ); }
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:84

◆ setDataLoader()

StatusCode TsDataSvc::setDataLoader ( IConversionSvc svc,
IDataProviderSvc dpsvc = nullptr 
)
override

IDataManagerSvc: IDataManagerSvc: Pass a default data loader to the service and optionally a data provider.

IDataManagerSvc: Pass a default data loader to the service.

Definition at line 194 of file TsDataSvc.cpp.

194  {
195  if ( pDataLoader ) pDataLoader->addRef();
197  if ( pDataLoader ) { pDataLoader->setDataProvider( dpsvc == nullptr ? this : dpsvc ).ignore(); }
198  m_dataLoader = pDataLoader;
199  return StatusCode::SUCCESS;
200 }
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
IConversionSvc * m_dataLoader
Pointer to data loader service.
Definition: TsDataSvc.h:79
virtual unsigned long release()=0
Release Interface instance.

◆ setRoot() [1/2]

StatusCode TsDataSvc::setRoot ( std::string  root_path,
DataObject pRootObj 
)
override

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 149 of file TsDataSvc.cpp.

149  {
150  clearStore().ignore();
151  return i_setRoot( std::move( root_path ), pRootObj );
152 }
T move(T... args)
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:168
virtual StatusCode i_setRoot(std::string root_name, DataObject *pRootObj)
Initialize data store for new event by giving new event path and root object.
Definition: TsDataSvc.cpp:159
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
Definition: TsDataSvc.cpp:114

◆ setRoot() [2/2]

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

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 173 of file TsDataSvc.cpp.

173  {
174  clearStore().ignore();
175  return i_setRoot( std::move( root_path ), pRootAddr );
176 }
T move(T... args)
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:168
virtual StatusCode i_setRoot(std::string root_name, DataObject *pRootObj)
Initialize data store for new event by giving new event path and root object.
Definition: TsDataSvc.cpp:159
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
Definition: TsDataSvc.cpp:114

◆ traverseSubTree() [1/2]

StatusCode TsDataSvc::traverseSubTree ( std::string_view  sub_tree_path,
IDataStoreAgent pAgent 
)
override

IDataManagerSvc: Analyze by traversing all data objects below the sub tree identified by its full path name.

IDataManagerSvc: Analyse by traversing all data objects below the sub tree identified by its full path name.

Definition at line 123 of file TsDataSvc.cpp.

123  {
124  DataObject* pO = nullptr;
125  StatusCode status = findObject( sub_tree_path, pO );
126  return status.isSuccess() ? traverseSubTree( pO, pAgent ) : status;
127 }
StatusCode findObject(std::string_view fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:647
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
StatusCode traverseSubTree(std::string_view sub_tree_path, IDataStoreAgent *pAgent) override
IDataManagerSvc: Analyze by traversing all data objects below the sub tree identified by its full pat...
Definition: TsDataSvc.cpp:123
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40

◆ traverseSubTree() [2/2]

StatusCode TsDataSvc::traverseSubTree ( DataObject pObject,
IDataStoreAgent pAgent 
)
override

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

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

Definition at line 130 of file TsDataSvc.cpp.

130  {
132  if ( !checkRoot() ) return Status::INVALID_ROOT;
133  RegEntry* entry = CAST_REGENTRY( RegEntry*, pObject->registry() );
134  if ( !entry ) return Status::INVALID_OBJECT;
135  return entry->traverseTree( pAgent );
136 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
StatusCode traverseTree(IDataStoreAgent *pAgent, int level=0)
traverse data tree
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:54
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75

◆ traverseTree()

StatusCode TsDataSvc::traverseTree ( IDataStoreAgent pAgent)
override

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

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

Definition at line 139 of file TsDataSvc.cpp.

139  {
141  if ( !checkRoot() ) return Status::INVALID_ROOT;
142  return m_root->traverseTree( pAgent );
143 }
StatusCode traverseTree(IDataStoreAgent *pAgent, int level=0)
traverse data tree
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:54

◆ unlinkObject() [1/7]

virtual StatusCode IDataProviderSvc::unlinkObject

Remove a link to another object.

Both objects must be registered with the data store. This entry point can be used to unlink objects e.g. in order to unregister them.

Parameters
fromPointer to data directory the link originates.
objPathPath of the entry to be linked relative to from.
Returns
Status code indicating success or failure.

◆ unlinkObject() [2/7]

virtual StatusCode IDataProviderSvc::unlinkObject

Remove a link to another object.

Both objects must be registered with the data store. This entry point can be used to unlink objects e.g. in order to unregister them.

Parameters
fromObjPointer to the object the link originates.
objPathPath of the entry to be linked relative to from.
Returns
Status code indicating success or failure.

◆ unlinkObject() [3/7]

StatusCode IDataProviderSvc::unlinkObject
inline

Remove a link to another object.

Both objects must be registered with the data store. This entry point can be used to unlink objects e.g. in order to unregister them.

Parameters
fromPathPath to the object the link originates.
objPathPath of the entry to be linked relative to from.
Returns
Status code indicating success or failure.

Definition at line 532 of file IDataProviderSvc.h.

532  {
533  DataObject* pObject = nullptr;
534  StatusCode status = findObject( fromPath, pObject );
535  return status.isSuccess() ? unlinkObject( pObject->registry(), objPath ) : status;
536  }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
StatusCode findObject(std::string_view fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:647
StatusCode unlinkObject(IRegistry *from, std::string_view objPath) override
Remove a link to another object.
Definition: TsDataSvc.cpp:732
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
bool isSuccess() const
Definition: StatusCode.h:365
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40

◆ unlinkObject() [4/7]

virtual StatusCode IDataProviderSvc::unlinkObject

Remove a link to another object.

Both objects must be registered with the data store. This entry point can be used to unlink objects e.g. in order to unregister them.

Parameters
fullPathFull path of the entry to be linked.
Returns
Status code indicating success or failure.

◆ unlinkObject() [5/7]

StatusCode TsDataSvc::unlinkObject ( IRegistry from,
std::string_view  objPath 
)
override

Remove a link to another object.

Definition at line 732 of file TsDataSvc.cpp.

732  {
734  if ( !checkRoot() ) return Status::INVALID_ROOT;
735  try {
736  RegEntry* from_entry = CAST_REGENTRY( RegEntry*, from );
737  if ( from_entry ) {
738  auto sep = objPath.rfind( SEPARATOR );
739  if ( sep > 0 && sep != std::string_view::npos ) { // in case the objPath is a sub-directory itself
740  DataObject* pO = nullptr;
741  StatusCode sc = findObject( from, objPath.substr( 0, sep ), pO );
742  return sc.isSuccess() ? unlinkObject( pO->registry(), objPath.substr( sep ) ) : sc;
743  }
744  StatusCode status = from_entry->remove( objPath );
745  return status.isSuccess() ? status : Status::INVALID_OBJ_PATH;
746  }
747  } catch ( ... ) {}
748  return Status::INVALID_PARENT;
749 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
constexpr char SEPARATOR
StatusCode findObject(std::string_view fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:647
StatusCode unlinkObject(IRegistry *from, std::string_view objPath) override
Remove a link to another object.
Definition: TsDataSvc.cpp:732
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
StatusCode remove(std::string_view name)
Remove an entry from the store.
bool isSuccess() const
Definition: StatusCode.h:365
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:54
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75

◆ unlinkObject() [6/7]

StatusCode TsDataSvc::unlinkObject ( DataObject fromObj,
std::string_view  objPath 
)
override

Remove a link to another object.

Definition at line 760 of file TsDataSvc.cpp.

760  {
761  if ( !checkRoot() ) return Status::INVALID_ROOT;
762  return unlinkObject( m_root->findLeaf( from ), objPath );
763 }
RegistryEntry * findLeaf(std::string_view path) const
Find identified leaf in this registry node.
StatusCode unlinkObject(IRegistry *from, std::string_view objPath) override
Remove a link to another object.
Definition: TsDataSvc.cpp:732
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282

◆ unlinkObject() [7/7]

StatusCode TsDataSvc::unlinkObject ( std::string_view  fullPath)
override

Remove a link to another object.

Definition at line 752 of file TsDataSvc.cpp.

752  {
753  if ( fullPath.empty() ) return Status::INVALID_OBJ_PATH;
754  if ( fullPath.front() != SEPARATOR ) { return unlinkObject( m_root.get(), fullPath ); }
755  auto sep = fullPath.rfind( SEPARATOR );
756  return unlinkObject( fullPath.substr( 0, sep ), fullPath.substr( sep ) );
757 }
constexpr char SEPARATOR
StatusCode unlinkObject(IRegistry *from, std::string_view objPath) override
Remove a link to another object.
Definition: TsDataSvc.cpp:732
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
T get(T... args)

◆ unregisterAddress() [1/5]

virtual StatusCode IDataManagerSvc::unregisterAddress

Unregister object address from the data store.

The object is identified by full path name.

Parameters
fullPath[IN] Path name of the object.
Returns
Status code indicating success or failure.

◆ unregisterAddress() [2/5]

virtual StatusCode IDataManagerSvc::unregisterAddress

Unregister object address from the data store.

The object is identified by parent object and the path of the object relative to the parent.

Parameters
pParent[IN] Pointer to parent object.
objPath[IN] Path name of the object relative to the parent.
Returns
Status code indicating success or failure.

◆ unregisterAddress() [3/5]

StatusCode IDataManagerSvc::unregisterAddress
inline

Unregister object address from the data store.

The object is identified by parent object and the path of the object relative to the parent.

Parameters
pParent[IN] Pointer to parent object.
objPath[IN] Path name of the object relative to the parent.
Returns
Status code indicating success or failure.

Definition at line 243 of file IDataManagerSvc.h.

243  {
244  return unregisterAddress( pParent ? pParent->registry() : nullptr, objPath );
245  }
StatusCode unregisterAddress(std::string_view fullPath) override
IDataManagerSvc: Unregister object address from the data store.
Definition: TsDataSvc.cpp:278

◆ unregisterAddress() [4/5]

StatusCode TsDataSvc::unregisterAddress ( std::string_view  fullPath)
override

IDataManagerSvc: Unregister object address from the data store.

Definition at line 278 of file TsDataSvc.cpp.

278  {
279  if ( fullPath.empty() ) return Status::INVALID_OBJ_PATH;
280  return unregisterAddress( fullPath.front() != SEPARATOR ? m_root.get() : nullptr, fullPath );
281 }
constexpr char SEPARATOR
StatusCode unregisterAddress(std::string_view fullPath) override
IDataManagerSvc: Unregister object address from the data store.
Definition: TsDataSvc.cpp:278
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
T get(T... args)

◆ unregisterAddress() [5/5]

StatusCode TsDataSvc::unregisterAddress ( IRegistry pParent,
std::string_view  objPath 
)
override

IDataManagerSvc: Unregister object address from the data store.

Definition at line 284 of file TsDataSvc.cpp.

284  {
285  if ( !checkRoot() ) return Status::INVALID_ROOT;
286 
287  if ( objPath.empty() ) return Status::INVALID_OBJ_PATH;
288  if ( !pParent ) {
289  if ( objPath.front() != SEPARATOR ) { return unregisterAddress( m_root.get(), objPath ); }
290  auto sep = find( objPath, SEPARATOR, 1 );
291  if ( sep == std::string_view::npos || objPath.substr( 0, sep ) != m_rootName.value() ) {
292  return Status::INVALID_PARENT;
293  }
294  return unregisterAddress( m_root.get(), objPath.substr( sep ) );
295  }
296  if ( objPath.front() != SEPARATOR ) { return unregisterAddress( pParent, SEPARATOR + objPath ); }
297  RegEntry* node_entry = CAST_REGENTRY( RegEntry*, pParent );
298  if ( node_entry ) {
299  RegEntry* leaf_entry = node_entry->findLeaf( objPath );
300  if ( leaf_entry ) {
301  auto sep = objPath.rfind( SEPARATOR );
302  if ( sep > 0 && sep != std::string_view::npos ) {
303  return unregisterAddress( leaf_entry->parent(), objPath.substr( sep ) );
304  }
305  StatusCode status = node_entry->remove( objPath );
306  if ( status.isSuccess() ) return status;
307  }
308  }
309  return Status::INVALID_PARENT;
310 }
constexpr char SEPARATOR
RegistryEntry * findLeaf(std::string_view path) const
Find identified leaf in this registry node.
StatusCode unregisterAddress(std::string_view fullPath) override
IDataManagerSvc: Unregister object address from the data store.
Definition: TsDataSvc.cpp:278
IRegistry * parent() const
Pointer to parent directory entry.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
StatusCode remove(std::string_view name)
Remove an entry from the store.
bool isSuccess() const
Definition: StatusCode.h:365
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
T get(T... args)
T find(T... args)
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:84

◆ unregisterObject() [1/3]

StatusCode TsDataSvc::unregisterObject ( std::string_view  fullPath)
override

Unregister object from the data store.

Definition at line 393 of file TsDataSvc.cpp.

393  {
394  DataObject* pObject = nullptr;
395  StatusCode status = findObject( fullPath, pObject );
396  if ( status.isFailure() ) return status;
397  RegEntry* pEntry = CAST_REGENTRY( RegEntry*, pObject->registry() );
398  if ( !pEntry ) return Status::INVALID_ROOT;
399  if ( !pEntry->isEmpty() ) return Status::DIR_NOT_EMPTY;
400  RegEntry* pParent = pEntry->parentEntry();
401  if ( !pParent ) return Status::INVALID_PARENT;
402  if ( pObject ) pObject->addRef();
403  pParent->remove( pEntry );
404  return StatusCode::SUCCESS;
405 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
StatusCode findObject(std::string_view fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:647
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
bool isEmpty() const
Simple check if the Container is empty.
virtual unsigned long addRef()
Add reference to object.
Definition: DataObject.cpp:63
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
StatusCode remove(std::string_view name)
Remove an entry from the store.
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
RegistryEntry * parentEntry()
Pointer to parent registry entry.
bool isFailure() const
Definition: StatusCode.h:145
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75

◆ unregisterObject() [2/3]

StatusCode TsDataSvc::unregisterObject ( DataObject pObject)
override

Unregister object from the data store.

Definition at line 408 of file TsDataSvc.cpp.

408  {
409  if ( !checkRoot() ) return Status::INVALID_ROOT;
410  RegEntry* entry = m_root->findLeaf( pObject );
411  if ( !entry ) return Status::INVALID_OBJECT;
412  RegEntry* parent = entry->parentEntry();
413  if ( !parent ) return Status::INVALID_PARENT;
414  if ( !entry->isEmpty() ) return Status::DIR_NOT_EMPTY;
415  if ( entry->object() ) entry->object()->addRef();
416  if ( parent ) parent->remove( entry );
417  return StatusCode::SUCCESS;
418 }
RegistryEntry * findLeaf(std::string_view path) const
Find identified leaf in this registry node.
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
bool isEmpty() const
Simple check if the Container is empty.
virtual unsigned long addRef()
Add reference to object.
Definition: DataObject.cpp:63
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:99
DataObject * object() const override
Retrive object behind the link.
RegistryEntry * parentEntry()
Pointer to parent registry entry.
const Gaudi::Algorithm & parent
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282

◆ unregisterObject() [3/3]

StatusCode TsDataSvc::unregisterObject ( DataObject pObject,
std::string_view  objectPath 
)
override

Unregister object from the data store.

Definition at line 421 of file TsDataSvc.cpp.

421  {
422  if ( !checkRoot() ) return Status::INVALID_ROOT;
423  try {
424  RegEntry* parent = CAST_REGENTRY( RegEntry*, pParentObj->registry() );
425  if ( parent ) {
426  RegEntry* entry = parent->findLeaf( objectPath );
427  if ( !entry ) return Status::INVALID_OBJECT;
428  if ( !entry->isEmpty() ) return Status::DIR_NOT_EMPTY;
429  if ( entry->object() ) entry->object()->addRef();
430  parent->remove( entry );
431  return StatusCode::SUCCESS;
432  }
433  } catch ( ... ) {}
434  return Status::INVALID_PARENT;
435 }
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
bool isEmpty() const
Simple check if the Container is empty.
virtual unsigned long addRef()
Add reference to object.
Definition: DataObject.cpp:63
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:46
DataObject * object() const override
Retrive object behind the link.
const Gaudi::Algorithm & parent
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:282
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:75

◆ updateObject() [1/2]

StatusCode TsDataSvc::updateObject ( IRegistry pDirectory)
override

Update object identified by its directory entry.

Update object.

Definition at line 659 of file TsDataSvc.cpp.

659  {
660  if ( !pRegistry ) return Status::INVALID_OBJ_ADDR; // Precondition: Addres must be valid
661  DataObject* toUpdate = pRegistry->object();
662  return toUpdate ? updateObject( toUpdate ) : loadObject( pRegistry );
663 }
StatusCode updateObject(IRegistry *pDirectory) override
Update object identified by its directory entry.
Definition: TsDataSvc.cpp:659
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40
virtual StatusCode loadObject(IRegistry *pNode)
Invoke Persistency service to create transient object from its persistent representation.
Definition: TsDataSvc.cpp:469

◆ updateObject() [2/2]

StatusCode TsDataSvc::updateObject ( DataObject toUpdate)
override

Update object.

Definition at line 666 of file TsDataSvc.cpp.

666  {
667  StatusCode status = Status::INVALID_OBJ_ADDR;
668  if ( !toUpdate ) return Status::INVALID_OBJECT; // Precondition: Address must be valid
669  IRegistry* pRegistry = toUpdate->registry();
670  if ( !pRegistry ) return Status::INVALID_OBJECT; // Precondition: Need valid registry
671  IOpaqueAddress* pAddress = pRegistry->address();
672  if ( !pAddress ) return Status::INVALID_OBJ_ADDR; // Precondition: Need valid address
674  IConversionSvc* pLoader = getDataLoader( pRegistry );
675  if ( !pLoader ) return Status::NO_DATA_LOADER; // Precondition: Data loader must be present
676  if ( !m_inhibitPathes.empty() ) {
677  auto& ident = pRegistry->identifier();
678  auto inhibit = std::find( m_inhibitPathes.begin(), m_inhibitPathes.end(), ident );
679  if ( inhibit != m_inhibitPathes.end() ) return Status::NO_ACCESS;
680  }
681  try {
682  status = pLoader->updateObj( pAddress, toUpdate ); // Call data loader
683  if ( status.isSuccess() ) { status = pLoader->updateObjRefs( pAddress, toUpdate ); }
684  } catch ( const GaudiException& exc ) {
685  throw GaudiException( "GaudiException in updateObject() " + pRegistry->name(), name(), StatusCode::FAILURE, exc );
686  } catch ( const std::exception& x ) {
687  throw GaudiException( "std::exception in updateObject() " + pRegistry->name() + ": " +
688  System::typeinfoName( typeid( x ) ) + ", " + x.what(),
690  } catch ( ... ) {
691  throw GaudiException( "UNKN exception in updateObject() " + pRegistry->name(), name(), StatusCode::FAILURE );
692  }
693  return status;
694 }
Define general base for Gaudi exception.
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:82
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:308
virtual const name_type & name() const =0
Name of the directory (or key)
virtual IConversionSvc * getDataLoader(IRegistry *pReg)
Retrieve customizable data loader according to registry entry to be retrieved.
Definition: TsDataSvc.cpp:874
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:284
T what(T... args)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:32
bool isSuccess() const
Definition: StatusCode.h:365
STL class.
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
T find(T... args)
constexpr static const auto FAILURE
Definition: StatusCode.h:101
virtual const id_type & identifier() const =0
Full identifier (or key)
Opaque address interface definition.
Gaudi::Property< std::vector< std::string > > m_inhibitPathes
Definition: TsDataSvc.h:86
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:54

Member Data Documentation

◆ m_accessMutex

tsDataSvcMutex TsDataSvc::m_accessMutex
protected

Mutex to protect access to the store.

Definition at line 314 of file TsDataSvc.h.

◆ m_accessName

Gaudi::Property<std::string> TsDataSvc::m_accessName {this, "DataAccessName", "DataAccess", "Name of the data access incident"}
private

Definition at line 94 of file TsDataSvc.h.

◆ m_dataLoader

IConversionSvc* TsDataSvc::m_dataLoader = nullptr
private

Pointer to data loader service.

Definition at line 79 of file TsDataSvc.h.

◆ m_enableAccessHdlr

Gaudi::Property<bool> TsDataSvc::m_enableAccessHdlr
private
Initial value:
{this, "EnableAccessHandler", false,
"enable incidents on data access requests"}

Definition at line 92 of file TsDataSvc.h.

◆ m_enableFaultHdlr

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

Definition at line 88 of file TsDataSvc.h.

◆ m_faultName

Gaudi::Property<std::string> TsDataSvc::m_faultName {this, "DataFaultName", "DataFault", "Name of the data fault incident"}
private

Definition at line 90 of file TsDataSvc.h.

◆ m_forceLeaves

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

Definition at line 85 of file TsDataSvc.h.

◆ m_incidentSvc

IIncidentSvc* TsDataSvc::m_incidentSvc = nullptr
private

Pointer to incident service.

Definition at line 81 of file TsDataSvc.h.

◆ m_inhibitPathes

Gaudi::Property<std::vector<std::string> > TsDataSvc::m_inhibitPathes {this, "InhibitPathes", {}, "inhibited leaves"}
private

Definition at line 86 of file TsDataSvc.h.

◆ m_preLoads

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

Items to be pre-loaded.

Definition at line 97 of file TsDataSvc.h.

◆ m_root

std::unique_ptr<DataSvcHelpers::RegistryEntry> TsDataSvc::m_root
private

Pointer to root entry.

Definition at line 99 of file TsDataSvc.h.

◆ m_rootCLID

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

Definition at line 83 of file TsDataSvc.h.

◆ m_rootName

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

Definition at line 84 of file TsDataSvc.h.


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