ATLAS Offline Software
MetaDataSvc.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef ATHENASERVICES_METADATASVC_H
6 #define ATHENASERVICES_METADATASVC_H
7 
13 #include <map>
14 #include <set>
15 #include <typeinfo>
16 
21 #include "Gaudi/Property.h" // no forward decl: typedef
22 #include "GaudiKernel/IClassIDSvc.h"
23 #include "GaudiKernel/IFileMgr.h" // for FILEMGR_CALLBACK_ARGS
24 #include "GaudiKernel/IIncidentListener.h"
25 #include "GaudiKernel/IIoComponent.h"
26 #include "GaudiKernel/ServiceHandle.h"
27 #include "GaudiKernel/ToolHandle.h"
28 #include "GaudiKernel/FileIncident.h"
29 
30 // Forward declarations
31 class IAddressCreator;
32 class StoreGateSvc;
33 class IAlgTool;
35 
36 namespace Io {
37  class FileAttr;
38 }
39 
40 static const InterfaceID IID_MetaDataSvc("MetaDataSvc", 1, 0);
41 
42 // forward declaration to allow making SvcFactory a friend
43 template <class TYPE>
44 class SvcFactory;
45 
90 class MetaDataSvc : public extends<::AthService,
91  IAddressProvider,
92  IIncidentListener,
93  IAthMetaDataSvc,
94  IIoComponent>
95 {
96  // Allow the factory class access to the constructor
97  friend class SvcFactory<MetaDataSvc>; // <-- obsolete, remove
98 
99  public: // Constructor and Destructor
101  MetaDataSvc(const std::string& name, ISvcLocator* pSvcLocator);
103  virtual ~MetaDataSvc();
104 
106  static const InterfaceID& interfaceID() { return IID_MetaDataSvc; }
107 
108  public: // Non-static members
114  virtual StatusCode initialize() override;
116  virtual StatusCode stop() override;
118  virtual StatusCode finalize() override;
140  virtual StatusCode newMetadataSource(const Incident& /* inc */);
141 
149  virtual StatusCode retireMetadataSource(const Incident& /* inc */);
159  virtual StatusCode prepareOutput();
160 
172  virtual StatusCode prepareOutput(const std::string& outputName);
173 
181  virtual StatusCode shmProxy(const std::string& filename) override;
185  StatusCode queryInterface(const InterfaceID& riid,
186  void** ppvInterface) override;
187 
199  IAddressProvider::tadList& /* tads */) override {
200  return StatusCode::SUCCESS;
201  }
202 
214  IAddressProvider::tadList& tads) override;
215 
223  SG::TransientAddress* /* tad */,
224  const EventContext& /* ctx */) override {
225  return StatusCode::FAILURE;
226  }
234  virtual void handle(const Incident& incident) override;
235 
238  StatusCode transitionMetaDataFile(const std::string& outputConn, bool disconnect);
239 
245  virtual StatusCode io_reinit() override;
246 
247  StatusCode rootOpenAction(FILEMGR_CALLBACK_ARGS);
248 
249  virtual StoreGateSvc* outputDataStore() const override final {
250  return &*m_outputDataStore;
251  }
252 
253  virtual const std::string currentRangeID() const override final;
254 
256 
258  public:
259  ToolLockGuard(const MetaDataSvc& mds) : m_mds(mds) { m_mds.lockTools(); }
260  ~ToolLockGuard() { m_mds.unlockTools(); }
261  ToolLockGuard(const ToolLockGuard&) = delete;
262  void operator=(const ToolLockGuard&) = delete;
263 
264  private:
266  };
267 
268  void lockTools() const;
269  void unlockTools() const;
270 
271  void recordHook(const std::type_info&) override;
272  void removeHook(const std::type_info&) override;
273 
277  std::string removeStreamFromKey(std::string& key);
278 
282  virtual std::set<std::string> getPerStreamKeysFor(const std::string& key ) const override final;
283 
284  private:
306  StatusCode addProxyToInputMetaDataStore(const std::string& tokenStr);
309  StatusCode initInputMetaDataStore(const std::string& fileName);
310 
311  private: // data
319 
325  std::map<std::string, CLID> m_persToClid;
326  std::map<CLID, std::string> m_toolForClid;
327 
328  std::set<CLID> m_handledClasses;
330  const std::string m_streamInKeyMark = "__STREAM[";
331 
332  std::map< std::string, std::set<std::string> > m_streamKeys;
333 
334  private: // properties
336  StringProperty m_metaDataCont;
338  ToolHandleArray<IMetaDataTool> m_metaDataTools;
339 };
340 
341 #endif
MetaDataSvc::preLoadAddresses
StatusCode preLoadAddresses(StoreID::type, IAddressProvider::tadList &) override
does nothing.
Definition: MetaDataSvc.h:198
MetaDataSvc::interfaceID
static const InterfaceID & interfaceID()
Retrieve interface ID.
Definition: MetaDataSvc.h:106
MetaDataSvc::stop
virtual StatusCode stop() override
stop the metadata service
Definition: MetaDataSvc.cxx:186
MetaDataSvc::m_storageType
long m_storageType
Definition: MetaDataSvc.h:320
MetaDataSvc::initialize
virtual StatusCode initialize() override
initialize the metadata service at the beginning of the job
Definition: MetaDataSvc.cxx:109
IAthMetaDataSvc.h
This file contains the class definition for the IAthMetaDataSvc class.
MetaDataSvc::m_metaDataTools
ToolHandleArray< IMetaDataTool > m_metaDataTools
MetaDataTools, vector with the MetaData tools.
Definition: MetaDataSvc.h:338
MetaDataSvc::m_clearedInputDataStore
bool m_clearedInputDataStore
Definition: MetaDataSvc.h:321
MetaDataSvc::lockTools
void lockTools() const
Definition: MetaDataSvc.cxx:685
MetaDataSvc::m_clearedOutputDataStore
bool m_clearedOutputDataStore
Definition: MetaDataSvc.h:322
SvcFactory
Definition: AthCnvSvc.h:28
SG::TransientAddress
Definition: TransientAddress.h:32
IMetaDataTool.h
This file contains the class definition for the IMetaDataTool class.
MetaDataSvc::m_inputDataStore
ServiceHandle< StoreGateSvc > m_inputDataStore
Definition: MetaDataSvc.h:312
MetaDataSvc::m_metaDataCont
StringProperty m_metaDataCont
MetaDataContainer, POOL container name for MetaData.
Definition: MetaDataSvc.h:336
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:562
MetaDataSvc::~MetaDataSvc
virtual ~MetaDataSvc()
Destructor.
Definition: MetaDataSvc.cxx:106
MetaDataSvc::ToolLockGuard::~ToolLockGuard
~ToolLockGuard()
Definition: MetaDataSvc.h:260
MetaDataSvc::io_reinit
virtual StatusCode io_reinit() override
Implements IIoComponent interface sets m_outputPrepared to false and prints some information.
Definition: MetaDataSvc.cxx:416
MetaDataSvc::outputDataStore
virtual StoreGateSvc * outputDataStore() const override final
Definition: MetaDataSvc.h:249
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:128
FortranAlgorithmOptions.fileName
fileName
Definition: FortranAlgorithmOptions.py:13
MetaDataSvc::finalize
virtual StatusCode finalize() override
finalize the metadata service at the end of the job
Definition: MetaDataSvc.cxx:161
MetaDataSvc::ToolLockGuard
Definition: MetaDataSvc.h:257
MetaDataSvc::ToolLockGuard::ToolLockGuard
ToolLockGuard(const ToolLockGuard &)=delete
MetaDataSvc::m_outputPrepared
bool m_outputPrepared
Definition: MetaDataSvc.h:324
MetaDataSvc::newMetadataSource
virtual StatusCode newMetadataSource(const Incident &)
Fills the input metadata store with the content of the new input file.
Definition: MetaDataSvc.cxx:238
MetaDataSvc::m_addrCrtr
ServiceHandle< IAddressCreator > m_addrCrtr
Definition: MetaDataSvc.h:314
MetaDataSvc::initInputMetaDataStore
StatusCode initInputMetaDataStore(const std::string &fileName)
Initialize input metadata store - can be called directly or via BeginInputFile incident.
Definition: MetaDataSvc.cxx:565
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
MetaDataSvc::m_outputDataStore
ServiceHandle< StoreGateSvc > m_outputDataStore
Definition: MetaDataSvc.h:313
MetaDataSvc::addProxyToInputMetaDataStore
StatusCode addProxyToInputMetaDataStore(const std::string &tokenStr)
Definition: MetaDataSvc.cxx:453
MetaDataSvc::remapMetaContCLID
CLID remapMetaContCLID(const CLID &item_id) const
Definition: MetaDataSvc.cxx:638
MetaDataSvc::m_allowMetaDataStop
bool m_allowMetaDataStop
Definition: MetaDataSvc.h:323
MetaDataSvc::m_streamKeys
std::map< std::string, std::set< std::string > > m_streamKeys
Definition: MetaDataSvc.h:332
Io
Definition: MetaDataSvc.h:36
MetaDataSvc::MetaDataSvc
MetaDataSvc(const std::string &name, ISvcLocator *pSvcLocator)
Standard Service Constructor.
Definition: MetaDataSvc.cxx:52
MetaDataSvc
Manages the content of the metadata stores.
Definition: MetaDataSvc.h:95
MetaDataSvc::m_fileMgr
ServiceHandle< IFileMgr > m_fileMgr
Definition: MetaDataSvc.h:315
MetaDataSvc::retireMetadataSource
virtual StatusCode retireMetadataSource(const Incident &)
Allows metadata tools to act before an input file is closed.
Definition: MetaDataSvc.cxx:272
MetaDataSvc::prepareOutput
virtual StatusCode prepareOutput()
Makes the metadata store ready for output.
Definition: MetaDataSvc.cxx:292
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
MetaDataSvc::m_incSvc
ServiceHandle< IIncidentSvc > m_incSvc
Definition: MetaDataSvc.h:316
OutputStreamSequencerSvc
This class provides configuration properties to enable OutputStream file sequences.
Definition: OutputStreamSequencerSvc.h:33
MetaDataSvc::transitionMetaDataFile
StatusCode transitionMetaDataFile(const std::string &outputConn, bool disconnect)
Transition output metadata file - fire MeteDataStop incident to transition OutputStream and disconnec...
Definition: MetaDataSvc.cxx:389
MetaDataSvc::unlockTools
void unlockTools() const
Definition: MetaDataSvc.cxx:695
MetaDataSvc::queryInterface
StatusCode queryInterface(const InterfaceID &riid, void **ppvInterface) override
Provide access to the interfaces implemented by this service.
Definition: MetaDataSvc.cxx:195
MetaDataSvc::shmProxy
virtual StatusCode shmProxy(const std::string &filename) override
Loads file metadata from memory shared between streams in SharedWriter This function clears the input...
Definition: MetaDataSvc.cxx:333
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
MetaDataSvc::removeHook
void removeHook(const std::type_info &) override
Definition: MetaDataSvc.cxx:672
MetaDataSvc::currentRangeID
virtual const std::string currentRangeID() const override final
Definition: MetaDataSvc.cxx:632
MetaDataSvc::getPerStreamKeysFor
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...
Definition: MetaDataSvc.cxx:445
lumiFormat.outputName
string outputName
Definition: lumiFormat.py:71
MetaDataSvc::handle
virtual void handle(const Incident &incident) override
react to file incidents.
Definition: MetaDataSvc.cxx:357
StoreID::type
type
Definition: StoreID.h:24
MetaDataSvc::rootOpenAction
StatusCode rootOpenAction(FILEMGR_CALLBACK_ARGS)
Definition: MetaDataSvc.cxx:428
CaloCellTimeCorrFiller.filename
filename
Definition: CaloCellTimeCorrFiller.py:24
MetaDataSvc::m_persToClid
std::map< std::string, CLID > m_persToClid
Definition: MetaDataSvc.h:325
IAddressProvider::tadList
std::list< SG::TransientAddress * > tadList
Definition: IAddressProvider.h:32
AthService.h
IAddressProvider.h
MetaDataSvc::removeStreamFromKey
std::string removeStreamFromKey(std::string &key)
check if the metadata object key contains Stream name (added by SharedWriter in MetaDataSvc) remove s...
Definition: MetaDataSvc.cxx:434
MetaDataSvc::m_streamInKeyMark
const std::string m_streamInKeyMark
marker string for embedding stream name in MetaData object keys for SharedWriter server
Definition: MetaDataSvc.h:330
MetaDataSvc::m_toolForClid
std::map< CLID, std::string > m_toolForClid
Definition: MetaDataSvc.h:326
MetaDataSvc::recordHook
void recordHook(const std::type_info &) override
Definition: MetaDataSvc.cxx:659
MetaDataSvc::ToolLockGuard::m_mds
const MetaDataSvc & m_mds
Definition: MetaDataSvc.h:265
MetaDataSvc::loadAddresses
StatusCode loadAddresses(StoreID::type storeID, IAddressProvider::tadList &tads) override
loads addresses of versioned metadata object.
Definition: MetaDataSvc.cxx:206
MetaDataSvc::m_classIDSvc
ServiceHandle< IClassIDSvc > m_classIDSvc
Definition: MetaDataSvc.h:318
MetaDataSvc::updateAddress
StatusCode updateAddress(StoreID::type, SG::TransientAddress *, const EventContext &) override
always fails
Definition: MetaDataSvc.h:222
MetaDataSvc::ToolLockGuard::ToolLockGuard
ToolLockGuard(const MetaDataSvc &mds)
Definition: MetaDataSvc.h:259
ServiceHandle< StoreGateSvc >
MetaDataSvc::ToolLockGuard::operator=
void operator=(const ToolLockGuard &)=delete
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
MetaDataSvc::m_handledClasses
std::set< CLID > m_handledClasses
Definition: MetaDataSvc.h:328
MetaDataSvc::m_outSeqSvc
ServiceHandle< OutputStreamSequencerSvc > m_outSeqSvc
Definition: MetaDataSvc.h:317