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"
15#include "GaudiKernel/IIoComponent.h"
16#include "GaudiKernel/SmartIF.h"
20
21#include <string>
22#include <vector>
23#include <map>
24#include <mutex>
25#include <memory>
26
27// Forward declarations
28namespace pool {
29 class IContainer;
30 class IDatabase;
31 class ISession;
32}
33class SessionTool;
34
38class PoolSvc : public extends<AthService, IPoolSvc, IIoComponent> {
39
40public: // Non-static members
42 virtual StatusCode initialize() override;
43 virtual StatusCode io_reinit() override;
45 virtual StatusCode start() override;
46 virtual StatusCode stop() override;
48 virtual StatusCode finalize() override;
49 virtual StatusCode io_finalize() override;
50
55 virtual
56 Token* registerForWrite(const Placement* placement,
57 const void* obj,
58 const RootType& classDesc) override;
59
63 virtual
64 void setObjPtr(void*& obj, const Token* token) override;
65
68 virtual
69 unsigned int getOutputContext(const std::string& label) override;
70
74 virtual
75 unsigned int getInputContext(const std::string& label,
76 unsigned int maxFile = 0) override;
77
79 virtual
80 std::map<std::string, unsigned int> getInputContextMap() const override;
81
83 virtual
84 unsigned int getInputContextMapSize() const override;
85
87 virtual
88 pool::FileDescriptor getInputFileDescriptor(unsigned int contextId,
89 const std::string& connection) override;
90
93 virtual
94 void setShareMode(bool shareCat) override;
95
97 virtual
98 void startCatalog() override;
99
101 virtual
102 void commitCatalog() override;
103
108 virtual
109 void lookupBestPfn(const std::string& dbID, std::string& pfn, std::string& type) const override;
110
115 virtual
116 StatusCode connectCollection(const std::string& connection,
117 const std::string& collectionName,
118 unsigned int contextId = IPoolSvc::kInputStream) override;
119
124 virtual
125 StatusCode checkCollection(const std::string& connection,
126 unsigned int contextId,
127 bool noContainer) override;
128
133 virtual
134 Token* getToken(const std::string& connection,
135 const std::string& collection,
136 const unsigned long ientry) override;
137
139 virtual
140 StatusCode connect(Io::IoFlag type,
141 unsigned int contextId = IPoolSvc::kInputStream) override;
142
145 virtual
146 StatusCode commit(unsigned int contextId = IPoolSvc::kInputStream) override;
147
150 virtual
151 StatusCode commitAndHold(unsigned int contextId = IPoolSvc::kInputStream) override;
152
155 virtual
156 StatusCode disconnect(unsigned int contextId = IPoolSvc::kInputStream) override;
157
161 virtual
162 StatusCode disconnectDb(const std::string& connection,
163 unsigned int contextId = IPoolSvc::kInputStream) override;
164
166 virtual
167 StatusCode getAttribute(const std::string& optName,
168 std::string& data,
169 long tech,
170 unsigned int contextId = IPoolSvc::kInputStream) override;
171
173 virtual
174 StatusCode getAttribute(const std::string& optName,
175 std::string& data,
176 long tech,
177 const std::string& dbName,
178 const std::string& contName = "",
179 unsigned int contextId = IPoolSvc::kInputStream) override;
180
182 virtual
183 StatusCode setAttribute(const std::string& optName,
184 const std::string& data,
185 long tech,
186 unsigned int contextId = IPoolSvc::kOutputStream) override;
187
189 virtual
190 StatusCode setAttribute(const std::string& optName,
191 const std::string& data,
192 long tech,
193 const std::string& dbName,
194 const std::string& contName = "",
195 unsigned int contextId = IPoolSvc::kOutputStream) override;
196
198 StatusCode createSession( const std::string& sessionName, int ageLimit = -1 );
199
201 using base_class::base_class;
202
204 virtual ~PoolSvc();
205
206private: // data
207 using CallMutex = std::recursive_mutex;
208 // Lock Guard class to safely lock a mutex for a given contextId
210 std::unique_lock< CallMutex > m_lock;
211 public:
212 ContextLock(int contextId, CallMutex &glob_mtx, const std::vector<CallMutex*> &ctx_mutexes) {
213 // lock the global mutex to gain exclusive access to the context mutexes vector
214 std::lock_guard<CallMutex> temp_lock( glob_mtx );
215 // lock the mutex for the given context ID for the lifetime of this object
216 m_lock = std::unique_lock< CallMutex >{ *ctx_mutexes[contextId] };
217 }
218 ~ContextLock() { m_lock.unlock(); }
219 };
220
222
223 bool m_shareCat{false};
224 SmartIF<Gaudi::IFileCatalogMgr> m_catalogMgr;
225 SmartIF<Gaudi::IFileCatalog> m_catalog;
226 std::vector<ToolHandle<SessionTool>> m_dbSessionVec;
227
228 std::vector<CallMutex*> m_pers_mut;
229 std::map<std::string, unsigned int> m_inputContextLabel;
230 std::map<std::string, unsigned int> m_outputContextLabel;
231 std::string m_mainOutputLabel{};
232 std::map<unsigned int, unsigned int> m_contextMaxFile;
233 // Cache for open file guids for each m_dbsessionVec member, protected by m_pers_mut
234 mutable std::map<unsigned int, std::list<Guid> > m_guidLists ATLAS_THREAD_SAFE;
235
236private: // properties
239 Gaudi::Property<int> m_dbAgeLimit{this,"MaxFilesOpen",0};
242 Gaudi::Property<std::string> m_writeCatalog{this,"WriteCatalog","xmlcatalog_file:PoolFileCatalog.xml"};
244 Gaudi::Property<std::vector<std::string>> m_readCatalog{this,"ReadCatalog",{},"List of catalog files to read from","OrderedSet<std::string>"};
246 Gaudi::Property<bool> m_useROOTIMT{this,"UseROOTImplicitMT",true};
248 Gaudi::Property<bool> m_useROOTMaxTree{this,"UseROOTIncreaseVMaxTree",false};
249
251 Gaudi::Property<bool> m_attemptCatalogPatch{this,"AttemptCatalogPatch",true};
252
253
254private: // internal helper functions
255 // delete all Persistency Services, Catalog, Mutexes and Indexes
256 void clearState();
257
258 // Set up m_catalogMgr/m_catalog. Returns false on failure.
259 bool createCatalog();
260 void patchCatalog(const std::string& pfn, pool::IDatabase& dbH) const;
261
262 // setup persistency
263 StatusCode setupPersistencySvc();
264
266 std::unique_ptr<pool::IDatabase> getDbHandle(unsigned int contextId, const std::string& dbName);
268 std::unique_ptr<pool::IContainer> getContainerHandle(pool::IDatabase* dbH, const std::string& contName);
269
271 std::string poolCondPath(const std::string& leaf);
272};
273#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:37
@ kInputStream
Definition IPoolSvc.h:37
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:212
std::unique_lock< CallMutex > m_lock
Definition PoolSvc.h:210
This class provides the interface to the LCG POOL persistency software.
Definition PoolSvc.h:38
virtual StatusCode io_reinit() override
Definition PoolSvc.cxx:87
bool createCatalog()
Definition PoolSvc.cxx:769
virtual Token * registerForWrite(const Placement *placement, const void *obj, const RootType &classDesc) override
Definition PoolSvc.cxx:220
std::vector< ToolHandle< SessionTool > > m_dbSessionVec
Definition PoolSvc.h:226
virtual ~PoolSvc()
Destructor.
Definition PoolSvc.cxx:815
std::unique_ptr< pool::IDatabase > getDbHandle(unsigned int contextId, const std::string &dbName)
Get Database handle.
Definition PoolSvc.cxx:818
virtual void startCatalog() override
Definition PoolSvc.cxx:365
StatusCode createSession(const std::string &sessionName, int ageLimit=-1)
Create a new session for a given session name and age limit.
Definition PoolSvc.cxx:879
SmartIF< Gaudi::IFileCatalog > m_catalog
Definition PoolSvc.h:225
std::unique_ptr< pool::IContainer > getContainerHandle(pool::IDatabase *dbH, const std::string &contName)
Get Container handle.
Definition PoolSvc.cxx:846
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:484
std::string poolCondPath(const std::string &leaf)
Resolve a file using ATLAS_POOLCOND_PATH.
Definition PoolSvc.cxx:860
virtual unsigned int getInputContextMapSize() const override
Definition PoolSvc.cxx:334
void patchCatalog(const std::string &pfn, pool::IDatabase &dbH) const
Definition PoolSvc.cxx:456
CallMutex m_pool_mut
Definition PoolSvc.h:221
virtual unsigned int getInputContext(const std::string &label, unsigned int maxFile=0) override
Definition PoolSvc.cxx:301
virtual StatusCode disconnectDb(const std::string &connection, unsigned int contextId=IPoolSvc::kInputStream) override
Disconnect single Database.
Definition PoolSvc.cxx:563
SmartIF< Gaudi::IFileCatalogMgr > m_catalogMgr
Definition PoolSvc.h:224
virtual StatusCode checkCollection(const std::string &connection, unsigned int contextId, bool noContainer) override
Definition PoolSvc.cxx:439
Gaudi::Property< bool > m_useROOTIMT
Use ROOT Implicit MultiThreading, default = true.
Definition PoolSvc.h:246
virtual StatusCode start() override
Required of all Gaudi services:
Definition PoolSvc.cxx:155
StatusCode setupPersistencySvc()
Definition PoolSvc.cxx:128
virtual StatusCode commit(unsigned int contextId=IPoolSvc::kInputStream) override
Commit data for a given contextId and flush buffer.
Definition PoolSvc.cxx:512
virtual StatusCode io_finalize() override
Definition PoolSvc.cxx:208
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:239
virtual void lookupBestPfn(const std::string &dbID, std::string &pfn, std::string &type) const override
Definition PoolSvc.cxx:377
virtual Token * getToken(const std::string &connection, const std::string &collection, const unsigned long ientry) override
Definition PoolSvc.cxx:464
Gaudi::Property< bool > m_useROOTMaxTree
Increase virtual TTree size to avoid backreads in multithreading, default = false.
Definition PoolSvc.h:248
std::map< std::string, unsigned int > m_outputContextLabel
Definition PoolSvc.h:230
std::recursive_mutex CallMutex
Definition PoolSvc.h:207
virtual void commitCatalog() override
Definition PoolSvc.cxx:371
std::vector< CallMutex * > m_pers_mut
Definition PoolSvc.h:228
std::map< std::string, unsigned int > m_inputContextLabel
Definition PoolSvc.h:229
virtual void setObjPtr(void *&obj, const Token *token) override
Definition PoolSvc.cxx:244
virtual StatusCode connectCollection(const std::string &connection, const std::string &collectionName, unsigned int contextId=IPoolSvc::kInputStream) override
Definition PoolSvc.cxx:381
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:244
std::string m_mainOutputLabel
Definition PoolSvc.h:231
void clearState()
Definition PoolSvc.cxx:181
std::map< unsigned int, unsigned int > m_contextMaxFile
Definition PoolSvc.h:232
virtual void setShareMode(bool shareCat) override
Definition PoolSvc.cxx:361
virtual StatusCode finalize() override
Required of all Gaudi services:
Definition PoolSvc.cxx:203
virtual StatusCode initialize() override
Required of all Gaudi services:
Definition PoolSvc.cxx:47
virtual StatusCode getAttribute(const std::string &optName, std::string &data, long tech, unsigned int contextId=IPoolSvc::kInputStream) override
Get POOL attributes - domain.
Definition PoolSvc.cxx:581
virtual StatusCode setAttribute(const std::string &optName, const std::string &data, long tech, unsigned int contextId=IPoolSvc::kOutputStream) override
Set POOL attributes - domain.
Definition PoolSvc.cxx:665
virtual StatusCode commitAndHold(unsigned int contextId=IPoolSvc::kInputStream) override
Commit data for a given contextId and hold buffer.
Definition PoolSvc.cxx:528
virtual std::map< std::string, unsigned int > getInputContextMap() const override
Definition PoolSvc.cxx:329
virtual unsigned int getOutputContext(const std::string &label) override
Definition PoolSvc.cxx:278
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:242
virtual StatusCode stop() override
Definition PoolSvc.cxx:168
Gaudi::Property< bool > m_attemptCatalogPatch
AttemptCatalogPatch, option to create catalog: default = false.
Definition PoolSvc.h:251
std::map< unsigned int, std::list< Guid > > m_guidLists ATLAS_THREAD_SAFE
Definition PoolSvc.h:234
bool m_shareCat
Definition PoolSvc.h:223
virtual StatusCode disconnect(unsigned int contextId=IPoolSvc::kInputStream) override
Disconnect PersistencySvc associated with a contextId.
Definition PoolSvc.cxx:541
virtual pool::FileDescriptor getInputFileDescriptor(unsigned int contextId, const std::string &connection) override
Definition PoolSvc.cxx:339
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
std::string label(const std::string &format, int i)
Definition label.h:19