ATLAS Offline Software
Loading...
Searching...
No Matches
MetaDataSvc.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef ATHENASERVICES_METADATASVC_H
6#define ATHENASERVICES_METADATASVC_H
7
12
13#include <map>
14#include <set>
15#include <typeinfo>
16
21#include "Gaudi/Property.h" // no forward decl: typedef
22#include "GaudiKernel/IAddressCreator.h"
23#include "GaudiKernel/IClassIDSvc.h"
24#include "GaudiKernel/IFileMgr.h" // for FILEMGR_CALLBACK_ARGS
25#include "GaudiKernel/IIncidentListener.h"
26#include "GaudiKernel/IIoComponent.h"
27#include "GaudiKernel/ServiceHandle.h"
28#include "GaudiKernel/ToolHandle.h"
29#include "GaudiKernel/FileIncident.h"
30
31// Forward declarations
32class StoreGateSvc;
33class IAlgTool;
35
36namespace Io {
37 class FileAttr;
38}
39
84class MetaDataSvc : public extends<::AthService,
85 IAddressProvider,
86 IIncidentListener,
87 IAthMetaDataSvc,
88 IIoComponent>
89{
90 public:
91 using IService::interfaceID;
92
94 MetaDataSvc(const std::string& name, ISvcLocator* pSvcLocator);
96 virtual ~MetaDataSvc();
97
98 public: // Non-static members
104 virtual StatusCode initialize() override;
106 virtual StatusCode stop() override;
108 virtual StatusCode finalize() override;
110
130 virtual StatusCode newMetadataSource(const Incident& /* inc */);
131
139 virtual StatusCode retireMetadataSource(const Incident& /* inc */);
141
149 virtual StatusCode prepareOutput();
150
162 virtual StatusCode prepareOutput(const std::string& outputName);
163
171 virtual StatusCode shmProxy(const std::string& filename) override;
173
184 StatusCode preLoadAddresses(StoreID::type /* storeID */,
185 IAddressProvider::tadList& /* tads */) override {
186 return StatusCode::SUCCESS;
187 }
188
199 StatusCode loadAddresses(StoreID::type storeID,
200 IAddressProvider::tadList& tads) override;
201
208 StatusCode updateAddress(StoreID::type /* storeID */,
209 SG::TransientAddress* /* tad */,
210 const EventContext& /* ctx */) override {
211 return StatusCode::FAILURE;
212 }
213
214
220 virtual void handle(const Incident& incident) override;
221
224 StatusCode transitionMetaDataFile(const std::string& outputConn, bool disconnect);
225
231 virtual StatusCode io_reinit() override;
232
233 StatusCode rootOpenAction(FILEMGR_CALLBACK_ARGS);
234
235 virtual StoreGateSvc* outputDataStore() const override final {
236 return &*m_outputDataStore;
237 }
238
239 virtual const std::string currentRangeID() const override final;
240
242
244 public:
245 explicit ToolLockGuard(const MetaDataSvc& mds) : m_mds(mds) { m_mds.lockTools(); }
246 ~ToolLockGuard() { m_mds.unlockTools(); }
247 ToolLockGuard(const ToolLockGuard&) = delete;
248 void operator=(const ToolLockGuard&) = delete;
249
250 private:
252 };
253
254 void lockTools() const;
255 void unlockTools() const;
256
257 void recordHook(const std::type_info&) override;
258 void removeHook(const std::type_info&) override;
259
263 std::string removeStreamFromKey(std::string& key);
264
268 virtual std::set<std::string> getPerStreamKeysFor(const std::string& key ) const override final;
269
270 private:
292 StatusCode addProxyToInputMetaDataStore(const std::string& tokenStr);
295 StatusCode initInputMetaDataStore(const std::string& fileName);
296
297 private: // data
300 ServiceHandle<IAddressCreator> m_addrCrtr{ this, "ConversionService", "AthenaPoolCnvSvc" };
305
310 bool m_outputPrepared{false};
311 std::map<std::string_view, CLID> m_persToClid{};
312
313 std::set<CLID> m_handledClasses{};
315 static constexpr std::string_view m_streamInKeyMark{"__STREAM["};
316
317 std::map< std::string, std::set<std::string> > m_streamKeys{};
318
319 private: // properties
321 Gaudi::Property<std::string> m_metaDataCont{this, "MetaDataContainer", ""};
323 PublicToolHandleArray<IMetaDataTool> m_metaDataTools{this, "MetaDataTools", {}};
324};
325
326#endif
uint32_t CLID
The Class ID type.
This file contains the class definition for the IAthMetaDataSvc class.
This file contains the class definition for the IMetaDataTool class.
std::list< SG::TransientAddress * > tadList
void operator=(const ToolLockGuard &)=delete
const MetaDataSvc & m_mds
ToolLockGuard(const ToolLockGuard &)=delete
ToolLockGuard(const MetaDataSvc &mds)
ServiceHandle< OutputStreamSequencerSvc > m_outSeqSvc
virtual StatusCode prepareOutput()
Makes the metadata store ready for output.
long m_storageType
std::map< std::string, std::set< std::string > > m_streamKeys
static constexpr std::string_view m_streamInKeyMark
marker string for embedding stream name in MetaData object keys for SharedWriter server
virtual StatusCode newMetadataSource(const Incident &)
Fills the input metadata store with the content of the new input file.
virtual StatusCode initialize() override
initialize the metadata service at the beginning of the job
void recordHook(const std::type_info &) override
MetaDataSvc(const std::string &name, ISvcLocator *pSvcLocator)
Standard Service Constructor.
void lockTools() const
PublicToolHandleArray< IMetaDataTool > m_metaDataTools
MetaDataTools, vector with the MetaData tools.
virtual void handle(const Incident &incident) override
react to file incidents.
ServiceHandle< StoreGateSvc > m_outputDataStore
virtual StoreGateSvc * outputDataStore() const override final
virtual StatusCode io_reinit() override
Implements IIoComponent interface sets m_outputPrepared to false and prints some information.
StatusCode transitionMetaDataFile(const std::string &outputConn, bool disconnect)
Transition output metadata file - fire MeteDataStop incident to transition OutputStream and disconnec...
CLID remapMetaContCLID(const CLID &item_id) const
StatusCode rootOpenAction(FILEMGR_CALLBACK_ARGS)
ServiceHandle< StoreGateSvc > m_inputDataStore
virtual ~MetaDataSvc()
Destructor.
StatusCode preLoadAddresses(StoreID::type, IAddressProvider::tadList &) override
does nothing.
virtual StatusCode retireMetadataSource(const Incident &)
Allows metadata tools to act before an input file is closed.
std::set< CLID > m_handledClasses
bool m_allowMetaDataStop
ServiceHandle< IAddressCreator > m_addrCrtr
virtual StatusCode finalize() override
finalize the metadata service at the end of the job
StatusCode initInputMetaDataStore(const std::string &fileName)
Initialize input metadata store - can be called directly or via BeginInputFile incident.
std::map< std::string_view, CLID > m_persToClid
virtual StatusCode stop() override
stop the metadata service
ServiceHandle< IIncidentSvc > m_incSvc
std::string removeStreamFromKey(std::string &key)
check if the metadata object key contains Stream name (added by SharedWriter in MetaDataSvc) remove s...
virtual const std::string currentRangeID() const override final
StatusCode addProxyToInputMetaDataStore(const std::string &tokenStr)
ServiceHandle< IFileMgr > m_fileMgr
void removeHook(const std::type_info &) override
bool m_clearedOutputDataStore
StatusCode loadAddresses(StoreID::type storeID, IAddressProvider::tadList &tads) override
loads addresses of versioned metadata object.
bool m_outputPrepared
StatusCode updateAddress(StoreID::type, SG::TransientAddress *, const EventContext &) override
always fails
void unlockTools() const
Gaudi::Property< std::string > m_metaDataCont
MetaDataContainer, POOL container name for MetaData.
bool m_clearedInputDataStore
ServiceHandle< IClassIDSvc > m_classIDSvc
virtual std::set< std::string > getPerStreamKeysFor(const std::string &key) const override final
Get all per-stream Key variants created for in-file metadata object with original key If no stream-sp...
This class provides configuration properties to enable OutputStream file sequences.
The Athena Transient Store API.
virtual StatusCode shmProxy(const std::string &filename) override
Loads file metadata from memory shared between streams in SharedWriter This function clears the input...