The Gaudi Framework  v28r2p1 (f1a77ff4)
TsDataSvc Class Reference

Data service base class. More...

#include <GaudiKernel/TsDataSvc.h>

Inheritance diagram for TsDataSvc:
Collaboration diagram for TsDataSvc:

Public Types

typedef std::vector< DataStoreItemLoadItems
 Define set of load items. More...
 
- 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
typedef Gaudi::PluginService::Factory< IService *, const std::string &, ISvcLocator * > Factory
 
- 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...
 

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 (const std::string &fullPath, IOpaqueAddress *pAddress) override
 IDataManagerSvc: Register object address with the data store. More...
 
StatusCode registerAddress (DataObject *parentObj, const std::string &objectPath, IOpaqueAddress *pAddress) override
 IDataManagerSvc: Register object address with the data store. More...
 
StatusCode registerAddress (IRegistry *parentObj, const std::string &objectPath, IOpaqueAddress *pAddress) override
 IDataManagerSvc: Register object address with the data store. More...
 
StatusCode unregisterAddress (const std::string &fullPath) override
 IDataManagerSvc: Unregister object address from the data store. More...
 
StatusCode unregisterAddress (DataObject *pParent, const std::string &objPath) override
 IDataManagerSvc: Unregister object address from the data store. More...
 
StatusCode unregisterAddress (IRegistry *pParent, const std::string &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 (const std::string &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 (const std::string &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 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 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 addPreLoadItem (const std::string &itemPath) override
 Add an item to the preload list. More...
 
StatusCode removePreLoadItem (const DataStoreItem &item) override
 Remove an item from the preload list. More...
 
StatusCode removePreLoadItem (const std::string &itemPath) override
 Add an item to 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 (const std::string &fullPath, DataObject *pObject) override
 Register object with the data store. More...
 
StatusCode registerObject (const std::string &parentPath, const std::string &objPath, DataObject *pObject) override
 Register object with the data store. More...
 
StatusCode registerObject (const std::string &parentPath, int item, DataObject *pObject) override
 Register object with the data store. More...
 
StatusCode registerObject (DataObject *parentObj, const std::string &objPath, DataObject *pObject) override
 Register object with the data store. More...
 
StatusCode registerObject (DataObject *parentObj, int item, DataObject *pObject) override
 Register object with the data store. More...
 
StatusCode unregisterObject (const std::string &fullPath) override
 Unregister object from the data store. More...
 
StatusCode unregisterObject (const std::string &parentPath, const std::string &objectPath) override
 Unregister object from the data store. More...
 
StatusCode unregisterObject (const std::string &parentPath, int item) override
 Unregister object from the data store. More...
 
StatusCode unregisterObject (DataObject *pObject) override
 Unregister object from the data store. More...
 
StatusCode unregisterObject (DataObject *pObject, const std::string &objectPath) override
 Unregister object from the data store. More...
 
StatusCode unregisterObject (DataObject *pObject, int item) override
 Unregister object from the data store. More...
 
StatusCode retrieveObject (IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
 Retrieve object from data store. More...
 
StatusCode retrieveObject (const std::string &fullPath, DataObject *&pObject) override
 Retrieve object identified by its full path from the data store. More...
 
StatusCode retrieveObject (const std::string &parentPath, const std::string &objPath, DataObject *&pObject) override
 Retrieve object from data store. More...
 
StatusCode retrieveObject (const std::string &parentPath, int item, DataObject *&pObject) override
 Retrieve object from data store. More...
 
StatusCode retrieveObject (DataObject *parentObj, const std::string &objPath, DataObject *&pObject) override
 Retrieve object from data store. More...
 
StatusCode retrieveObject (DataObject *parentObj, int item, DataObject *&pObject) override
 Retrieve object from data store. More...
 
StatusCode findObject (const std::string &fullPath, DataObject *&pObject) override
 Find object identified by its full path in the data store. More...
 
StatusCode findObject (IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
 Find object identified by its full path in the data store. More...
 
StatusCode findObject (const std::string &parentPath, const std::string &objPath, DataObject *&pObject) override
 Find object in the data store. More...
 
StatusCode findObject (const std::string &parentPath, int item, DataObject *&pObject) override
 Find object in the data store. More...
 
StatusCode findObject (DataObject *parentObj, const std::string &objPath, DataObject *&pObject) override
 Find object in the data store. More...
 
StatusCode findObject (DataObject *parentObj, int item, DataObject *&pObject) override
 Find object in the data store. More...
 
StatusCode linkObject (IRegistry *from, const std::string &objPath, DataObject *to) override
 Add a link to another object. More...
 
StatusCode linkObject (const std::string &fromPath, const std::string &objPath, DataObject *to) override
 Add a link to another object. More...
 
StatusCode linkObject (DataObject *from, const std::string &objPath, DataObject *to) override
 Add a link to another object. More...
 
StatusCode linkObject (const std::string &fullPath, DataObject *to) override
 Add a link to another object. More...
 
StatusCode unlinkObject (IRegistry *from, const std::string &objPath) override
 Remove a link to another object. More...
 
StatusCode unlinkObject (const std::string &fromPath, const std::string &objPath) override
 Remove a link to another object. More...
 
StatusCode unlinkObject (DataObject *fromObj, const std::string &objPath) override
 Remove a link to another object. More...
 
StatusCode unlinkObject (const std::string &fullPath) override
 Remove a link to another object. More...
 
StatusCode updateObject (IRegistry *pDirectory) override
 Update object identified by its directory entry. More...
 
StatusCode updateObject (const std::string &updatePath) override
 Update object. More...
 
StatusCode updateObject (DataObject *toUpdate) override
 Update object. More...
 
StatusCode updateObject (const std::string &parentPath, const std::string &updatePath) override
 Update object. More...
 
StatusCode updateObject (DataObject *pParent, const std::string &updatePath) override
 Update object. More...
 
StatusCode initialize () override
 Service initialization. More...
 
StatusCode reinitialize () override
 Service initialization. More...
 
StatusCode finalize () override
 Service initialization. More...
 
 ~TsDataSvc () override
 Standard Destructor. 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...
 
 ~extends () override=default
 Virtual destructor. 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 declarePrivateTool (ToolHandle< T > &handle, std::string toolTypeAndName="", bool createIf=true)
 Declare used Private tool. More...
 
template<class T >
StatusCode declarePublicTool (ToolHandle< T > &handle, std::string toolTypeAndName="", bool createIf=true)
 Declare used Public 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
 
 ~PropertyHolder () override=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, TYPE &value, const std::string &doc="none") const
 
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
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, GaudiHandleBase &ref, const std::string &doc="none")
 Specializations for various GaudiHandles. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, GaudiHandleArrayBase &ref, const std::string &doc="none")
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, DataObjectHandleBase &ref, const std::string &doc="none")
 
- Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor. More...
 
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...
 
MSG::Level msgLevel () const
 get the output level from the embedded MsgStream More...
 
MSG::Level outputLevel () const __attribute__((deprecated))
 Backward compatibility function for getting the output level. More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 
- Public Member Functions inherited from extend_interfaces< Interfaces... >
 ~extend_interfaces () override=default
 Virtual destructor. 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, const std::string &path, DataSvcHelpers::RegistryEntry *&pEntry)
 Retrieve registry entry from store. More...
 
DataObjecthandleDataFault (IRegistry *pReg, const std::string &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 > >
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream. More...
 

Protected 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"}
 
LoadItems m_preLoads
 Items to be pre-loaded. More...
 
DataSvcHelpers::RegistryEntrym_root = nullptr
 Pointer to root entry. More...
 
DataSvcHelpers::InhibitMap * m_inhibitMap = nullptr
 Map with object paths to be inhibited from loading. More...
 
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, "[[deprecated]] 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 Member Functions

 TsDataSvc (const TsDataSvc &)=delete
 Fake copy constructor (never implemented). More...
 
TsDataSvcoperator= (const TsDataSvc &)=delete
 Fake assignment operator (never implemented). 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 58 of file TsDataSvc.h.

Member Typedef Documentation

Define set of load items.

Definition at line 62 of file TsDataSvc.h.

Constructor & Destructor Documentation

TsDataSvc::~TsDataSvc ( )
override

Standard Destructor.

Definition at line 1397 of file TsDataSvc.cpp.

1397  {
1398  setDataLoader(0).ignore();
1399  resetPreLoad().ignore();
1400  clearStore().ignore();
1401 }
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:214
StatusCode resetPreLoad() override
Clear the preload list.
Definition: TsDataSvc.cpp:1284
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
Definition: TsDataSvc.cpp:115
void ignore() const
Definition: StatusCode.h:106
TsDataSvc::TsDataSvc ( const TsDataSvc )
privatedelete

Fake copy constructor (never implemented).

Member Function Documentation

StatusCode TsDataSvc::addPreLoadItem ( const DataStoreItem item)
override

Add an item to the preload list.

Definition at line 1255 of file TsDataSvc.cpp.

1255  {
1256  LoadItems::iterator i = std::find(m_preLoads.begin(), m_preLoads.end(), item);
1257  if ( i == m_preLoads.end() ) {
1258  m_preLoads.push_back(item);
1259  }
1260  return StatusCode::SUCCESS;
1261 }
T end(T...args)
T push_back(T...args)
LoadItems m_preLoads
Items to be pre-loaded.
Definition: TsDataSvc.h:84
T find(T...args)
T begin(T...args)
StatusCode TsDataSvc::addPreLoadItem ( const std::string itemPath)
override

Add an item to the preload list.

Definition at line 1264 of file TsDataSvc.cpp.

1264  {
1265  return addPreLoadItem( DataStoreItem(itemPath,1) );
1266 }
StatusCode addPreLoadItem(const DataStoreItem &item) override
Add an item to the preload list.
Definition: TsDataSvc.cpp:1255
Description of the DataStoreItem class.
Definition: DataStoreItem.h:17
bool TsDataSvc::checkRoot ( )
inlineprotected

Check if root path is valid.

Definition at line 335 of file TsDataSvc.h.

335 { return 0 != m_root; }
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
StatusCode TsDataSvc::clearStore ( )
override

IDataManagerSvc: Remove all data objects in the data store.

Definition at line 115 of file TsDataSvc.cpp.

115  {
116  if ( checkRoot() ) {
117  m_root->release();
118  m_root = 0;
119  return SUCCESS;
120  }
121  return INVALID_ROOT;
122 }
unsigned long release() override
IInterface implementation: Reference the object.
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
StatusCode TsDataSvc::clearSubTree ( const std::string sub_tree_path)
override

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

Definition at line 77 of file TsDataSvc.cpp.

77  {
78  DataObject* pObject = 0;
79  StatusCode status = findObject(sub_tree_path, pObject);
80  if ( status.isSuccess() ) {
81  RegEntry* node_entry = CAST_REGENTRY(RegEntry*,pObject->registry());
82  if ( 0 != node_entry ) {
83  RegEntry* parent = node_entry->parentEntry();
84  if ( 0 != parent ) {
85  parent->remove(node_entry);
86  return StatusCode::SUCCESS;
87  }
88  return INVALID_PARENT;
89  }
90  return INVALID_OBJECT;
91  }
92  return status;
93 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
virtual long remove(const std::string &name)
Remove an entry from the store.
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
virtual RegistryEntry * parentEntry()
Pointer to parent registry entry.
Definition: RegistryEntry.h:91
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
StatusCode TsDataSvc::clearSubTree ( DataObject pObject)
override

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

Definition at line 98 of file TsDataSvc.cpp.

98  {
99  if ( checkRoot() ) {
100  RegEntry* entry = CAST_REGENTRY(RegEntry*,pObject->registry());
101  if ( 0 != entry ) {
102  RegEntry* parent = entry->parentEntry();
103  if ( 0 != parent ) {
104  parent->remove(entry);
105  return SUCCESS;
106  }
107  return INVALID_PARENT;
108  }
109  return INVALID_OBJECT;
110  }
111  return INVALID_ROOT;
112 }
virtual long remove(const std::string &name)
Remove an entry from the store.
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
virtual RegistryEntry * parentEntry()
Pointer to parent registry entry.
Definition: RegistryEntry.h:91
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
DataObject * TsDataSvc::createDefaultObject ( ) const
protectedvirtual

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

Definition at line 1385 of file TsDataSvc.cpp.

1385  {
1386  return new DataObject();
1387 }
StatusCode TsDataSvc::finalize ( )
override

Service initialization.

Service initialisation.

Definition at line 1362 of file TsDataSvc.cpp.

1362  {
1363  // Nothing to do: just call base class initialisation
1364  setDataLoader(0).ignore();
1365  resetPreLoad().ignore();
1366  clearStore().ignore();
1367  if ( m_incidentSvc ) {
1369  m_incidentSvc = 0;
1370  }
1371  return Service::finalize();
1372 }
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:214
StatusCode resetPreLoad() override
Clear the preload list.
Definition: TsDataSvc.cpp:1284
IIncidentSvc * m_incidentSvc
Pointer to incident service.
Definition: TsDataSvc.h:68
virtual unsigned long release()=0
Release Interface instance.
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
Definition: TsDataSvc.cpp:115
void ignore() const
Definition: StatusCode.h:106
StatusCode TsDataSvc::findObject ( const std::string fullPath,
DataObject *&  pObject 
)
override

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

Definition at line 956 of file TsDataSvc.cpp.

957  {
959  pObject = 0;
960  if ( checkRoot() ) {
961  if ( path.length() == 0 || path == m_rootName ) {
962  pObject = m_root->object();
963  return (0 == pObject) ? OBJ_NOT_LOADED : IDataProviderSvc_NO_ERROR;
964  }
965  else if ( path[0] != SEPARATOR ) {
966  return findObject(m_rootName, path, pObject);
967  }
968  return findObject((IRegistry*)0, path, pObject);
969  }
970  return INVALID_ROOT;
971 }
DataObject * object() const override
Retrive object behind the link.
constexpr char SEPARATOR
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:71
StatusCode TsDataSvc::findObject ( IRegistry pDirectory,
const std::string 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 936 of file TsDataSvc.cpp.

938  {
940  pObject = 0;
941  IRegistry* pReg = (0==pRegistry) ? m_root : pRegistry;
942  RegEntry* root_entry = CAST_REGENTRY(RegEntry*, pReg);
943  if ( 0 != root_entry ) {
944  if ( path.length() > 0 ) {
945  pReg = root_entry->find(path);
946  }
947  if ( 0 == pReg ) {
948  return INVALID_OBJ_PATH;
949  }
950  pObject = pReg->object();
951  }
952  return (0 == pObject) ? OBJ_NOT_LOADED : IDataProviderSvc_NO_ERROR;
953 }
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
virtual DataObject * object() const =0
Retrieve object behind the link.
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
T length(T...args)
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
virtual IRegistry * find(const IRegistry *obj) const
Try to find an object identified by its pointer.
StatusCode TsDataSvc::findObject ( const std::string parentPath,
const std::string objPath,
DataObject *&  pObject 
)
override

Find object in the data store.

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

Definition at line 974 of file TsDataSvc.cpp.

976  {
977  DataObject* parent = 0;
978  StatusCode status = findObject(parentPath, parent);
979  if ( status.isSuccess() ) {
980  status = findObject (parent, objectPath, pObject);
981  }
982  return status;
983 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
StatusCode TsDataSvc::findObject ( const std::string parentPath,
int  item,
DataObject *&  pObject 
)
override

Find object in the data store.

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

Definition at line 986 of file TsDataSvc.cpp.

987  {
988  return findObject(parentPath, itemToPath(item), pObject);
989 }
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
StatusCode TsDataSvc::findObject ( DataObject parentObj,
const std::string objPath,
DataObject *&  pObject 
)
override

Find object in the data store.

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

Definition at line 999 of file TsDataSvc.cpp.

1001  {
1002  IRegistry* pDir = (0==parentObj) ? 0 : parentObj->registry();
1003  return findObject(pDir, path, pObject);
1004 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
StatusCode TsDataSvc::findObject ( DataObject parentObj,
int  item,
DataObject *&  pObject 
)
override

Find object in the data store.

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

Definition at line 992 of file TsDataSvc.cpp.

994  {
995  return findObject(parentObj, itemToPath(item), pObject);
996 }
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
IConversionSvc * TsDataSvc::getDataLoader ( IRegistry pReg)
protectedvirtual

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

Definition at line 1392 of file TsDataSvc.cpp.

1392  {
1393  return m_dataLoader;
1394 }
IConversionSvc * m_dataLoader
Pointer to data loader service.
Definition: TsDataSvc.h:66
DataObject * TsDataSvc::handleDataFault ( IRegistry pReg,
const std::string 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 656 of file TsDataSvc.cpp.

657 {
658  if ( m_enableFaultHdlr ) {
659  IRegistry* pLeaf = 0;
660  if ( pReg && path.length() == 0 ) {
661  DataIncident incident(name(), m_faultName, pReg->identifier());
662  m_incidentSvc->fireIncident(incident);
663  return pReg->object();
664  }
665  else if ( pReg ) {
666  std::string p = pReg->identifier();
667  if (path[0] != SEPARATOR ) p += SEPARATOR;
668  p += path;
669  DataIncident incident(name(), m_faultName, p);
670  m_incidentSvc->fireIncident(incident);
671  pLeaf = m_root->findLeaf(p);
672  }
673  else {
675  if (path[0] != SEPARATOR ) p += SEPARATOR;
676  p += path;
677  DataIncident incident(name(), m_faultName, p);
678  m_incidentSvc->fireIncident(incident);
679  pLeaf = m_root->findLeaf(p);
680  }
681  if ( pLeaf ) {
682  return pLeaf->object();
683  }
684  }
685  return 0;
686 }
RegistryEntry * findLeaf(boost::string_ref path) const
Find identified leaf in this registry node.
Definition: RegistryEntry.h:95
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:289
constexpr char SEPARATOR
STL class.
virtual void fireIncident(const Incident &incident)=0
Fire an Incident.
IIncidentSvc * m_incidentSvc
Pointer to incident service.
Definition: TsDataSvc.h:68
virtual const id_type & identifier() const =0
Full identifier (or key)
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
virtual DataObject * object() const =0
Retrieve object behind the link.
T length(T...args)
const std::string & identifier() const override
Full identifier (or key)
Data service incident class.
Gaudi::Property< bool > m_enableFaultHdlr
Definition: TsDataSvc.h:75
Gaudi::Property< std::string > m_faultName
Definition: TsDataSvc.h:77
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 176 of file TsDataSvc.cpp.

177  {
178  if ( 0 != pRootObj ) {
179  m_root = new RegEntry(root_path);
180  m_root->makeHard(pRootObj);
181  m_root->setDataSvc(this);
182  // No done with GaudiHive. preLoad().ignore();
183  }
184  return SUCCESS;
185 }
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
DataSvcHelpers::RegistryEntry RegEntry
Definition: TsDataSvc.cpp:66
void setDataSvc(IDataProviderSvc *s)
Set the transient data store.
Definition: RegistryEntry.h:87
void makeHard(DataObject *pObject)
Initialize link as hard link.
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 202 of file TsDataSvc.cpp.

203  {
204  if ( 0 != pRootAddr ) {
205  m_root = new RegEntry(std::move(root_path));
206  m_root->makeHard(pRootAddr);
207  m_root->setDataSvc(this);
208  // Not done with GaudiHive. preLoad().ignore();
209  }
210  return SUCCESS;
211 }
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
DataSvcHelpers::RegistryEntry RegEntry
Definition: TsDataSvc.cpp:66
void setDataSvc(IDataProviderSvc *s)
Set the transient data store.
Definition: RegistryEntry.h:87
T move(T...args)
void makeHard(DataObject *pObject)
Initialize link as hard link.
StatusCode TsDataSvc::initialize ( )
override

Service initialization.

Definition at line 1321 of file TsDataSvc.cpp.

1321  {
1322  // Nothing to do: just call base class initialisation
1324  if ( !sc.isSuccess() ) {
1325  return sc;
1326  }
1327  sc = service("IncidentSvc", m_incidentSvc, true);
1328  if ( UNLIKELY(!sc.isSuccess()) ) {
1329  error() << "Failed to access incident service." << endmsg;
1330  }
1331  return sc;
1332 }
StatusCode initialize() override
Definition: Service.cpp:64
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
#define UNLIKELY(x)
Definition: Kernel.h:126
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
IIncidentSvc * m_incidentSvc
Pointer to incident service.
Definition: TsDataSvc.h:68
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode service(const std::string &name, const T *&psvc, bool createIf=true) const
Access a service by name, creating it if it doesn&#39;t already exist.
Definition: Service.h:85
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode TsDataSvc::linkObject ( IRegistry from,
const std::string objPath,
DataObject to 
)
override

Add a link to another object.

Definition at line 1105 of file TsDataSvc.cpp.

1106  {
1108  if ( checkRoot() ) {
1109  try {
1110  RegEntry* from_entry = CAST_REGENTRY(RegEntry*,from);
1111  if ( 0 != from_entry ) {
1112  // First check if both objects are already registered to the store
1113  RegEntry* to_entry = m_root->findLeaf(to);
1114  if ( 0 == to_entry ) {
1115  return INVALID_OBJECT;
1116  }
1117  else {
1118  std::string::size_type sep = objPath.rfind(SEPARATOR);
1119  if ( sep > 0 && sep != std::string::npos ) { // in case the objPath is a sub-directory itself
1120  DataObject* pO = 0;
1121  std::string fromPath(objPath, 0, sep);
1122  StatusCode sc = retrieveObject(from, fromPath, pO);
1123  if ( sc.isSuccess() ) {
1124  std::string toPath(objPath, sep, objPath.length());
1125  sc = linkObject(pO->registry(), toPath, to);
1126  }
1127  return sc;
1128  }
1129  // Now register the soft link
1130  StatusCode status = from_entry->add( objPath, to, true);
1131  return status.isSuccess() ?
1132  IDataProviderSvc_NO_ERROR : DOUBL_OBJ_PATH;
1133  }
1134  }
1135  }
1136  catch (...) {
1137  }
1138  return INVALID_PARENT;
1139  }
1140  return INVALID_ROOT;
1141 }
StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:881
RegistryEntry * findLeaf(boost::string_ref path) const
Find identified leaf in this registry node.
Definition: RegistryEntry.h:95
constexpr char SEPARATOR
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
virtual long add(const std::string &name, DataObject *pObject, bool is_soft=false)
Add entry to data store.
T rfind(T...args)
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
STL class.
StatusCode linkObject(IRegistry *from, const std::string &objPath, DataObject *to) override
Add a link to another object.
Definition: TsDataSvc.cpp:1105
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
T length(T...args)
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
StatusCode TsDataSvc::linkObject ( const std::string fromPath,
const std::string objPath,
DataObject to 
)
override

Add a link to another object.

Definition at line 1160 of file TsDataSvc.cpp.

1162  {
1164  DataObject* pO = 0;
1165  StatusCode status = retrieveObject(from, pO);
1166  if ( status.isSuccess() ) {
1167  return linkObject(pO->registry(), objPath, to);
1168  }
1169  return status;
1170 }
StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:881
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
StatusCode linkObject(IRegistry *from, const std::string &objPath, DataObject *to) override
Add a link to another object.
Definition: TsDataSvc.cpp:1105
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
StatusCode TsDataSvc::linkObject ( DataObject from,
const std::string objPath,
DataObject to 
)
override

Add a link to another object.

Definition at line 1173 of file TsDataSvc.cpp.

1175  {
1177  if ( 0 != from ) {
1178  IRegistry* from_entry = from->registry();
1179  if ( 0 != from_entry ) {
1180  return linkObject( from_entry, objPath, to);
1181  }
1182  }
1183  return INVALID_PARENT;
1184 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
StatusCode linkObject(IRegistry *from, const std::string &objPath, DataObject *to) override
Add a link to another object.
Definition: TsDataSvc.cpp:1105
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
StatusCode TsDataSvc::linkObject ( const std::string fullPath,
DataObject to 
)
override

Add a link to another object.

Definition at line 1144 of file TsDataSvc.cpp.

1145  {
1147  if ( fullPath.length() > 0 ) {
1148  if ( fullPath[0] != SEPARATOR ) {
1149  return linkObject(m_rootName, fullPath, to);
1150  }
1151  std::string::size_type sep = fullPath.rfind(SEPARATOR);
1152  std::string objPath(fullPath, sep, fullPath.length());
1153  std::string fromPath(fullPath, 0, sep);
1154  return linkObject( fromPath, objPath, to);
1155  }
1156  return INVALID_OBJ_PATH;
1157 }
constexpr char SEPARATOR
T rfind(T...args)
STL class.
StatusCode linkObject(IRegistry *from, const std::string &objPath, DataObject *to) override
Add a link to another object.
Definition: TsDataSvc.cpp:1105
T length(T...args)
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:71
StatusCode TsDataSvc::loadObject ( IRegistry pNode)
protectedvirtual

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

Definition at line 691 of file TsDataSvc.cpp.

691  {
692  IConversionSvc* pLoader = getDataLoader(pRegistry);
693  return loadObject(pLoader, pRegistry);
694 }
virtual IConversionSvc * getDataLoader(IRegistry *pReg)
Retrieve customizable data loader according to registry entry to be retrieved.
Definition: TsDataSvc.cpp:1392
virtual StatusCode loadObject(IRegistry *pNode)
Invoke Persistency service to create transient object from its persistent representation.
Definition: TsDataSvc.cpp:691
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 699 of file TsDataSvc.cpp.

699  {
701  StatusCode status = INVALID_OBJ_ADDR;
702  DataObject* pObject = 0;
703  if ( 0 == pLoader ) { // Precondition: Data loader must be present
704  if (handleDataFault(pRegistry) != 0) return SUCCESS;
705  else return NO_DATA_LOADER;
706  }
707  if ( 0 == pRegistry ) { // Precondition: Directory must be valid
708  if (handleDataFault(pRegistry) != 0) return SUCCESS;
709  else return INVALID_OBJ_ADDR;
710  }
711 
712  VERMSG << "Requested object " << pRegistry->identifier() << endmsg;
713 
714  if ( m_enableAccessHdlr ) {
715  // Fire data access incident
716  DataIncident incident(name(), m_accessName, pRegistry->identifier());
717  m_incidentSvc->fireIncident(incident);
718  }
719  if ( m_inhibitPathes.size() > 0 ) {
720  const std::string& ident = pRegistry->identifier();
722  std::find(m_inhibitPathes.begin(), m_inhibitPathes.end(), ident);
723  if ( inhibit != m_inhibitPathes.end() ) {
724  return NO_ACCESS;
725  }
726  }
727  IOpaqueAddress* pAddress = pRegistry->address();
728  if ( 0 == pAddress ) { // Precondition:
729  return INVALID_OBJ_ADDR; // Address must be valid
730  }
731  try {
732  status = pLoader->createObj(pAddress, pObject); // Call data loader
733  if ( status.isSuccess() ) {
734 
735  VERMSG << "Object " << pRegistry->identifier() << " created" << endmsg;
736 
737  RegEntry *pEntry = CAST_REGENTRY(RegEntry*,pRegistry);
738  pEntry->setObject(pObject);
739 
740  VERMSG << "Filling object " << pRegistry->identifier() << endmsg;
741  status = pLoader->fillObjRefs(pAddress, pObject);
742  }
743  }
744  catch( const GaudiException& exc ) {
745  if ( handleDataFault(pRegistry) != 0 ) {
746  return SUCCESS;
747  }
748  throw GaudiException("GaudiException in loadObject() " + pRegistry->identifier(),
749  name(), StatusCode::FAILURE, exc);
750  }
751  catch( const std::exception& x) {
752  if ( handleDataFault(pRegistry) != 0 ) {
753  return SUCCESS;
754  }
755  throw GaudiException("std::exception in loadObject() " + pRegistry->identifier() +
756  ": " + System::typeinfoName(typeid(x)) + ", " + x.what(),
758  }
759  catch(...) {
760  if ( handleDataFault(pRegistry) != 0 ) {
761  return SUCCESS;
762  }
763  throw GaudiException("UNKN exception in loadObject() " + pRegistry->identifier(),
765  }
766  if ( !status.isSuccess() ) {
767  if ( handleDataFault(pRegistry) != 0 ) {
768  return StatusCode::SUCCESS;
769  }
770  }
771  ON_VERBOSE if ( status.isSuccess() ) {
772  verbose() << "Object " << pRegistry->identifier() << " successfully loaded" << endmsg;
773  }
774  return status;
775 }
Define general base for Gaudi exception.
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:289
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:299
Gaudi::Property< std::string > m_accessName
Definition: TsDataSvc.h:81
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
STL class.
#define VERMSG
Definition: TsDataSvc.cpp:72
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:68
#define ON_VERBOSE
Definition: TsDataSvc.cpp:69
T what(T...args)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Gaudi::Property< bool > m_enableAccessHdlr
Definition: TsDataSvc.h:79
DataObject * handleDataFault(IRegistry *pReg, const std::string &path="")
Invoke data fault handling if enabled.
Definition: TsDataSvc.cpp:656
STL class.
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
T find(T...args)
virtual StatusCode fillObjRefs(IOpaqueAddress *pAddress, DataObject *pObject)=0
Resolve the references of the created transient object.
STL class.
Data service incident class.
Opaque address interface definition.
Gaudi::Property< std::vector< std::string > > m_inhibitPathes
Definition: TsDataSvc.h:73
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
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 249 of file TsDataSvc.cpp.

250  {
252  if ( pObject ) {
253  return objectLeaves(pObject->registry(), leaves);
254  }
255  return INVALID_OBJECT;
256 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
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:249
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
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 261 of file TsDataSvc.cpp.

262  {
264  if ( checkRoot() ) {
265  const RegEntry* node_entry = CAST_REGENTRY(const RegEntry*,pRegistry);
266  if ( node_entry ) {
267  std::copy(node_entry->leaves().begin(),node_entry->leaves().end(),back_inserter(leaves));
268  //leaves = node_entry->leaves();
269  return StatusCode::SUCCESS;
270  }
271  return INVALID_OBJECT;
272  }
273  return INVALID_ROOT;
274 }
T copy(T...args)
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:36
T begin(T...args)
T back_inserter(T...args)
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
StatusCode TsDataSvc::objectParent ( const DataObject pObject,
IRegistry *&  refpParent 
)
override

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

Definition at line 225 of file TsDataSvc.cpp.

226  {
228  if ( pObject ) {
229  return objectParent(pObject->registry(), refpParent);
230  }
231  return INVALID_OBJECT;
232 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
StatusCode objectParent(const DataObject *pObject, IRegistry *&refpParent) override
IDataManagerSvc: Explore the object store: retrieve the object&#39;s parent.
Definition: TsDataSvc.cpp:225
StatusCode TsDataSvc::objectParent ( const IRegistry pRegistry,
IRegistry *&  refpParent 
)
override

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

Definition at line 234 of file TsDataSvc.cpp.

235  {
237  if ( checkRoot() ) {
238  const RegEntry* node_entry = CAST_REGENTRY(const RegEntry*,pRegistry);
239  if ( node_entry ) {
240  refpParent = node_entry->parent();
241  return StatusCode::SUCCESS;
242  }
243  return INVALID_OBJECT;
244  }
245  return INVALID_ROOT;
246 }
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
virtual IRegistry * parent() const
Pointer to parent directory entry.
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
TsDataSvc& TsDataSvc::operator= ( const TsDataSvc )
privatedelete

Fake assignment operator (never implemented).

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

1290  {
1291  //unused: StatusCode sc = StatusCode::FAILURE;
1292  if ( 0 != pObject && depth++ < load_depth ) {
1293  RegEntry* dir = CAST_REGENTRY(RegEntry*,pObject->registry());
1294  if ( 0 != dir ) {
1295  for (RegEntry::Iterator i = dir->begin(); i != dir->end(); i++ ) {
1296  DataObject *pObj = 0;
1297  StatusCode status = retrieveObject(pObject, (*i)->name(), pObj);
1298  if ( status.isSuccess() && depth < load_depth ) {
1299  preLoad(depth, load_depth, pObj).ignore();
1300  }
1301  }
1302  }
1303  }
1304  return StatusCode::SUCCESS;
1305 }
StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:881
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
StatusCode preLoad() override
load all preload items of the list
Definition: TsDataSvc.cpp:1308
virtual Iterator begin() const
Return starting point for container iteration.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Store::const_iterator Iterator
Iterator definition.
Definition: RegistryEntry.h:45
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
const std::string & name() const
Retreive DataObject name. It is the name when registered in the store.
Definition: DataObject.cpp:78
void ignore() const
Definition: StatusCode.h:106
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
virtual Iterator end() const
Return end elemtn if the container.
StatusCode TsDataSvc::preLoad ( )
override

load all preload items of the list

Definition at line 1308 of file TsDataSvc.cpp.

1308  {
1309  DataObject* pObj = 0;
1310  for (LoadItems::iterator i = m_preLoads.begin(); i != m_preLoads.end(); i++) {
1311  StatusCode sc = retrieveObject( (*i).path(), pObj);
1312  int load_depth = (*i).depth();
1313  if ( sc.isSuccess() && load_depth > 1 ) {
1314  preLoad(1, load_depth, pObj).ignore();
1315  }
1316  }
1317  return StatusCode::SUCCESS;
1318 }
StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:881
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
T end(T...args)
StatusCode preLoad() override
load all preload items of the list
Definition: TsDataSvc.cpp:1308
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
LoadItems m_preLoads
Items to be pre-loaded.
Definition: TsDataSvc.h:84
T begin(T...args)
void ignore() const
Definition: StatusCode.h:106
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
StatusCode TsDataSvc::registerAddress ( const std::string fullPath,
IOpaqueAddress pAddress 
)
override

IDataManagerSvc: Register object address with the data store.

Definition at line 277 of file TsDataSvc.cpp.

278  {
279  if ( fullPath.length() > 0 ) {
280  if ( fullPath[0] != SEPARATOR ) {
281  return registerAddress(m_root, fullPath, pAddress);
282  }
283  IRegistry* pRegistry = 0;
284  return registerAddress(pRegistry, fullPath, pAddress);
285  }
286  return INVALID_OBJ_PATH;
287 }
constexpr char SEPARATOR
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
T length(T...args)
StatusCode registerAddress(const std::string &fullPath, IOpaqueAddress *pAddress) override
IDataManagerSvc: Register object address with the data store.
Definition: TsDataSvc.cpp:277
StatusCode TsDataSvc::registerAddress ( DataObject parentObj,
const std::string objectPath,
IOpaqueAddress pAddress 
)
override

IDataManagerSvc: Register object address with the data store.

Definition at line 290 of file TsDataSvc.cpp.

292  {
293  IRegistry* pRegistry = (0 == parentObj) ? 0 : parentObj->registry();
294  return registerAddress(pRegistry, objectPath, pAddress);
295 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
StatusCode registerAddress(const std::string &fullPath, IOpaqueAddress *pAddress) override
IDataManagerSvc: Register object address with the data store.
Definition: TsDataSvc.cpp:277
StatusCode TsDataSvc::registerAddress ( IRegistry parentObj,
const std::string objectPath,
IOpaqueAddress pAddress 
)
override

IDataManagerSvc: Register object address with the data store.

Definition at line 298 of file TsDataSvc.cpp.

300  {
301  if ( checkRoot() ) {
302  if ( objPath.length() > 0 ) {
303  if ( 0 == parentObj ) {
304  if ( objPath[0] != SEPARATOR ) {
305  return registerAddress(m_root, objPath, pAddress);
306  }
307  std::string::size_type sep = objPath.find(SEPARATOR,1);
308  if ( sep != std::string::npos ) {
309  std::string p_path (objPath, 0, sep);
310  if ( p_path == m_rootName ) {
311  std::string o_path (objPath, sep, objPath.length());
312  return registerAddress(m_root, o_path, pAddress);
313  }
314  }
315  return INVALID_PARENT;
316  }
317  if ( objPath[0] != SEPARATOR ) {
319  path = SEPARATOR;
320  path += objPath;
321  return registerAddress(parentObj, path, pAddress);
322  }
323  RegEntry* par_entry = CAST_REGENTRY(RegEntry*,parentObj);
324  if ( 0 != par_entry ) {
325  std::string::size_type sep = objPath.rfind(SEPARATOR);
326  if ( sep > 0 && sep != std::string::npos ) {
327  std::string p_path (objPath, 0, sep);
328  std::string o_path (objPath, sep, objPath.length());
329  RegEntry* p_entry = par_entry->findLeaf(p_path);
330  // Create default object leafs if the
331  // intermediate nodes are not present
332  if ( 0 == p_entry && m_forceLeaves ) {
333  DataObject *pLeaf = createDefaultObject();
334  StatusCode sc = registerObject(par_entry->identifier(),
335  p_path,
336  pLeaf);
337  if ( ! sc.isSuccess() ) {
338  delete pLeaf;
339  }
340  p_entry = par_entry->findLeaf(p_path);
341  }
342  if ( 0 != p_entry ) {
343  return registerAddress(p_entry, o_path, pAddress);
344  }
345  return INVALID_PARENT;
346  }
347  StatusCode status = par_entry->add(objPath, pAddress);
348  if ( status.isSuccess() ) {
349  return status;
350  }
351  return DOUBL_OBJ_PATH;
352  }
353  return INVALID_PARENT;
354  }
355  return INVALID_OBJ_PATH;
356  }
357  return INVALID_ROOT;
358 }
RegistryEntry * findLeaf(boost::string_ref path) const
Find identified leaf in this registry node.
Definition: RegistryEntry.h:95
constexpr char SEPARATOR
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
virtual long add(const std::string &name, DataObject *pObject, bool is_soft=false)
Add entry to data store.
STL class.
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
virtual DataObject * createDefaultObject() const
Create default objects in case forced creation of leaves is requested.
Definition: TsDataSvc.cpp:1385
StatusCode registerObject(const std::string &fullPath, DataObject *pObject) override
Register object with the data store.
Definition: TsDataSvc.cpp:427
StatusCode registerAddress(const std::string &fullPath, IOpaqueAddress *pAddress) override
IDataManagerSvc: Register object address with the data store.
Definition: TsDataSvc.cpp:277
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
Gaudi::Property< bool > m_forceLeaves
Definition: TsDataSvc.h:72
const std::string & identifier() const override
Full identifier (or key)
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:71
StatusCode TsDataSvc::registerObject ( const std::string fullPath,
DataObject pObject 
)
override

Register object with the data store.

Definition at line 427 of file TsDataSvc.cpp.

428  {
429  return registerObject(0, fullPath, pObject);
430 }
StatusCode registerObject(const std::string &fullPath, DataObject *pObject) override
Register object with the data store.
Definition: TsDataSvc.cpp:427
StatusCode TsDataSvc::registerObject ( const std::string parentPath,
const std::string objPath,
DataObject pObject 
)
override

Register object with the data store.

Definition at line 434 of file TsDataSvc.cpp.

436  {
437  DataObject* pO = 0;
438  StatusCode status = retrieveObject(parentPath, pO);
439  if ( !status.isSuccess() && m_forceLeaves ) {
440  pO = createDefaultObject();
441  status = registerObject(parentPath, pO);
442  if ( !status.isSuccess() ) {
443  pO->release();
444  }
445  }
446  if ( status.isSuccess() ) {
447  status = registerObject(pO, objPath, pObject);
448  }
449  return status;
450 }
StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:881
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
virtual unsigned long release()
release reference to object
Definition: DataObject.cpp:56
virtual DataObject * createDefaultObject() const
Create default objects in case forced creation of leaves is requested.
Definition: TsDataSvc.cpp:1385
StatusCode registerObject(const std::string &fullPath, DataObject *pObject) override
Register object with the data store.
Definition: TsDataSvc.cpp:427
Gaudi::Property< bool > m_forceLeaves
Definition: TsDataSvc.h:72
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
StatusCode TsDataSvc::registerObject ( const std::string parentPath,
int  item,
DataObject pObject 
)
override

Register object with the data store.

Definition at line 453 of file TsDataSvc.cpp.

455  {
456  return registerObject(parentPath, itemToPath(item), pObject);
457 }
StatusCode registerObject(const std::string &fullPath, DataObject *pObject) override
Register object with the data store.
Definition: TsDataSvc.cpp:427
StatusCode TsDataSvc::registerObject ( DataObject parentObj,
const std::string objPath,
DataObject pObject 
)
override

Register object with the data store.

Definition at line 467 of file TsDataSvc.cpp.

469  {
470  if ( checkRoot() ) {
471  if ( 0 == parentObj ) {
472  if ( objPath.length() > 0 ) {
473  if ( objPath[0] == SEPARATOR ) {
474  std::string::size_type sep = objPath.find(SEPARATOR,1);
475  if ( sep != std::string::npos ) {
476  std::string p_path (objPath, 0, sep);
477  std::string o_path (objPath, sep, objPath.length());
478  return registerObject(p_path, o_path, pObject);
479  }
480  }
481  else {
482  return registerObject(m_rootName, objPath, pObject);
483  }
484  }
485  return INVALID_OBJ_PATH;
486  }
487  RegEntry* node_entry = CAST_REGENTRY(RegEntry*,parentObj->registry());
488  if ( 0 != node_entry ) {
489  StatusCode status = INVALID_PARENT;
490  std::string::size_type sep = objPath.find(SEPARATOR,1);
491  if ( sep != std::string::npos ) {
492  std::string p_path (objPath, 0, sep);
493  std::string o_path (objPath, sep, objPath.length());
494  RegEntry* par_entry = node_entry->findLeaf(p_path);
495  // Create default object leafs if the
496  // intermediate nodes are not present
497  if ( 0 == par_entry && m_forceLeaves ) {
498  DataObject *pLeaf = createDefaultObject();
499  StatusCode sc = registerObject(parentObj, p_path, pLeaf);
500  if ( ! sc.isSuccess() ) {
501  delete pLeaf;
502  }
503  par_entry = node_entry->findLeaf(p_path);
504  }
505  else if ( 0 != par_entry && par_entry->object() == 0 ) {
506  status = retrieveEntry( node_entry, p_path, par_entry);
507  if ( !status.isSuccess() && !par_entry->address() && m_forceLeaves ) {
508  DataObject *pLeaf = createDefaultObject();
509  StatusCode sc = registerObject(parentObj, p_path, pLeaf);
510  if ( ! sc.isSuccess() ) {
511  delete pLeaf;
512  }
513  par_entry = node_entry->findLeaf(p_path);
514  }
515  }
516  node_entry = par_entry;
517  if ( 0 != node_entry ) {
518  DataObject* obj = node_entry->object();
519  if ( 0 != obj ) {
520  status = registerObject( obj, o_path, pObject );
521  }
522  }
523  }
524  else {
525  RegEntry* leaf = node_entry->findLeaf(objPath);
526  if ( 0 == leaf ) {
527  status = node_entry->add( objPath, pObject );
528  }
529  else {
530  DataObject* obj = leaf->object();
531  if ( 0 == obj ) {
532  if (0 == pObject) {
533  error() << "registerObject: trying to register null DataObject" << endmsg;
534  return StatusCode::FAILURE;
535  }
536  else {
537  pObject->setRegistry(leaf);
538  }
539  leaf->setAddress(0);
540  leaf->setObject(pObject);
541  status = StatusCode::SUCCESS;
542  }
543  else {
544  status = DOUBL_OBJ_PATH;
545  }
546  }
547  }
548  return status;
549  }
550  return INVALID_PARENT;
551  }
552  return INVALID_ROOT;
553 }
RegistryEntry * findLeaf(boost::string_ref path) const
Find identified leaf in this registry node.
Definition: RegistryEntry.h:95
DataObject * object() const override
Retrive object behind the link.
constexpr char SEPARATOR
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
virtual long add(const std::string &name, DataObject *pObject, bool is_soft=false)
Add entry to data store.
void setRegistry(IRegistry *pRegistry)
Set pointer to Registry.
Definition: DataObject.h:70
void setAddress(IOpaqueAddress *pAddress) override
Set/Update Opaque address.
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
STL class.
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
void setObject(DataObject *obj)
Set/Update object address.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
T find(T...args)
T length(T...args)
virtual DataObject * createDefaultObject() const
Create default objects in case forced creation of leaves is requested.
Definition: TsDataSvc.cpp:1385
StatusCode registerObject(const std::string &fullPath, DataObject *pObject) override
Register object with the data store.
Definition: TsDataSvc.cpp:427
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
Gaudi::Property< bool > m_forceLeaves
Definition: TsDataSvc.h:72
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode retrieveEntry(DataSvcHelpers::RegistryEntry *pNode, const std::string &path, DataSvcHelpers::RegistryEntry *&pEntry)
Retrieve registry entry from store.
Definition: TsDataSvc.cpp:778
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:71
StatusCode TsDataSvc::registerObject ( DataObject parentObj,
int  item,
DataObject pObject 
)
override

Register object with the data store.

Definition at line 460 of file TsDataSvc.cpp.

462  {
463  return registerObject(parentObj, itemToPath(item), pObject);
464 }
StatusCode registerObject(const std::string &fullPath, DataObject *pObject) override
Register object with the data store.
Definition: TsDataSvc.cpp:427
StatusCode TsDataSvc::reinitialize ( )
override

Service initialization.

Service reinitialization.

Definition at line 1335 of file TsDataSvc.cpp.

1335  {
1336  StatusCode sc;
1337  // the finalize part is copied here
1338  setDataLoader(0).ignore();
1339  resetPreLoad().ignore();
1340  clearStore().ignore();
1341  if ( m_incidentSvc ) {
1343  m_incidentSvc = 0;
1344  }
1345  // re-initialize the base class
1346  sc = Service::reinitialize();
1347  if ( UNLIKELY(!sc.isSuccess()) ) {
1348  error() << "Unable to reinitialize base class" << endmsg;
1349  return sc;
1350  }
1351  // the initialize part is copied here
1352  sc = service("IncidentSvc", m_incidentSvc, true);
1353  if ( UNLIKELY(!sc.isSuccess()) ) {
1354  error() << "Failed to access incident service." << endmsg;
1355  return sc;
1356  }
1357  // return
1358  return StatusCode::SUCCESS;
1359 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
#define UNLIKELY(x)
Definition: Kernel.h:126
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:214
StatusCode resetPreLoad() override
Clear the preload list.
Definition: TsDataSvc.cpp:1284
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
IIncidentSvc * m_incidentSvc
Pointer to incident service.
Definition: TsDataSvc.h:68
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode reinitialize() override
Definition: Service.cpp:250
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&#39;t already exist.
Definition: Service.h:85
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
Definition: TsDataSvc.cpp:115
void ignore() const
Definition: StatusCode.h:106
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode TsDataSvc::removePreLoadItem ( const DataStoreItem item)
override

Remove an item from the preload list.

Definition at line 1269 of file TsDataSvc.cpp.

1269  {
1270  LoadItems::iterator i =
1272  if ( i != m_preLoads.end() ) {
1274  }
1275  return StatusCode::SUCCESS;
1276 }
T end(T...args)
T remove(T...args)
LoadItems m_preLoads
Items to be pre-loaded.
Definition: TsDataSvc.h:84
T erase(T...args)
T begin(T...args)
StatusCode TsDataSvc::removePreLoadItem ( const std::string itemPath)
override

Add an item to the preload list.

Definition at line 1279 of file TsDataSvc.cpp.

1279  {
1280  return removePreLoadItem( DataStoreItem(itemPath,1) );
1281 }
StatusCode removePreLoadItem(const DataStoreItem &item) override
Remove an item from the preload list.
Definition: TsDataSvc.cpp:1269
Description of the DataStoreItem class.
Definition: DataStoreItem.h:17
StatusCode TsDataSvc::resetPreLoad ( )
override

Clear the preload list.

Definition at line 1284 of file TsDataSvc.cpp.

1284  {
1286  return StatusCode::SUCCESS;
1287 }
T end(T...args)
LoadItems m_preLoads
Items to be pre-loaded.
Definition: TsDataSvc.h:84
T erase(T...args)
T begin(T...args)
StatusCode TsDataSvc::retrieveEntry ( DataSvcHelpers::RegistryEntry pNode,
const std::string path,
DataSvcHelpers::RegistryEntry *&  pEntry 
)
protected

Retrieve registry entry from store.

Definition at line 778 of file TsDataSvc.cpp.

780  {
782  std::string::size_type sep = path.find(SEPARATOR,1);
783  StatusCode status = StatusCode(INVALID_ROOT,true);
784  pEntry = 0;
785  // A.Valassi 16.08.2001 avoid core dump if store is empty
786  if ( checkRoot() ) {
787  if ( 0 == parentObj ) {
788  if ( path.length() == 0 || path == m_rootName ) {
789  return retrieveEntry(m_root, "", pEntry);
790  }
791  else if ( path[0] != SEPARATOR ) {
792  return retrieveEntry(m_root, path, pEntry);
793  }
794  else if ( sep != std::string::npos ) {
795  if ( m_root->object() == 0 ) {
796  RegEntry* r = 0;
797  status = retrieveEntry(m_root, "", r);
798  if ( !status.isSuccess() ) {
799  return status;
800  }
801  }
802  std::string o_path (path, sep, path.length());
803  return retrieveEntry(m_root, o_path, pEntry);
804  }
805  return INVALID_OBJ_PATH;
806  }
807  if ( sep != std::string::npos ) { // the string contains a separator (after pos 0)
808  std::string p_path (path,0,sep);
809  std::string o_path (path,sep,path.length());
810  if (!parentObj->object()) { // if the parent object has not been loaded yet, load it now
811  status = loadObject(parentObj);
812  if ( !status.isSuccess() ) {
813  return status;
814  }
815  }
816  RegEntry* root_entry = parentObj->findLeaf(p_path);
817  if ( !root_entry && m_enableFaultHdlr ) {
818  // If not even the parent is there, an incident
819  // to load the parent must be fired...
820  handleDataFault(parentObj, p_path);
821  root_entry = parentObj->findLeaf(p_path);
822  }
823  if ( root_entry ) {
824  DataObject* pO = root_entry->object();
825  if ( 0 == pO ) {
826  // Object is not loaded: load the object if at all possible
827  status = loadObject(root_entry);
828  if ( !status.isSuccess() ) {
829  return status;
830  }
831  }
832  if ( root_entry->isSoft() ) {
833  root_entry = CAST_REGENTRY(RegEntry*,pO->registry());
834  }
835  return retrieveEntry (root_entry, o_path, pEntry);
836  }
837  return status;
838  }
839  else if ( path.length() == 0 ) {
840  pEntry = parentObj;
841  }
842  else {
843  if (!parentObj->object()) { // if the parent object has not been loaded yet, load it now
844  status = loadObject(parentObj);
845  if ( !status.isSuccess() ) {
846  return status;
847  }
848  }
849  // last leave in search: find leaf and load
850  pEntry = parentObj->findLeaf(path);
851  // If no registry entry was found, trigger incident for action-on-demand
852  if ( !pEntry && m_enableFaultHdlr ) {
853  handleDataFault(parentObj, path);
854  pEntry = (0==path.length()) ? parentObj : parentObj->findLeaf(path);
855  }
856  }
857  // Check results and return
858  if ( 0 == pEntry ) {
859  status = INVALID_OBJ_PATH;
860  }
861  else if ( 0 == pEntry->object() ) {
862  status = loadObject(pEntry);
863  }
864  else if ( m_enableAccessHdlr ) {
865  // Fire data access incident
866  // I do not know if this is a good idea....
867  // This fires too often!
868  //
869  //DataIncident incident(name(), m_accessName, pEntry->identifier());
870  //m_incidentSvc->fireIncident(incident);
871  status = SUCCESS;
872  }
873  else {
874  status = SUCCESS;
875  }
876  }
877  return status;
878 }
RegistryEntry * findLeaf(boost::string_ref path) const
Find identified leaf in this registry node.
Definition: RegistryEntry.h:95
DataObject * object() const override
Retrive object behind the link.
constexpr char SEPARATOR
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
STL class.
virtual bool isSoft() const
Is the link soft or hard.
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Gaudi::Property< bool > m_enableAccessHdlr
Definition: TsDataSvc.h:79
DataObject * handleDataFault(IRegistry *pReg, const std::string &path="")
Invoke data fault handling if enabled.
Definition: TsDataSvc.cpp:656
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
T find(T...args)
T length(T...args)
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
virtual StatusCode loadObject(IRegistry *pNode)
Invoke Persistency service to create transient object from its persistent representation.
Definition: TsDataSvc.cpp:691
StatusCode retrieveEntry(DataSvcHelpers::RegistryEntry *pNode, const std::string &path, DataSvcHelpers::RegistryEntry *&pEntry)
Retrieve registry entry from store.
Definition: TsDataSvc.cpp:778
Gaudi::Property< bool > m_enableFaultHdlr
Definition: TsDataSvc.h:75
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:71
StatusCode TsDataSvc::retrieveObject ( IRegistry pDirectory,
const std::string path,
DataObject *&  pObject 
)
override

Retrieve object from data store.

Retrieve object identified by its directory from the data store.

Definition at line 881 of file TsDataSvc.cpp.

883  {
885  pObject = 0;
886  RegEntry *result = 0, *parent = CAST_REGENTRY(RegEntry*,pRegistry);
887  StatusCode status = retrieveEntry(parent, path, result);
888  if ( status.isSuccess() ) {
889  pObject = result->object();
890  }
891  return status;
892 }
DataObject * object() const override
Retrive object behind the link.
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
StatusCode retrieveEntry(DataSvcHelpers::RegistryEntry *pNode, const std::string &path, DataSvcHelpers::RegistryEntry *&pEntry)
Retrieve registry entry from store.
Definition: TsDataSvc.cpp:778
StatusCode TsDataSvc::retrieveObject ( const std::string fullPath,
DataObject *&  pObject 
)
override

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

Definition at line 895 of file TsDataSvc.cpp.

896  {
897  IRegistry* nullDir = 0;
898  return retrieveObject(nullDir, fullPath, pObject);
899 }
StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:881
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
StatusCode TsDataSvc::retrieveObject ( const std::string parentPath,
const std::string objPath,
DataObject *&  pObject 
)
override

Retrieve object from data store.

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

Definition at line 902 of file TsDataSvc.cpp.

904  {
905  DataObject* parent = 0;
906  StatusCode status = retrieveObject(parentPath, parent);
907  if ( status.isSuccess() ) {
908  status = retrieveObject (parent, objectPath, pObject);
909  }
910  return status;
911 }
StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:881
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
StatusCode TsDataSvc::retrieveObject ( const std::string parentPath,
int  item,
DataObject *&  pObject 
)
override

Retrieve object from data store.

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

Definition at line 914 of file TsDataSvc.cpp.

916  {
917  return retrieveObject(parentPath, itemToPath(item), pObject);
918 }
StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:881
StatusCode TsDataSvc::retrieveObject ( DataObject parentObj,
const std::string objPath,
DataObject *&  pObject 
)
override

Retrieve object from data store.

Definition at line 921 of file TsDataSvc.cpp.

923  {
924  IRegistry* pRegistry = (0==parentObj) ? 0 : parentObj->registry();
925  return retrieveObject(pRegistry, path, pObject);
926 }
StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:881
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
StatusCode TsDataSvc::retrieveObject ( DataObject parentObj,
int  item,
DataObject *&  pObject 
)
override

Retrieve object from data store.

Retrieve registry entry from store.

Definition at line 929 of file TsDataSvc.cpp.

931  {
932  return retrieveObject(parentObj, itemToPath(item), pObject);
933 }
StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:881
CLID TsDataSvc::rootCLID ( ) const
override

IDataManagerSvc: Accessor for root event CLID.

CLID for root Event.

Definition at line 1375 of file TsDataSvc.cpp.

1375  {
1376  return( (CLID)m_rootCLID );
1377 }
Gaudi::Property< CLID > m_rootCLID
Definition: TsDataSvc.h:70
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
const std::string & TsDataSvc::rootName ( ) const
override

IDataManagerSvc: Accessor for root event name.

Name for root Event.

Definition at line 1380 of file TsDataSvc.cpp.

1380  {
1381  return( m_rootName );
1382 }
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:71
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 214 of file TsDataSvc.cpp.

214  {
215  if ( 0 != pDataLoader ) pDataLoader->addRef();
216  if ( 0 != m_dataLoader ) m_dataLoader->release();
217  if ( 0 != pDataLoader ) {
218  pDataLoader->setDataProvider(dpsvc == nullptr ? this : dpsvc).ignore();
219  }
220  m_dataLoader = pDataLoader;
221  return SUCCESS;
222 }
IConversionSvc * m_dataLoader
Pointer to data loader service.
Definition: TsDataSvc.h:66
virtual unsigned long release()=0
Release Interface instance.
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 165 of file TsDataSvc.cpp.

166  {
167  clearStore().ignore();
168  return i_setRoot (std::move(root_path), pRootObj);
169 }
T move(T...args)
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:176
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
Definition: TsDataSvc.cpp:115
void ignore() const
Definition: StatusCode.h:106
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 191 of file TsDataSvc.cpp.

192  {
193  clearStore().ignore();
194  return i_setRoot (std::move(root_path), pRootAddr);
195 }
T move(T...args)
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:176
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
Definition: TsDataSvc.cpp:115
void ignore() const
Definition: StatusCode.h:106
StatusCode TsDataSvc::traverseSubTree ( const std::string 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 127 of file TsDataSvc.cpp.

128  {
130  DataObject* pO = 0;
131  StatusCode status = findObject(sub_tree_path, pO);
132  if ( status.isSuccess() ) {
133  status = traverseSubTree(pO, pAgent);
134  }
135  return status;
136 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
StatusCode traverseSubTree(const std::string &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:127
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
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 139 of file TsDataSvc.cpp.

140  {
142  if ( checkRoot() ) {
143  RegEntry* entry = CAST_REGENTRY(RegEntry*,pObject->registry());
144  if ( 0 != entry ) {
145  return entry->traverseTree(pAgent);
146  }
147  return INVALID_OBJECT;
148  }
149  return INVALID_ROOT;
150 }
virtual long traverseTree(IDataStoreAgent *pAgent, int level=0)
traverse data tree
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
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 153 of file TsDataSvc.cpp.

153  {
155  if ( checkRoot() ) {
156  return m_root->traverseTree(pAgent);
157  }
158  return INVALID_ROOT;
159 }
virtual long traverseTree(IDataStoreAgent *pAgent, int level=0)
traverse data tree
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
StatusCode TsDataSvc::unlinkObject ( IRegistry from,
const std::string objPath 
)
override

Remove a link to another object.

Definition at line 1187 of file TsDataSvc.cpp.

1188  {
1190  if ( checkRoot() ) {
1191  try {
1192  RegEntry* from_entry = CAST_REGENTRY(RegEntry*,from);
1193  if ( 0 != from_entry ) {
1194  std::string::size_type sep = objPath.rfind(SEPARATOR);
1195  if ( sep > 0 && sep != std::string::npos ) { // in case the objPath is a sub-directory itself
1196  DataObject* pO = 0;
1197  std::string fromPath(objPath, 0, sep);
1198  StatusCode sc = findObject(from, fromPath, pO);
1199  if ( sc.isSuccess() ) {
1200  std::string toPath(objPath, sep, objPath.length());
1201  sc = unlinkObject(pO->registry(), toPath);
1202  }
1203  return sc;
1204  }
1205  StatusCode status = from_entry->remove( objPath );
1206  if ( status.isSuccess() ) {
1207  return status;
1208  }
1209  return INVALID_OBJ_PATH;
1210  }
1211  }
1212  catch (...) {
1213  }
1214  return INVALID_PARENT;
1215  }
1216  return INVALID_ROOT;
1217 }
StatusCode unlinkObject(IRegistry *from, const std::string &objPath) override
Remove a link to another object.
Definition: TsDataSvc.cpp:1187
constexpr char SEPARATOR
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
T rfind(T...args)
virtual long remove(const std::string &name)
Remove an entry from the store.
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
STL class.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
T length(T...args)
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
StatusCode TsDataSvc::unlinkObject ( const std::string fromPath,
const std::string objPath 
)
override

Remove a link to another object.

Definition at line 1234 of file TsDataSvc.cpp.

1235  {
1236  DataObject* pObject = 0;
1237  StatusCode status = findObject(from, pObject);
1238  if ( status.isSuccess() ) {
1239  status = unlinkObject(pObject->registry(), objPath);
1240  }
1241  return status;
1242 }
StatusCode unlinkObject(IRegistry *from, const std::string &objPath) override
Remove a link to another object.
Definition: TsDataSvc.cpp:1187
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
StatusCode TsDataSvc::unlinkObject ( DataObject fromObj,
const std::string objPath 
)
override

Remove a link to another object.

Definition at line 1245 of file TsDataSvc.cpp.

1246  {
1247  if ( checkRoot() ) {
1248  IRegistry* from_entry = m_root->findLeaf(from);
1249  return unlinkObject(from_entry, objPath);
1250  }
1251  return INVALID_ROOT;
1252 }
RegistryEntry * findLeaf(boost::string_ref path) const
Find identified leaf in this registry node.
Definition: RegistryEntry.h:95
StatusCode unlinkObject(IRegistry *from, const std::string &objPath) override
Remove a link to another object.
Definition: TsDataSvc.cpp:1187
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
StatusCode TsDataSvc::unlinkObject ( const std::string fullPath)
override

Remove a link to another object.

Definition at line 1220 of file TsDataSvc.cpp.

1220  {
1221  if ( fullPath.length() > 0 ) {
1222  if ( fullPath[0] != SEPARATOR ) {
1223  return unlinkObject(m_rootName, fullPath);
1224  }
1225  std::string::size_type sep = fullPath.rfind(SEPARATOR);
1226  std::string objPath(fullPath, sep, fullPath.length());
1227  std::string fromPath(fullPath, 0, sep);
1228  return unlinkObject(fromPath, objPath);
1229  }
1230  return INVALID_OBJ_PATH;
1231 }
StatusCode unlinkObject(IRegistry *from, const std::string &objPath) override
Remove a link to another object.
Definition: TsDataSvc.cpp:1187
constexpr char SEPARATOR
T rfind(T...args)
STL class.
T length(T...args)
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:71
StatusCode TsDataSvc::unregisterAddress ( const std::string fullPath)
override

IDataManagerSvc: Unregister object address from the data store.

Definition at line 361 of file TsDataSvc.cpp.

361  {
362  if ( fullPath.length() > 0 ) {
363  IRegistry* pRegistry = 0;
364  if ( fullPath[0] != SEPARATOR ) {
365  return unregisterAddress(m_root, fullPath);
366  }
367  return unregisterAddress(pRegistry, fullPath);
368  }
369  return INVALID_OBJ_PATH;
370 }
StatusCode unregisterAddress(const std::string &fullPath) override
IDataManagerSvc: Unregister object address from the data store.
Definition: TsDataSvc.cpp:361
constexpr char SEPARATOR
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
T length(T...args)
StatusCode TsDataSvc::unregisterAddress ( DataObject pParent,
const std::string objPath 
)
override

IDataManagerSvc: Unregister object address from the data store.

Definition at line 373 of file TsDataSvc.cpp.

374  {
375  IRegistry* pRegistry = (0 == pParent) ? 0 : pParent->registry();
376  return unregisterAddress(pRegistry, objPath);
377 }
StatusCode unregisterAddress(const std::string &fullPath) override
IDataManagerSvc: Unregister object address from the data store.
Definition: TsDataSvc.cpp:361
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
StatusCode TsDataSvc::unregisterAddress ( IRegistry pParent,
const std::string objPath 
)
override

IDataManagerSvc: Unregister object address from the data store.

Definition at line 380 of file TsDataSvc.cpp.

381  {
382  if ( checkRoot() ) {
383  if ( objPath.length() > 0 ) {
384  if ( 0 == pParent ) {
385  if ( objPath[0] != SEPARATOR ) {
386  return unregisterAddress(m_root, objPath);
387  }
388  std::string::size_type sep = objPath.find(SEPARATOR,1);
389  if ( sep != std::string::npos ) {
390  std::string p_path (objPath, 0, sep);
391  if ( p_path == m_rootName ) {
392  std::string o_path (objPath, sep, objPath.length());
393  return unregisterAddress(m_root, o_path);
394  }
395  }
396  return INVALID_PARENT;
397  }
398  if ( objPath[0] != SEPARATOR ) {
400  path = SEPARATOR;
401  path += objPath;
402  return unregisterAddress(pParent, path);
403  }
404  RegEntry* node_entry = CAST_REGENTRY(RegEntry*,pParent);
405  if ( 0 != node_entry ) {
406  RegEntry* leaf_entry = node_entry->findLeaf(objPath);
407  if ( 0 != leaf_entry ) {
408  std::string::size_type sep = objPath.rfind(SEPARATOR);
409  if ( sep > 0 && sep != std::string::npos ) {
410  std::string path = objPath.substr(sep);
411  return unregisterAddress(leaf_entry->parent(), path);
412  }
413  StatusCode status = node_entry->remove(objPath);
414  if ( status.isSuccess() ) {
415  return status;
416  }
417  }
418  }
419  return INVALID_PARENT;
420  }
421  return INVALID_OBJ_PATH;
422  }
423  return INVALID_ROOT;
424 }
StatusCode unregisterAddress(const std::string &fullPath) override
IDataManagerSvc: Unregister object address from the data store.
Definition: TsDataSvc.cpp:361
RegistryEntry * findLeaf(boost::string_ref path) const
Find identified leaf in this registry node.
Definition: RegistryEntry.h:95
constexpr char SEPARATOR
T rfind(T...args)
virtual long remove(const std::string &name)
Remove an entry from the store.
STL class.
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
T find(T...args)
T length(T...args)
virtual IRegistry * parent() const
Pointer to parent directory entry.
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
T substr(T...args)
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
Gaudi::Property< std::string > m_rootName
Definition: TsDataSvc.h:71
StatusCode TsDataSvc::unregisterObject ( const std::string fullPath)
override

Unregister object from the data store.

Definition at line 556 of file TsDataSvc.cpp.

556  {
557  DataObject* pObject = 0;
558  StatusCode status = findObject(fullPath, pObject);
559  if ( status.isSuccess() ) {
560  RegEntry* pEntry = CAST_REGENTRY(RegEntry*,pObject->registry());
561  if ( 0 != pEntry ) {
562  if ( pEntry->isEmpty() ) {
563  RegEntry* pParent = pEntry->parentEntry();
564  if ( 0 != pParent ) {
565  if ( 0 != pObject ) {
566  pObject->addRef();
567  }
568  pParent->remove(pEntry);
569  return StatusCode::SUCCESS;
570  }
571  return INVALID_PARENT;
572  }
573  return DIR_NOT_EMPTY;
574  }
575  return INVALID_ROOT;
576  }
577  return status;
578 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
virtual long remove(const std::string &name)
Remove an entry from the store.
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
virtual RegistryEntry * parentEntry()
Pointer to parent registry entry.
Definition: RegistryEntry.h:91
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:26
virtual bool isEmpty() const
Simple check if the Container is empty.
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
StatusCode TsDataSvc::unregisterObject ( const std::string parentPath,
const std::string objectPath 
)
override

Unregister object from the data store.

Definition at line 581 of file TsDataSvc.cpp.

582  {
583  DataObject* pO = 0;
584  StatusCode status = findObject(parentPath, pO);
585  if ( status.isSuccess() ) {
586  status = unregisterObject(pO, objPath);
587  }
588  return status;
589 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode unregisterObject(const std::string &fullPath) override
Unregister object from the data store.
Definition: TsDataSvc.cpp:556
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
StatusCode TsDataSvc::unregisterObject ( const std::string parentPath,
int  item 
)
override

Unregister object from the data store.

Definition at line 592 of file TsDataSvc.cpp.

592  {
593  return unregisterObject(parentPath, itemToPath(item));
594 }
StatusCode unregisterObject(const std::string &fullPath) override
Unregister object from the data store.
Definition: TsDataSvc.cpp:556
StatusCode TsDataSvc::unregisterObject ( DataObject pObject)
override

Unregister object from the data store.

Definition at line 597 of file TsDataSvc.cpp.

597  {
598  if ( checkRoot() ) {
599  RegEntry* entry = m_root->findLeaf(pObject);
600  if ( 0 != entry ) {
601  RegEntry* parent = entry->parentEntry();
602  if ( 0 != parent ) {
603  if ( entry->isEmpty() ) {
604  if ( 0 != entry->object() ) {
605  entry->object()->addRef();
606  }
607  if ( 0 != parent ) {
608  parent->remove(entry);
609  }
610  return SUCCESS;
611  }
612  return INVALID_PARENT;
613  }
614  return DIR_NOT_EMPTY;
615  }
616  return INVALID_OBJECT;
617  }
618  return INVALID_ROOT;
619 }
RegistryEntry * findLeaf(boost::string_ref path) const
Find identified leaf in this registry node.
Definition: RegistryEntry.h:95
DataObject * object() const override
Retrive object behind the link.
virtual long remove(const std::string &name)
Remove an entry from the store.
virtual RegistryEntry * parentEntry()
Pointer to parent registry entry.
Definition: RegistryEntry.h:91
virtual unsigned long addRef()
Add reference to object.
Definition: DataObject.cpp:63
DataSvcHelpers::RegistryEntry * m_root
Pointer to root entry.
Definition: TsDataSvc.h:86
virtual bool isEmpty() const
Simple check if the Container is empty.
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
StatusCode TsDataSvc::unregisterObject ( DataObject pObject,
const std::string objectPath 
)
override

Unregister object from the data store.

Definition at line 622 of file TsDataSvc.cpp.

623  {
624  if ( checkRoot() ) {
625  try {
626  RegEntry* parent = CAST_REGENTRY(RegEntry*,pParentObj->registry());
627  if ( 0 != parent ) {
628  RegEntry* entry = parent->findLeaf(objectPath);
629  if ( 0 != entry ) {
630  if ( entry->isEmpty() ) {
631  if ( 0 != entry->object() ) {
632  entry->object()->addRef();
633  }
634  parent->remove(entry);
635  return SUCCESS;
636  }
637  return DIR_NOT_EMPTY;
638  }
639  return INVALID_OBJECT;
640  }
641  }
642  catch(...) {
643  }
644  return INVALID_PARENT;
645  }
646  return INVALID_ROOT;
647 }
RegistryEntry * findLeaf(boost::string_ref path) const
Find identified leaf in this registry node.
Definition: RegistryEntry.h:95
DataObject * object() const override
Retrive object behind the link.
virtual long remove(const std::string &name)
Remove an entry from the store.
virtual unsigned long addRef()
Add reference to object.
Definition: DataObject.cpp:63
virtual bool isEmpty() const
Simple check if the Container is empty.
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:36
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:335
#define CAST_REGENTRY(x, y)
Definition: TsDataSvc.cpp:64
StatusCode TsDataSvc::unregisterObject ( DataObject pObject,
int  item 
)
override

Unregister object from the data store.

Definition at line 650 of file TsDataSvc.cpp.

650  {
651  return unregisterObject(pParentObj, itemToPath(item));
652 }
StatusCode unregisterObject(const std::string &fullPath) override
Unregister object from the data store.
Definition: TsDataSvc.cpp:556
StatusCode TsDataSvc::updateObject ( IRegistry pDirectory)
override

Update object identified by its directory entry.

Update object.

Definition at line 1017 of file TsDataSvc.cpp.

1017  {
1018  if ( 0 == pRegistry ) { // Precondition:
1019  return INVALID_OBJ_ADDR; // Addres must be valid
1020  }
1021  DataObject* toUpdate = pRegistry->object();
1022  if ( 0 == toUpdate ) { // Try first to load
1023  return loadObject(pRegistry);
1024  }
1025  return updateObject(toUpdate);
1026 }
StatusCode updateObject(IRegistry *pDirectory) override
Update object identified by its directory entry.
Definition: TsDataSvc.cpp:1017
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
virtual StatusCode loadObject(IRegistry *pNode)
Invoke Persistency service to create transient object from its persistent representation.
Definition: TsDataSvc.cpp:691
StatusCode TsDataSvc::updateObject ( const std::string updatePath)
override

Update object.

Definition at line 1007 of file TsDataSvc.cpp.

1007  {
1008  DataObject* pO = 0;
1009  StatusCode status = findObject(updatePath, pO);
1010  if ( status.isSuccess() ) {
1011  return updateObject(pO);
1012  }
1013  return retrieveObject(updatePath, pO);
1014 }
StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject) override
Retrieve object from data store.
Definition: TsDataSvc.cpp:881
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
StatusCode updateObject(IRegistry *pDirectory) override
Update object identified by its directory entry.
Definition: TsDataSvc.cpp:1017
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
StatusCode TsDataSvc::updateObject ( DataObject toUpdate)
override

Update object.

Definition at line 1029 of file TsDataSvc.cpp.

1029  {
1031  StatusCode status = INVALID_OBJ_ADDR;
1032  if ( 0 == toUpdate ) { // Precondition:
1033  return INVALID_OBJECT; // Address must be valid
1034  }
1035  IRegistry* pRegistry = toUpdate->registry(); // Precondition:
1036  if ( 0 == pRegistry ) { // Need valid registry
1037  return INVALID_OBJECT;
1038  }
1039  IOpaqueAddress* pAddress = pRegistry->address(); // Precondition:
1040  if ( 0 == pAddress ) { // Need valid address
1041  return INVALID_OBJ_ADDR;
1042  }
1043  IConversionSvc* pLoader = getDataLoader(pRegistry);
1044  if ( 0 == pLoader ) { // Precondition:
1045  return NO_DATA_LOADER; // Data loader must be present
1046  }
1047  if ( m_inhibitPathes.size() > 0 ) {
1048  const std::string& ident = pRegistry->identifier();
1050  std::find(m_inhibitPathes.begin(), m_inhibitPathes.end(), ident);
1051  if ( inhibit != m_inhibitPathes.end() ) {
1052  return NO_ACCESS;
1053  }
1054  }
1055  try {
1056  status = pLoader->updateObj(pAddress, toUpdate); // Call data loader
1057  if ( status.isSuccess() ) {
1058  status = pLoader->updateObjRefs(pAddress, toUpdate);
1059  }
1060  }
1061  catch( const GaudiException& exc ) {
1062  throw GaudiException("GaudiException in updateObject() " +
1063  pRegistry->name(),
1064  name(),
1065  StatusCode::FAILURE, exc);
1066  }
1067  catch( const std::exception& x) {
1068  throw GaudiException("std::exception in updateObject() " +
1069  pRegistry->name() + ": " +
1070  System::typeinfoName(typeid(x)) + ", " +
1071  x.what(),
1073  }
1074  catch(...) {
1075  throw GaudiException("UNKN exception in updateObject() " +
1076  pRegistry->name(),
1078  }
1079  return status;
1080 }
Define general base for Gaudi exception.
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:289
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:299
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:1392
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
virtual StatusCode updateObj(IOpaqueAddress *pAddress, DataObject *refpObject)=0
Update the transient object from the other representation.
STL class.
virtual const id_type & identifier() const =0
Full identifier (or key)
T what(T...args)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
virtual StatusCode updateObjRefs(IOpaqueAddress *pAddress, DataObject *pObject)=0
Update the references of an updated transient object.
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
STL class.
T find(T...args)
STL class.
Opaque address interface definition.
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
Gaudi::Property< std::vector< std::string > > m_inhibitPathes
Definition: TsDataSvc.h:73
#define STD_LOCK_GUARD_MACRO
Definition: TsDataSvc.cpp:46
StatusCode TsDataSvc::updateObject ( const std::string parentPath,
const std::string updatePath 
)
override

Update object.

Definition at line 1083 of file TsDataSvc.cpp.

1084  {
1085  DataObject* pParent = 0;
1086  StatusCode status = findObject(parentPath, pParent);
1087  if ( status.isSuccess() ) {
1088  status = updateObject( pParent, updatePath);
1089  }
1090  return status;
1091 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
StatusCode updateObject(IRegistry *pDirectory) override
Update object identified by its directory entry.
Definition: TsDataSvc.cpp:1017
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956
StatusCode TsDataSvc::updateObject ( DataObject pParent,
const std::string updatePath 
)
override

Update object.

Definition at line 1094 of file TsDataSvc.cpp.

1095  {
1096  DataObject* pObject = 0;
1097  StatusCode status = findObject(parent, updatePath, pObject);
1098  if ( status.isSuccess() ) {
1099  status = updateObject(pObject);
1100  }
1101  return status;
1102 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
StatusCode updateObject(IRegistry *pDirectory) override
Update object identified by its directory entry.
Definition: TsDataSvc.cpp:1017
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
StatusCode findObject(const std::string &fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition: TsDataSvc.cpp:956

Member Data Documentation

tsDataSvcMutex TsDataSvc::m_accessMutex
protected

Mutex to protect access to the store.

Definition at line 367 of file TsDataSvc.h.

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

Definition at line 81 of file TsDataSvc.h.

IConversionSvc* TsDataSvc::m_dataLoader = nullptr
protected

Pointer to data loader service.

Definition at line 66 of file TsDataSvc.h.

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

Definition at line 79 of file TsDataSvc.h.

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

Definition at line 75 of file TsDataSvc.h.

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

Definition at line 77 of file TsDataSvc.h.

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

Definition at line 72 of file TsDataSvc.h.

IIncidentSvc* TsDataSvc::m_incidentSvc = nullptr
protected

Pointer to incident service.

Definition at line 68 of file TsDataSvc.h.

DataSvcHelpers::InhibitMap* TsDataSvc::m_inhibitMap = nullptr
protected

Map with object paths to be inhibited from loading.

Definition at line 88 of file TsDataSvc.h.

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

Definition at line 73 of file TsDataSvc.h.

LoadItems TsDataSvc::m_preLoads
protected

Items to be pre-loaded.

Definition at line 84 of file TsDataSvc.h.

DataSvcHelpers::RegistryEntry* TsDataSvc::m_root = nullptr
protected

Pointer to root entry.

Definition at line 86 of file TsDataSvc.h.

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

Definition at line 70 of file TsDataSvc.h.

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

Definition at line 71 of file TsDataSvc.h.


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