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 const coral::Context* context() const override;
88
91 virtual
92 void loadComponent(const std::string& compName) override;
93
96 virtual
97 void setShareMode(bool shareCat) override;
98
100 virtual
101 void startCatalog() override;
102
104 virtual
105 void commitCatalog() override;
106
111 virtual
112 void lookupBestPfn(const std::string& token, std::string& pfn, std::string& type) const override;
113
117 virtual
118 void renamePfn(const std::string& pf, const std::string& newpf) override;
119
125 virtual
126 pool::ICollection* createCollection(const std::string& connection,
127 const std::string& collectionName,
128 const pool::DbType& collectionType,
129 unsigned int contextId = IPoolSvc::kInputStream) const override;
130
135 virtual
136 Token* getToken(const std::string& connection,
137 const std::string& collection,
138 const unsigned long ientry) const override;
139
141 virtual
142 StatusCode connect(Io::IoFlag type,
143 unsigned int contextId = IPoolSvc::kInputStream) override;
144
147 virtual
148 StatusCode commit(unsigned int contextId = IPoolSvc::kInputStream) const override;
149
152 virtual
153 StatusCode commitAndHold(unsigned int contextId = IPoolSvc::kInputStream) const override;
154
157 virtual
158 StatusCode disconnect(unsigned int contextId = IPoolSvc::kInputStream) const override;
159
163 virtual
164 StatusCode disconnectDb(const std::string& connection,
165 unsigned int contextId = IPoolSvc::kInputStream) const override;
166
168 virtual
169 StatusCode getAttribute(const std::string& optName,
170 std::string& data,
171 long tech,
172 unsigned int contextId = IPoolSvc::kInputStream) const override;
173
175 virtual
176 StatusCode getAttribute(const std::string& optName,
177 std::string& data,
178 long tech,
179 const std::string& dbName,
180 const std::string& contName = "",
181 unsigned int contextId = IPoolSvc::kInputStream) const override;
182
184 virtual
185 StatusCode setAttribute(const std::string& optName,
186 const std::string& data,
187 long tech,
188 unsigned int contextId = IPoolSvc::kOutputStream) const override;
189
191 virtual
192 StatusCode setAttribute(const std::string& optName,
193 const std::string& data,
194 long tech,
195 const std::string& dbName,
196 const std::string& contName = "",
197 unsigned int contextId = IPoolSvc::kOutputStream) const override;
198
200 virtual
201 StatusCode setFrontierCache(const std::string& conn) override;
202
204 using base_class::base_class;
205
207 virtual ~PoolSvc();
208
209private: // data
210 typedef std::recursive_mutex CallMutex;
211 // Lock Guard class to safely lock a mutex for a given contextId
213 std::unique_lock< CallMutex > m_lock;
214 public:
215 ContextLock(int contextId, CallMutex &glob_mtx, const std::vector<CallMutex*> &ctx_mutexes) {
216 // lock the global mutex to gain exclusive access to the context mutexes vector
217 std::lock_guard<CallMutex> temp_lock( glob_mtx );
218 // lock the mutex for the given context ID for the lifetime of this object
219 m_lock = std::unique_lock< CallMutex >{ *ctx_mutexes[contextId] };
220 }
221 ~ContextLock() { m_lock.unlock(); }
222 };
223
225 coral::Context* m_context{nullptr};
226 bool m_shareCat{false};
228 std::vector<pool::ISession*> m_dbSessionVec;
229 std::vector<CallMutex*> m_pers_mut;
230 std::map<std::string, unsigned int> m_inputContextLabel;
231 std::map<std::string, unsigned int> m_outputContextLabel;
232 std::string m_mainOutputLabel{};
233 std::map<unsigned int, unsigned int> m_contextMaxFile;
234 // Cache for open file guids for each m_dbsessionVec member, protected by m_pers_mut
235 mutable std::map<unsigned int, std::list<Guid> > m_guidLists ATLAS_THREAD_SAFE;
236
237private: // properties
240 Gaudi::Property<int> m_dbAgeLimit{this,"MaxFilesOpen",0};
243 Gaudi::Property<std::string> m_writeCatalog{this,"WriteCatalog","xmlcatalog_file:PoolFileCatalog.xml"};
245 Gaudi::Property<std::vector<std::string>> m_readCatalog{this,"ReadCatalog",{},"List of catalog files to read from","OrderedSet<std::string>"};
247 Gaudi::Property<bool> m_useROOTIMT{this,"UseROOTImplicitMT",true};
249 Gaudi::Property<bool> m_useROOTMaxTree{this,"UseROOTIncreaseVMaxTree",false};
250
252 Gaudi::Property<bool> m_attemptCatalogPatch{this,"AttemptCatalogPatch",true};
254 Gaudi::Property<int> m_retrialPeriod{this,"ConnectionRetrialPeriod",300};
256 Gaudi::Property<int> m_retrialTimeOut{this,"ConnectionRetrialTimeOut",3600};
258 Gaudi::Property<int> m_timeOut{this,"ConnectionTimeOut",5};
260 Gaudi::Property<bool> m_connClean{this,"ConnectionCleanUp",false};
262 Gaudi::Property<int> m_frontierComp{this,"FrontierCompression",5};
263 Gaudi::Property<std::vector<std::string>> m_frontierRefresh{this,"FrontierRefreshSchema",{}};
264
265private: // internal helper functions
266 // delete all Persistency Services, Catalog, Mutexes and Indexes
267 void clearState();
268
270 void patchCatalog(const std::string& pfn, pool::IDatabase& dbH) const;
271
272 // setup persistency
273 StatusCode setupPersistencySvc();
274
276 std::unique_ptr<pool::IDatabase> getDbHandle(unsigned int contextId, const std::string& dbName) const;
278 std::unique_ptr<pool::IContainer> getContainerHandle(pool::IDatabase* dbH, const std::string& contName) const;
279
281 std::string poolCondPath(const std::string& leaf);
282};
283#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:215
std::unique_lock< CallMutex > m_lock
Definition PoolSvc.h:213
This class provides the interface to the LCG POOL persistency software.
Definition PoolSvc.h:37
virtual StatusCode io_reinit() override
Definition PoolSvc.cxx:121
pool::IFileCatalog * createCatalog()
Definition PoolSvc.cxx:866
virtual Token * registerForWrite(const Placement *placement, const void *obj, const RootType &classDesc) override
Definition PoolSvc.cxx:252
virtual ~PoolSvc()
Destructor.
Definition PoolSvc.cxx:905
virtual void startCatalog() override
Definition PoolSvc.cxx:371
Gaudi::Property< int > m_retrialTimeOut
ConnectionRetrialTimeOut, the retrial time out for CORAL Connection Service: default = 300 seconds.
Definition PoolSvc.h:256
Gaudi::Property< int > m_timeOut
ConnectionTimeOut, the time out for CORAL Connection Service: default = 5 seconds.
Definition PoolSvc.h:258
virtual void renamePfn(const std::string &pf, const std::string &newpf) override
Definition PoolSvc.cxx:401
Gaudi::Property< int > m_retrialPeriod
ConnectionRetrialPeriod, retry period for CORAL Connection Service: default = 30 seconds.
Definition PoolSvc.h:254
virtual const coral::Context * context() const override
Definition PoolSvc.cxx:359
pool::IFileCatalog * m_catalog
Definition PoolSvc.h:227
Gaudi::Property< std::vector< std::string > > m_frontierRefresh
Definition PoolSvc.h:263
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:532
std::string poolCondPath(const std::string &leaf)
Resolve a file using ATLAS_POOLCOND_PATH.
Definition PoolSvc.cxx:946
virtual unsigned int getInputContextMapSize() const override
Definition PoolSvc.cxx:354
void patchCatalog(const std::string &pfn, pool::IDatabase &dbH) const
Definition PoolSvc.cxx:504
CallMutex m_pool_mut
Definition PoolSvc.h:224
virtual unsigned int getInputContext(const std::string &label, unsigned int maxFile=0) override
Definition PoolSvc.cxx:324
std::recursive_mutex CallMutex
Definition PoolSvc.h:210
virtual void lookupBestPfn(const std::string &token, std::string &pfn, std::string &type) const override
Definition PoolSvc.cxx:383
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:711
std::vector< pool::ISession * > m_dbSessionVec
Definition PoolSvc.h:228
Gaudi::Property< bool > m_connClean
ConnectionCleanUp - whether to use CORAL connection management thread: default = false.
Definition PoolSvc.h:260
Gaudi::Property< bool > m_useROOTIMT
Use ROOT Implicit MultiThreading, default = true.
Definition PoolSvc.h:247
virtual StatusCode commit(unsigned int contextId=IPoolSvc::kInputStream) const override
Commit data for a given contextId and flush buffer.
Definition PoolSvc.cxx:564
std::unique_ptr< pool::IContainer > getContainerHandle(pool::IDatabase *dbH, const std::string &contName) const
Get Container handle.
Definition PoolSvc.cxx:932
virtual Token * getToken(const std::string &connection, const std::string &collection, const unsigned long ientry) const override
Definition PoolSvc.cxx:512
virtual StatusCode start() override
Required of all Gaudi services:
Definition PoolSvc.cxx:190
Gaudi::Property< int > m_frontierComp
Frontier proprties, compression level and list of schemas to be refreshed: default = 5.
Definition PoolSvc.h:262
StatusCode setupPersistencySvc()
Definition PoolSvc.cxx:162
virtual StatusCode io_finalize() override
Definition PoolSvc.cxx:240
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:240
Gaudi::Property< bool > m_useROOTMaxTree
Increase virtual TTree size to avoid backreads in multithreading, default = false.
Definition PoolSvc.h:249
std::map< std::string, unsigned int > m_outputContextLabel
Definition PoolSvc.h:231
virtual StatusCode disconnectDb(const std::string &connection, unsigned int contextId=IPoolSvc::kInputStream) const override
Disconnect single Database.
Definition PoolSvc.cxx:619
virtual void commitCatalog() override
Definition PoolSvc.cxx:377
std::vector< CallMutex * > m_pers_mut
Definition PoolSvc.h:229
std::map< std::string, unsigned int > m_inputContextLabel
Definition PoolSvc.h:230
virtual void setObjPtr(void *&obj, const Token *token) override
Definition PoolSvc.cxx:276
virtual void loadComponent(const std::string &compName) override
Definition PoolSvc.cxx:363
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:245
std::string m_mainOutputLabel
Definition PoolSvc.h:232
void clearState()
Definition PoolSvc.cxx:215
std::map< unsigned int, unsigned int > m_contextMaxFile
Definition PoolSvc.h:233
virtual void setShareMode(bool shareCat) override
Definition PoolSvc.cxx:367
std::unique_ptr< pool::IDatabase > getDbHandle(unsigned int contextId, const std::string &dbName) const
Get Database handle.
Definition PoolSvc.cxx:908
coral::Context * m_context
Definition PoolSvc.h:225
virtual StatusCode commitAndHold(unsigned int contextId=IPoolSvc::kInputStream) const override
Commit data for a given contextId and hold buffer.
Definition PoolSvc.cxx:582
virtual StatusCode disconnect(unsigned int contextId=IPoolSvc::kInputStream) const override
Disconnect PersistencySvc associated with a contextId.
Definition PoolSvc.cxx:597
virtual pool::ICollection * createCollection(const std::string &connection, const std::string &collectionName, const pool::DbType &collectionType, unsigned int contextId=IPoolSvc::kInputStream) const override
Definition PoolSvc.cxx:416
virtual StatusCode finalize() override
Required of all Gaudi services:
Definition PoolSvc.cxx:235
virtual StatusCode initialize() override
Required of all Gaudi services:
Definition PoolSvc.cxx:54
virtual StatusCode setFrontierCache(const std::string &conn) override
Setup Frontier cache for given logical or physical connection name.
Definition PoolSvc.cxx:807
virtual std::map< std::string, unsigned int > getInputContextMap() const override
Definition PoolSvc.cxx:349
virtual unsigned int getOutputContext(const std::string &label) override
Definition PoolSvc.cxx:304
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:243
virtual StatusCode stop() override
Definition PoolSvc.cxx:202
Gaudi::Property< bool > m_attemptCatalogPatch
AttemptCatalogPatch, option to create catalog: default = false.
Definition PoolSvc.h:252
std::map< unsigned int, std::list< Guid > > m_guidLists ATLAS_THREAD_SAFE
Definition PoolSvc.h:235
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:637
bool m_shareCat
Definition PoolSvc.h:226
This class provides a token that identifies in a unique way objects on the persistent storage.
Definition Token.h:22
An interface to a storage technology specific collection of event references and attributes.
Definition ICollection.h:24
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 transaction and connection to a...
Definition ISession.h:37
std::string label(const std::string &format, int i)
Definition label.h:19
Framework include files.
Definition libname.h:15