ATLAS Offline Software
Loading...
Searching...
No Matches
PoolSvc.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef POOLSVC_H
6#define POOLSVC_H
7
12
13#include "PoolSvc/IPoolSvc.h"
14#include "GaudiKernel/IIoComponent.h"
18
19#include <string>
20#include <vector>
21#include <map>
22#include <mutex>
23#include <memory>
24
25// Forward declarations
26namespace pool {
27 class IContainer;
28 class IDatabase;
29 class IFileCatalog;
30 class ISession;
31}
32
33
37class PoolSvc : public extends<AthService, IPoolSvc, IIoComponent> {
38
39public: // Non-static members
41 virtual StatusCode initialize() override;
42 virtual StatusCode io_reinit() override;
44 virtual StatusCode start() override;
45 virtual StatusCode stop() override;
47 virtual StatusCode finalize() override;
48 virtual StatusCode io_finalize() override;
49
54 virtual
55 Token* registerForWrite(const Placement* placement,
56 const void* obj,
57 const RootType& classDesc) override;
58
62 virtual
63 void setObjPtr(void*& obj, const Token* token) override;
64
67 virtual
68 unsigned int getOutputContext(const std::string& label) override;
69
73 virtual
74 unsigned int getInputContext(const std::string& label,
75 unsigned int maxFile = 0) override;
76
78 virtual
79 std::map<std::string, unsigned int> getInputContextMap() const override;
80
82 virtual
83 unsigned int getInputContextMapSize() const override;
84
86 virtual
87 pool::ISession* getInputContextSession(unsigned int contextId) const override;
88
91 virtual
92 void setShareMode(bool shareCat) override;
93
95 virtual
96 void startCatalog() override;
97
99 virtual
100 void commitCatalog() override;
101
106 virtual
107 void lookupBestPfn(const std::string& token, std::string& pfn, std::string& type) const override;
108
112 virtual
113 void renamePfn(const std::string& pf, const std::string& newpf) override;
114
119 virtual
120 StatusCode connectCollection(const std::string& connection,
121 const std::string& collectionName,
122 unsigned int contextId = IPoolSvc::kInputStream) const override;
123
128 virtual
129 StatusCode checkCollection(const std::string& connection,
130 unsigned int contextId,
131 bool noContainer) const override;
132
137 virtual
138 Token* getToken(const std::string& connection,
139 const std::string& collection,
140 const unsigned long ientry) const override;
141
143 virtual
144 StatusCode connect(Io::IoFlag type,
145 unsigned int contextId = IPoolSvc::kInputStream) override;
146
149 virtual
150 StatusCode commit(unsigned int contextId = IPoolSvc::kInputStream) const override;
151
154 virtual
155 StatusCode commitAndHold(unsigned int contextId = IPoolSvc::kInputStream) const override;
156
159 virtual
160 StatusCode disconnect(unsigned int contextId = IPoolSvc::kInputStream) const override;
161
165 virtual
166 StatusCode disconnectDb(const std::string& connection,
167 unsigned int contextId = IPoolSvc::kInputStream) const override;
168
170 virtual
171 StatusCode getAttribute(const std::string& optName,
172 std::string& data,
173 long tech,
174 unsigned int contextId = IPoolSvc::kInputStream) const override;
175
177 virtual
178 StatusCode getAttribute(const std::string& optName,
179 std::string& data,
180 long tech,
181 const std::string& dbName,
182 const std::string& contName = "",
183 unsigned int contextId = IPoolSvc::kInputStream) const override;
184
186 virtual
187 StatusCode setAttribute(const std::string& optName,
188 const std::string& data,
189 long tech,
190 unsigned int contextId = IPoolSvc::kOutputStream) const override;
191
193 virtual
194 StatusCode setAttribute(const std::string& optName,
195 const std::string& data,
196 long tech,
197 const std::string& dbName,
198 const std::string& contName = "",
199 unsigned int contextId = IPoolSvc::kOutputStream) const override;
200
202 using base_class::base_class;
203
205 virtual ~PoolSvc();
206
207private: // data
208 using CallMutex = std::recursive_mutex;
209 // Lock Guard class to safely lock a mutex for a given contextId
211 std::unique_lock< CallMutex > m_lock;
212 public:
213 ContextLock(int contextId, CallMutex &glob_mtx, const std::vector<CallMutex*> &ctx_mutexes) {
214 // lock the global mutex to gain exclusive access to the context mutexes vector
215 std::lock_guard<CallMutex> temp_lock( glob_mtx );
216 // lock the mutex for the given context ID for the lifetime of this object
217 m_lock = std::unique_lock< CallMutex >{ *ctx_mutexes[contextId] };
218 }
219 ~ContextLock() { m_lock.unlock(); }
220 };
221
223
224 bool m_shareCat{false};
226 std::vector<pool::ISession*> m_dbSessionVec;
227 std::vector<CallMutex*> m_pers_mut;
228 std::map<std::string, unsigned int> m_inputContextLabel;
229 std::map<std::string, unsigned int> m_outputContextLabel;
230 std::string m_mainOutputLabel{};
231 std::map<unsigned int, unsigned int> m_contextMaxFile;
232 // Cache for open file guids for each m_dbsessionVec member, protected by m_pers_mut
233 mutable std::map<unsigned int, std::list<Guid> > m_guidLists ATLAS_THREAD_SAFE;
234
235private: // properties
238 Gaudi::Property<int> m_dbAgeLimit{this,"MaxFilesOpen",0};
241 Gaudi::Property<std::string> m_writeCatalog{this,"WriteCatalog","xmlcatalog_file:PoolFileCatalog.xml"};
243 Gaudi::Property<std::vector<std::string>> m_readCatalog{this,"ReadCatalog",{},"List of catalog files to read from","OrderedSet<std::string>"};
245 Gaudi::Property<bool> m_useROOTIMT{this,"UseROOTImplicitMT",true};
247 Gaudi::Property<bool> m_useROOTMaxTree{this,"UseROOTIncreaseVMaxTree",false};
248
250 Gaudi::Property<bool> m_attemptCatalogPatch{this,"AttemptCatalogPatch",true};
251
252
253private: // internal helper functions
254 // delete all Persistency Services, Catalog, Mutexes and Indexes
255 void clearState();
256
258 void patchCatalog(const std::string& pfn, pool::IDatabase& dbH) const;
259
260 // setup persistency
261 StatusCode setupPersistencySvc();
262
264 std::unique_ptr<pool::IDatabase> getDbHandle(unsigned int contextId, const std::string& dbName) const;
266 std::unique_ptr<pool::IContainer> getContainerHandle(pool::IDatabase* dbH, const std::string& contName) const;
267
269 std::string poolCondPath(const std::string& leaf);
270};
271#endif
This file contains the class definition for the Guid class (migrated from POOL).
This file contains the class definition for the IPoolSvc interface class.
TTypeAdapter RootType
Definition RootType.h:211
Define macros for attributes used to control the static checker.
@ kOutputStream
Definition IPoolSvc.h:39
@ kInputStream
Definition IPoolSvc.h:39
This class holds all the necessary information to guide the writing of an object in a physical place.
Definition Placement.h:20
ContextLock(int contextId, CallMutex &glob_mtx, const std::vector< CallMutex * > &ctx_mutexes)
Definition PoolSvc.h:213
std::unique_lock< CallMutex > m_lock
Definition PoolSvc.h:211
This class provides the interface to the LCG POOL persistency software.
Definition PoolSvc.h:37
virtual StatusCode io_reinit() override
Definition PoolSvc.cxx:82
pool::IFileCatalog * createCatalog()
Definition PoolSvc.cxx:775
virtual Token * registerForWrite(const Placement *placement, const void *obj, const RootType &classDesc) override
Definition PoolSvc.cxx:215
virtual ~PoolSvc()
Destructor.
Definition PoolSvc.cxx:814
virtual void startCatalog() override
Definition PoolSvc.cxx:334
virtual void renamePfn(const std::string &pf, const std::string &newpf) override
Definition PoolSvc.cxx:364
pool::IFileCatalog * m_catalog
Definition PoolSvc.h:225
virtual StatusCode connect(Io::IoFlag type, unsigned int contextId=IPoolSvc::kInputStream) override
Connect to a logical database unit; PersistencySvc is chosen according to transaction type (accessmod...
Definition PoolSvc.cxx:482
std::string poolCondPath(const std::string &leaf)
Resolve a file using ATLAS_POOLCOND_PATH.
Definition PoolSvc.cxx:859
virtual unsigned int getInputContextMapSize() const override
Definition PoolSvc.cxx:317
void patchCatalog(const std::string &pfn, pool::IDatabase &dbH) const
Definition PoolSvc.cxx:454
CallMutex m_pool_mut
Definition PoolSvc.h:222
virtual unsigned int getInputContext(const std::string &label, unsigned int maxFile=0) override
Definition PoolSvc.cxx:287
virtual void lookupBestPfn(const std::string &token, std::string &pfn, std::string &type) const override
Definition PoolSvc.cxx:346
virtual StatusCode setAttribute(const std::string &optName, const std::string &data, long tech, unsigned int contextId=IPoolSvc::kOutputStream) const override
Set POOL attributes - domain.
Definition PoolSvc.cxx:671
std::vector< pool::ISession * > m_dbSessionVec
Definition PoolSvc.h:226
Gaudi::Property< bool > m_useROOTIMT
Use ROOT Implicit MultiThreading, default = true.
Definition PoolSvc.h:245
virtual StatusCode commit(unsigned int contextId=IPoolSvc::kInputStream) const override
Commit data for a given contextId and flush buffer.
Definition PoolSvc.cxx:514
std::unique_ptr< pool::IContainer > getContainerHandle(pool::IDatabase *dbH, const std::string &contName) const
Get Container handle.
Definition PoolSvc.cxx:845
virtual Token * getToken(const std::string &connection, const std::string &collection, const unsigned long ientry) const override
Definition PoolSvc.cxx:462
virtual StatusCode start() override
Required of all Gaudi services:
Definition PoolSvc.cxx:152
virtual StatusCode connectCollection(const std::string &connection, const std::string &collectionName, unsigned int contextId=IPoolSvc::kInputStream) const override
Definition PoolSvc.cxx:379
StatusCode setupPersistencySvc()
Definition PoolSvc.cxx:123
virtual pool::ISession * getInputContextSession(unsigned int contextId) const override
Definition PoolSvc.cxx:322
virtual StatusCode io_finalize() override
Definition PoolSvc.cxx:203
virtual StatusCode checkCollection(const std::string &connection, unsigned int contextId, bool noContainer) const override
Definition PoolSvc.cxx:437
Gaudi::Property< int > m_dbAgeLimit
MaxFilesOpen, option to have PoolSvc limit the number of open Input Files: default = 0 (No files are ...
Definition PoolSvc.h:238
Gaudi::Property< bool > m_useROOTMaxTree
Increase virtual TTree size to avoid backreads in multithreading, default = false.
Definition PoolSvc.h:247
std::map< std::string, unsigned int > m_outputContextLabel
Definition PoolSvc.h:229
virtual StatusCode disconnectDb(const std::string &connection, unsigned int contextId=IPoolSvc::kInputStream) const override
Disconnect single Database.
Definition PoolSvc.cxx:569
std::recursive_mutex CallMutex
Definition PoolSvc.h:208
virtual void commitCatalog() override
Definition PoolSvc.cxx:340
std::vector< CallMutex * > m_pers_mut
Definition PoolSvc.h:227
std::map< std::string, unsigned int > m_inputContextLabel
Definition PoolSvc.h:228
virtual void setObjPtr(void *&obj, const Token *token) override
Definition PoolSvc.cxx:239
Gaudi::Property< std::vector< std::string > > m_readCatalog
ReadCatalog, the list of additional POOL input file catalogs to consult: default = empty vector.
Definition PoolSvc.h:243
std::string m_mainOutputLabel
Definition PoolSvc.h:230
void clearState()
Definition PoolSvc.cxx:178
std::map< unsigned int, unsigned int > m_contextMaxFile
Definition PoolSvc.h:231
virtual void setShareMode(bool shareCat) override
Definition PoolSvc.cxx:330
std::unique_ptr< pool::IDatabase > getDbHandle(unsigned int contextId, const std::string &dbName) const
Get Database handle.
Definition PoolSvc.cxx:817
virtual StatusCode commitAndHold(unsigned int contextId=IPoolSvc::kInputStream) const override
Commit data for a given contextId and hold buffer.
Definition PoolSvc.cxx:532
virtual StatusCode disconnect(unsigned int contextId=IPoolSvc::kInputStream) const override
Disconnect PersistencySvc associated with a contextId.
Definition PoolSvc.cxx:547
virtual StatusCode finalize() override
Required of all Gaudi services:
Definition PoolSvc.cxx:198
virtual StatusCode initialize() override
Required of all Gaudi services:
Definition PoolSvc.cxx:42
virtual std::map< std::string, unsigned int > getInputContextMap() const override
Definition PoolSvc.cxx:312
virtual unsigned int getOutputContext(const std::string &label) override
Definition PoolSvc.cxx:267
Gaudi::Property< std::string > m_writeCatalog
WriteCatalog, the file catalog to be used to register output files (also default input catalog): defa...
Definition PoolSvc.h:241
virtual StatusCode stop() override
Definition PoolSvc.cxx:165
Gaudi::Property< bool > m_attemptCatalogPatch
AttemptCatalogPatch, option to create catalog: default = false.
Definition PoolSvc.h:250
std::map< unsigned int, std::list< Guid > > m_guidLists ATLAS_THREAD_SAFE
Definition PoolSvc.h:233
virtual StatusCode getAttribute(const std::string &optName, std::string &data, long tech, unsigned int contextId=IPoolSvc::kInputStream) const override
Get POOL attributes - domain.
Definition PoolSvc.cxx:587
bool m_shareCat
Definition PoolSvc.h:224
This class provides a token that identifies in a unique way objects on the persistent storage.
Definition Token.h:22
IContainer is the base class for container objects.
Definition IContainer.h:23
IDatabase is the base class for database objects.
Definition IDatabase.h:37
ISession is the interface class for user (macroscopic) sessions Every connection to a database and ob...
Definition ISession.h:36
std::string label(const std::string &format, int i)
Definition label.h:19
Framework include files.
Definition libname.h:15