The Gaudi Framework  v30r4 (9b837755)
TsDataSvc.h
Go to the documentation of this file.
1 #ifndef GAUDIKERNEL_TSDATASVC_H
2 #define GAUDIKERNEL_TSDATASVC_H
3 
4 // Include files
9 #include "GaudiKernel/Service.h"
10 
11 // External libraries
12 #include "tbb/recursive_mutex.h"
13 #include "tbb/spin_mutex.h"
14 
15 namespace
16 {
17  typedef tbb::recursive_mutex tsDataSvcMutex;
18  // typedef tbb::spin_mutex tsDataSvcMutex;
19 }
20 
21 // Forward declarations
22 // Incident service
23 class IIncidentSvc;
24 // Generic address
25 class IOpaqueAddress;
26 // Generic interface to data object class
27 class DataObject;
28 // Data store agent
29 class IDataStoreAgent;
30 
31 // Do not clutter global namespace for helpers...
32 namespace DataSvcHelpers
33 {
34  // Map of objects where loading is inhibited
35  class InhibitMap;
36  // Generic registry entry
37  class RegistryEntry;
38 }
39 
59 class GAUDI_API TsDataSvc : public extends<Service, IDataProviderSvc, IDataManagerSvc>
60 {
61 
63  IConversionSvc* m_dataLoader = nullptr;
65  IIncidentSvc* m_incidentSvc = nullptr;
66 
67  Gaudi::Property<CLID> m_rootCLID{this, "RootCLID", 110 /*CLID_Event*/, "CLID of root entry"};
68  Gaudi::Property<std::string> m_rootName{this, "RootName", "/Event", "name of root entry"};
69  Gaudi::Property<bool> m_forceLeaves{this, "ForceLeaves", false, "force creation of default leaves on registerObject"};
70  Gaudi::Property<std::vector<std::string>> m_inhibitPathes{this, "InhibitPathes", {}, "inhibited leaves"};
71 
72  Gaudi::Property<bool> m_enableFaultHdlr{this, "EnableFaultHandler", false,
73  "enable incidents on data creation requests"};
74  Gaudi::Property<std::string> m_faultName{this, "DataFaultName", "DataFault", "Name of the data fault incident"};
75 
76  Gaudi::Property<bool> m_enableAccessHdlr{this, "EnableAccessHandler", false,
77  "enable incidents on data access requests"};
78  Gaudi::Property<std::string> m_accessName{this, "DataAccessName", "DataAccess", "Name of the data access incident"};
79 
85  DataSvcHelpers::InhibitMap* m_inhibitMap = nullptr;
86 
87 public:
89  CLID rootCLID() const override;
90 
92  const std::string& rootName() const override;
93 
95  StatusCode registerAddress( boost::string_ref fullPath, IOpaqueAddress* pAddress ) override;
96 
98 
100  StatusCode registerAddress( IRegistry* parentObj, boost::string_ref objectPath, IOpaqueAddress* pAddress ) override;
101 
104  StatusCode unregisterAddress( boost::string_ref fullPath ) override;
105 
107  StatusCode unregisterAddress( IRegistry* pParent, boost::string_ref objPath ) override;
108 
112  StatusCode objectLeaves( const DataObject* pObject, std::vector<IRegistry*>& refLeaves ) override;
116  StatusCode objectLeaves( const IRegistry* pRegistry, std::vector<IRegistry*>& refLeaves ) override;
117 
119  StatusCode objectParent( const DataObject* pObject, IRegistry*& refpParent ) override;
121  StatusCode objectParent( const IRegistry* pRegistry, IRegistry*& refpParent ) override;
122 
126  StatusCode clearSubTree( boost::string_ref sub_tree_path ) override;
127 
131  StatusCode clearSubTree( DataObject* pObject ) override;
132 
134  StatusCode clearStore() override;
135 
139  StatusCode traverseSubTree( boost::string_ref sub_tree_path, IDataStoreAgent* pAgent ) override;
140 
142  StatusCode traverseSubTree( DataObject* pObject, IDataStoreAgent* pAgent ) override;
143 
145  StatusCode traverseTree( IDataStoreAgent* pAgent ) override;
146 
149  StatusCode setRoot( std::string root_name, DataObject* pRootObj ) override;
150 
154  virtual StatusCode i_setRoot( std::string root_name, DataObject* pRootObj );
155  StatusCode i_setRoot( DataObject* pRootObj ) { return i_setRoot( m_rootName, pRootObj ); }
156 
159  StatusCode setRoot( std::string root_path, IOpaqueAddress* pRootAddr ) override;
160 
165  virtual StatusCode i_setRoot( std::string root_path, IOpaqueAddress* pRootAddr );
166  StatusCode i_setRoot( IOpaqueAddress* pRootAddr ) { return i_setRoot( m_rootName, pRootAddr ); }
167 
171  StatusCode setDataLoader( IConversionSvc* svc, IDataProviderSvc* dpsvc = nullptr ) override;
172 
174  StatusCode addPreLoadItem( const DataStoreItem& item ) override;
175 
177  StatusCode removePreLoadItem( const DataStoreItem& item ) override;
178 
180  StatusCode resetPreLoad() override;
181 
189  virtual StatusCode preLoad( int depth, int load_depth, DataObject* pObject );
190 
192  StatusCode preLoad() override;
193 
195 
197  StatusCode registerObject( boost::string_ref parentPath, boost::string_ref objPath, DataObject* pObject ) override;
198 
200  StatusCode registerObject( DataObject* parentObj, boost::string_ref objPath, DataObject* pObject ) override;
201 
203  StatusCode unregisterObject( boost::string_ref fullPath ) override;
204 
206  StatusCode unregisterObject( DataObject* pObject ) override;
207 
209  StatusCode unregisterObject( DataObject* pObject, boost::string_ref objectPath ) override;
210 
212 
214  StatusCode retrieveObject( IRegistry* pDirectory, boost::string_ref path, DataObject*& pObject ) override;
215 
217 
219  StatusCode findObject( boost::string_ref fullPath, DataObject*& pObject ) override;
220 
222  StatusCode findObject( IRegistry* pDirectory, boost::string_ref path, DataObject*& pObject ) override;
223 
225 
227  StatusCode linkObject( IRegistry* from, boost::string_ref objPath, DataObject* to ) override;
228 
230  StatusCode linkObject( boost::string_ref fullPath, DataObject* to ) override;
231 
233 
235  StatusCode unlinkObject( IRegistry* from, boost::string_ref objPath ) override;
236 
238  StatusCode unlinkObject( DataObject* fromObj, boost::string_ref objPath ) override;
239 
241  StatusCode unlinkObject( boost::string_ref fullPath ) override;
242 
244  StatusCode updateObject( IRegistry* pDirectory ) override;
245 
247  StatusCode updateObject( DataObject* toUpdate ) override;
248 
250  StatusCode initialize() override;
251 
253  StatusCode reinitialize() override;
254 
256  StatusCode finalize() override;
257 
259  using extends::extends;
260 
262  TsDataSvc( const TsDataSvc& ) = delete;
264  TsDataSvc& operator=( const TsDataSvc& ) = delete;
265 
266 protected:
268  bool checkRoot() { return 0 != m_root; }
269 
273  virtual IConversionSvc* getDataLoader( IRegistry* pReg );
274 
276  virtual DataObject* createDefaultObject() const;
277 
281  virtual StatusCode loadObject( IRegistry* pNode );
282 
286  virtual StatusCode loadObject( IConversionSvc* pLoader, IRegistry* pNode );
287 
289  StatusCode retrieveEntry( DataSvcHelpers::RegistryEntry* pNode, boost::string_ref path,
297  DataObject* handleDataFault( IRegistry* pReg, boost::string_ref path = {} );
298 
300  tsDataSvcMutex m_accessMutex;
301 };
302 #endif // GAUDIKERNEL_TSDATASVC_H
virtual StatusCode unlinkObject(IRegistry *from, boost::string_ref objPath)=0
Remove a link to another object.
Implementation of property with value of concrete type.
Definition: Property.h:383
tsDataSvcMutex m_accessMutex
Mutex to protect access to the store.
Definition: TsDataSvc.h:300
virtual StatusCode findObject(IRegistry *pDirectory, boost::string_ref path, DataObject *&pObject)=0
Find object identified by its directory entry.
Data provider interface definition.
Description of the DataStoreItem class.
Definition: DataStoreItem.h:17
PropertyMgr & operator=(const PropertyMgr &)=delete
STL class.
virtual StatusCode linkObject(IRegistry *from, boost::string_ref objPath, DataObject *toObj)=0
Add a link to another object.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
virtual StatusCode retrieveObject(IRegistry *pDirectory, boost::string_ref path, DataObject *&pObject)=0
Retrieve object identified by its directory entry.
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:37
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: TsDataSvc.h:83
virtual StatusCode unregisterAddress(boost::string_ref fullPath)=0
Unregister object address from the data store.
StatusCode registerObject(boost::string_ref fullPath, DataObject *pObject)
Register object with the data store.
StatusCode i_setRoot(IOpaqueAddress *pRootAddr)
Definition: TsDataSvc.h:166
Generic data agent interface.
Base class used to extend a class implementing other interfaces.
Definition: extends.h:10
std::vector< DataStoreItem > m_preLoads
Items to be pre-loaded.
Definition: TsDataSvc.h:81
Data service base class.
Definition: TsDataSvc.h:59
virtual StatusCode registerAddress(boost::string_ref fullPath, IOpaqueAddress *pAddress)=0
Register object address with the data store.
bool checkRoot()
Check if root path is valid.
Definition: TsDataSvc.h:268
Opaque address interface definition.
#define GAUDI_API
Definition: Kernel.h:71
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
The interface implemented by the IncidentSvc service.
Definition: IIncidentSvc.h:23
StatusCode i_setRoot(DataObject *pRootObj)
Definition: TsDataSvc.h:155