The Gaudi Framework  master (b9786168)
Loading...
Searching...
No Matches
DataSvc.h
Go to the documentation of this file.
1/***********************************************************************************\
2* (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3* *
4* This software is distributed under the terms of the Apache version 2 licence, *
5* copied verbatim in the file "LICENSE". *
6* *
7* In applying this licence, CERN does not waive the privileges and immunities *
8* granted to it by virtue of its status as an Intergovernmental Organization *
9* or submit itself to any jurisdiction. *
10\***********************************************************************************/
11#pragma once
12
19#include <GaudiKernel/Service.h>
20#include <GaudiKernel/SmartIF.h>
21#include <string_view>
22
23class IOpaqueAddress;
24class DataObject;
25class IDataStoreAgent;
26
27// Do not clutter global namespace for helpers...
28namespace DataSvcHelpers {
29 // Map of objects where loading is inhibited
30 class InhibitMap;
31} // namespace DataSvcHelpers
32
43class GAUDI_API DataSvc : public extends<Service, IDataProviderSvc, IDataManagerSvc> {
44
47
48protected:
51
52 Gaudi::Property<CLID> m_rootCLID{ this, "RootCLID", 110 /*CLID_Event*/, "CLID of root entry" };
53 Gaudi::Property<std::string> m_rootName{ this, "RootName", "/Event", "name of root entry" };
54
55private:
56 Gaudi::Property<bool> m_forceLeaves{ this, "ForceLeaves", false,
57 "force creation of default leaves on registerObject" };
58 Gaudi::Property<std::vector<std::string>> m_inhibitPathes{ this, "InhibitPaths", {}, "inhibited leaves" };
59
60 Gaudi::Property<bool> m_enableFaultHdlr{ this, "EnableFaultHandler", false,
61 "enable incidents on data creation requests" };
62 Gaudi::Property<std::string> m_faultName{ this, "DataFaultName", "DataFault", "Name of the data fault incident" };
63
64 Gaudi::Property<bool> m_enableAccessHdlr{ this, "EnableAccessHandler", false,
65 "enable incidents on data access requests" };
66 Gaudi::Property<std::string> m_accessName{ this, "DataAccessName", "DataAccess", "Name of the data access incident" };
67
69 std::vector<DataStoreItem> m_preLoads;
70
71protected:
73 std::unique_ptr<DataSvcHelpers::RegistryEntry> m_root;
74
75public:
77 CLID rootCLID() const override;
78
80 const std::string& rootName() const override;
81
83 StatusCode registerAddress( std::string_view fullPath, IOpaqueAddress* pAddress ) override;
84
86
88 StatusCode registerAddress( IRegistry* parentObj, std::string_view objectPath, IOpaqueAddress* pAddress ) override;
89
91
93 StatusCode unregisterAddress( std::string_view fullPath ) override;
94
96 StatusCode unregisterAddress( IRegistry* pParent, std::string_view objPath ) override;
97
101 StatusCode objectLeaves( const DataObject* pObject, std::vector<IRegistry*>& refLeaves ) override;
105 StatusCode objectLeaves( const IRegistry* pRegistry, std::vector<IRegistry*>& refLeaves ) override;
106
108 StatusCode objectParent( const DataObject* pObject, IRegistry*& refpParent ) override;
110 StatusCode objectParent( const IRegistry* pRegistry, IRegistry*& refpParent ) override;
111
115 StatusCode clearSubTree( std::string_view sub_tree_path ) override;
116
120 StatusCode clearSubTree( DataObject* pObject ) override;
121
123 StatusCode clearStore() override;
124
128 StatusCode traverseSubTree( std::string_view sub_tree_path, IDataStoreAgent* pAgent ) override;
129
131 StatusCode traverseSubTree( DataObject* pObject, IDataStoreAgent* pAgent ) override;
132
134 StatusCode traverseTree( IDataStoreAgent* pAgent ) override;
135
138 StatusCode setRoot( std::string root_name, DataObject* pRootObj ) override;
139
143 virtual StatusCode i_setRoot( std::string root_name, DataObject* pRootObj );
144
147 StatusCode setRoot( std::string root_path, IOpaqueAddress* pRootAddr ) override;
148
153 virtual StatusCode i_setRoot( std::string root_path, IOpaqueAddress* pRootAddr );
154
158 StatusCode setDataLoader( IConversionSvc* svc, IDataProviderSvc* dpsvc = nullptr ) override;
159
161 StatusCode addPreLoadItem( const DataStoreItem& item ) override;
162
164 StatusCode removePreLoadItem( const DataStoreItem& item ) override;
165
167 StatusCode resetPreLoad() override;
168
176 virtual StatusCode preLoad( int depth, int load_depth, DataObject* pObject );
177
179 StatusCode preLoad() override;
180
182
184 StatusCode registerObject( std::string_view parentPath, std::string_view objPath, DataObject* pObject ) override;
185
187 StatusCode registerObject( DataObject* parentObj, std::string_view objPath, DataObject* pObject ) override;
188
190 StatusCode unregisterObject( std::string_view fullPath ) override;
191
193 StatusCode unregisterObject( DataObject* pObject ) override;
194
196 StatusCode unregisterObject( DataObject* pObject, std::string_view objectPath ) override;
197
199
201 StatusCode retrieveObject( IRegistry* pDirectory, std::string_view path, DataObject*& pObject ) override;
202
204
206 StatusCode findObject( std::string_view fullPath, DataObject*& pObject ) override;
207
209 StatusCode findObject( IRegistry* pDirectory, std::string_view path, DataObject*& pObject ) override;
210
212
214 StatusCode linkObject( IRegistry* from, std::string_view objPath, DataObject* to ) override;
215
217 StatusCode linkObject( std::string_view fullPath, DataObject* to ) override;
218
220
222 StatusCode unlinkObject( IRegistry* from, std::string_view objPath ) override;
223
225 StatusCode unlinkObject( DataObject* fromObj, std::string_view objPath ) override;
226
228 StatusCode unlinkObject( std::string_view fullPath ) override;
229
231 StatusCode updateObject( IRegistry* pDirectory ) override;
232
234 StatusCode updateObject( DataObject* toUpdate ) override;
235
237 StatusCode initialize() override;
238
240 StatusCode reinitialize() override;
241
243 StatusCode finalize() override;
244
246 using extends::extends;
247
249 DataSvc( const DataSvc& ) = delete;
251 DataSvc& operator=( const DataSvc& ) = delete;
252
253protected:
255 bool checkRoot() { return 0 != m_root; }
256
260 virtual IConversionSvc* getDataLoader( IRegistry* pReg );
261
263 virtual DataObject* createDefaultObject() const;
264
268 virtual StatusCode loadObject( IRegistry* pNode );
269
273 virtual StatusCode loadObject( IConversionSvc* pLoader, IRegistry* pNode );
274
276 StatusCode retrieveEntry( DataSvcHelpers::RegistryEntry* pNode, std::string_view path,
284 DataObject* handleDataFault( IRegistry* pReg, std::string_view path = "" );
285
286private:
287 StatusCode i_retrieveEntry( DataSvcHelpers::RegistryEntry* parentObj, std::string_view path,
289 DataObject* i_handleDataFault( IRegistry* pReg, std::string_view path = std::string_view{} );
290};
unsigned int CLID
Class ID definition.
Definition ClassID.h:16
#define GAUDI_API
Definition Kernel.h:49
A DataObject is the base class of any identifiable object on any data store.
Definition DataObject.h:37
Description of the DataStoreItem class.
Definition of an entry in the transient data store.
StatusCode reinitialize() override
Service initialization.
Definition DataSvc.cpp:805
StatusCode traverseSubTree(std::string_view sub_tree_path, IDataStoreAgent *pAgent) override
IDataManagerSvc: Analyze by traversing all data objects below the sub tree identified by its full pat...
Definition DataSvc.cpp:93
StatusCode setRoot(std::string root_name, DataObject *pRootObj) override
Initialize data store for new event by giving new event path and root object.
Definition DataSvc.cpp:115
DataSvc(const DataSvc &)=delete
copy constructor disabled
StatusCode finalize() override
Service initialization.
Definition DataSvc.cpp:828
Gaudi::Property< std::string > m_rootName
Definition DataSvc.h:53
StatusCode findObject(std::string_view fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
Definition DataSvc.cpp:623
StatusCode resetPreLoad() override
Clear the preload list.
Definition DataSvc.cpp:762
virtual StatusCode preLoad(int depth, int load_depth, DataObject *pObject)
Execute one level of preloading and recursively load until the final level is reached.
Definition DataSvc.cpp:768
StatusCode clearSubTree(std::string_view sub_tree_path) override
IDataManagerSvc: Remove all data objects below the sub tree identified by its full path name.
Definition DataSvc.cpp:59
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 DataSvc.cpp:125
SmartIF< IConversionSvc > m_dataLoader
Pointer to data loader service.
Definition DataSvc.h:46
StatusCode setDataLoader(IConversionSvc *svc, IDataProviderSvc *dpsvc=nullptr) override
IDataManagerSvc: IDataManagerSvc: Pass a default data loader to the service and optionally a data pro...
Definition DataSvc.cpp:160
StatusCode objectLeaves(const DataObject *pObject, std::vector< IRegistry * > &refLeaves) override
IDataManagerSvc: Explore the object store: retrieve all leaves attached to the object.
Definition DataSvc.cpp:181
StatusCode initialize() override
Service initialization.
Definition DataSvc.cpp:795
StatusCode unregisterAddress(std::string_view fullPath) override
IDataManagerSvc: Unregister object address from the data store.
Definition DataSvc.cpp:241
SmartIF< IIncidentSvc > m_incidentSvc
Pointer to incident service.
Definition DataSvc.h:50
StatusCode unregisterObject(std::string_view fullPath) override
Unregister object from the data store.
Definition DataSvc.cpp:356
StatusCode registerObject(std::string_view parentPath, std::string_view objPath, DataObject *pObject) override
Register object with the data store.
Definition DataSvc.cpp:276
StatusCode addPreLoadItem(const DataStoreItem &item) override
Add an item to the preload list.
Definition DataSvc.cpp:749
Gaudi::Property< std::vector< std::string > > m_inhibitPathes
Definition DataSvc.h:58
Gaudi::Property< bool > m_enableAccessHdlr
Definition DataSvc.h:64
Gaudi::Property< CLID > m_rootCLID
Definition DataSvc.h:52
Gaudi::Property< std::string > m_accessName
Definition DataSvc.h:66
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
Retrieve object from data store.
Definition DataSvc.cpp:601
DataSvc & operator=(const DataSvc &)=delete
Fake assignment operator (never implemented).
const std::string & rootName() const override
IDataManagerSvc: Accessor for root event name.
Definition DataSvc.cpp:841
StatusCode registerAddress(std::string_view fullPath, IOpaqueAddress *pAddress) override
IDataManagerSvc: Register object address with the data store.
Definition DataSvc.cpp:198
StatusCode traverseTree(IDataStoreAgent *pAgent) override
IDataManagerSvc: Analyze by traversing all data objects in the data store.
Definition DataSvc.cpp:106
bool checkRoot()
Check if root path is valid.
Definition DataSvc.h:255
CLID rootCLID() const override
IDataManagerSvc: Accessor for root event CLID.
Definition DataSvc.cpp:838
StatusCode objectParent(const DataObject *pObject, IRegistry *&refpParent) override
IDataManagerSvc: Explore the object store: retrieve the object's parent.
Definition DataSvc.cpp:167
StatusCode updateObject(IRegistry *pDirectory) override
Update object identified by its directory entry.
Definition DataSvc.cpp:634
StatusCode removePreLoadItem(const DataStoreItem &item) override
Remove an item from the preload list.
Definition DataSvc.cpp:756
Gaudi::Property< bool > m_forceLeaves
Definition DataSvc.h:56
Gaudi::Property< bool > m_enableFaultHdlr
Definition DataSvc.h:60
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
Definition DataSvc.cpp:85
Gaudi::Property< std::string > m_faultName
Definition DataSvc.h:62
std::vector< DataStoreItem > m_preLoads
Items to be pre-loaded.
Definition DataSvc.h:69
StatusCode unlinkObject(IRegistry *from, std::string_view objPath) override
Remove a link to another object.
Definition DataSvc.cpp:714
StatusCode linkObject(IRegistry *from, std::string_view objPath, DataObject *to) override
Add a link to another object.
Definition DataSvc.cpp:683
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition DataSvc.h:73
Implementation of property with value of concrete type.
Definition PropertyFwd.h:27
Data provider interface definition.
virtual StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject)=0
Retrieve object identified by its directory entry.
virtual StatusCode linkObject(IRegistry *from, std::string_view objPath, DataObject *toObj)=0
Add a link to another object.
virtual StatusCode unlinkObject(IRegistry *from, std::string_view objPath)=0
Remove a link to another object.
virtual StatusCode findObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject)=0
Find object identified by its directory entry.
StatusCode registerObject(std::string_view fullPath, DataObject *pObject)
Register object with the data store.
Generic data agent interface.
Opaque address interface definition.
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition IRegistry.h:29
Small smart pointer class with automatic reference counting for IInterface.
Definition SmartIF.h:28
This class is used for returning status codes from appropriate routines.
Definition StatusCode.h:64
Base class used to extend a class implementing other interfaces.
Definition extends.h:19
virtual StatusCode registerAddress(std::string_view fullPath, IOpaqueAddress *pAddress)=0
Register object address with the data store.
virtual StatusCode unregisterAddress(std::string_view fullPath)=0
Unregister object address from the data store.