The Gaudi Framework  master (1304469f)
Loading...
Searching...
No Matches
FileMgr.h
Go to the documentation of this file.
1/***********************************************************************************\
2* (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3* *
4* This software is distributed under the terms of the Apache version 2 licence, *
5* copied verbatim in the file "LICENSE". *
6* *
7* In applying this licence, CERN does not waive the privileges and immunities *
8* granted to it by virtue of its status as an Intergovernmental Organization *
9* or submit itself to any jurisdiction. *
10\***********************************************************************************/
12// FileMgr.h
13// Manages all file open/reopen/close
14// implementation of IFileMgr
15// Author: C.Leggett
17
18#pragma once
19
20#include <GaudiKernel/ClassID.h>
23#include <GaudiKernel/Service.h>
25
26#include "POSIXFileHandler.h"
27#include "RootFileHandler.h"
28
29#include <list>
30#include <map>
31#include <optional>
32#include <string>
33
34using Io::Fd;
35using Io::FileAttr;
36using Io::FileHdlr;
37using Io::IoFlag;
38using Io::IoFlags;
39using Io::IoTech;
40
41class RootFileHandler;
43
44class FileMgr : public extends<Service, IFileMgr, IIncidentListener> {
45public:
46 using extends::extends;
47 ~FileMgr() override;
48
49 StatusCode initialize() override;
50 StatusCode finalize() override;
51
52 void handle( const Incident& ) override;
53
54 StatusCode regHandler( FileHdlr ) override;
55 StatusCode hasHandler( const IoTech& ) const override;
56
57 StatusCode deregHandler( const IoTech& ) override;
58
59 StatusCode getHandler( const IoTech&, FileHdlr& ) const override;
60 StatusCode getHandler( const std::string&, FileHdlr& ) const override;
61
62 int getFileAttr( const std::string&, std::vector<const FileAttr*>& ) const override;
63 StatusCode getFileAttr( const Fd, const FileAttr*& ) const override;
64 StatusCode getFileAttr( void*, const FileAttr*& ) const override;
65
66 void listHandlers() const override;
67 void listFiles() const override;
68 virtual void listActions() const; // does not override...
69 virtual void listSuppression() const; // does not override...
70
71 int getFiles( std::vector<std::string>&, bool onlyOpen = true ) const override;
72 int getFiles( std::vector<const Io::FileAttr*>&, bool onlyOpen = true ) const override;
73 int getFiles( const Io::IoTech&, std::vector<std::string>&, bool onlyOpen = true ) const override;
74 int getFiles( const Io::IoTech&, std::vector<const Io::FileAttr*>&, bool onlyOpen = true ) const override;
75 int getFiles( const Io::IoTech&, const Io::IoFlags&, std::vector<std::string>&, bool onlyOpen = true ) const override;
76 int getFiles( const Io::IoTech&, const Io::IoFlags&, std::vector<const Io::FileAttr*>&,
77 bool onlyOpen = true ) const override;
78
79 int getFd( std::vector<Fd>& ) const override;
80 int getFd( const Io::IoTech&, std::vector<Io::Fd>& ) const override;
81 int getFd( const Io::IoTech&, const Io::IoFlags&, std::vector<Io::Fd>& ) const override;
82
83 // get file name given Fd or ptr
84 const std::string& fname( const Io::Fd& ) const override;
85 const std::string& fname( void* ) const override;
86
87 // get Fd or ptr given file name
88 Io::Fd fd( const std::string& ) const override;
89 Io::Fd fd( void* ) const override;
90
91 void* fptr( const std::string& ) const override;
92 void* fptr( const Io::Fd& ) const override;
93
94 int getLastError( std::string& ) const override;
95
96 // Open file, get Fd and ptr
97 Io::open_t open( const Io::IoTech&, const std::string& caller, const std::string& fname, const Io::IoFlags&,
98 Io::Fd& fd, void*& ptr, const std::string& desc = "", const bool shared = false ) override;
99
100 // Open file, get Fd
101 Io::open_t open( const Io::IoTech&, const std::string& caller, const std::string& fname, const Io::IoFlags&, Io::Fd&,
102 const std::string& desc = "", const bool shared = false ) override;
103
104 // Open file, get ptr
105 Io::open_t open( const Io::IoTech&, const std::string& caller, const std::string& fname, const Io::IoFlags&, void*&,
106 const std::string& desc = "", const bool shared = false ) override;
107
108 Io::close_t close( const Fd, const std::string& caller ) override;
109 Io::close_t close( void*, const std::string& caller ) override;
110
111 Io::reopen_t reopen( const Fd, const IoFlags&, const std::string& caller ) override;
112 Io::reopen_t reopen( void*, const IoFlags&, const std::string& caller ) override;
113
114 StatusCode regAction( Io::bfcn_action_t, const Io::Action&, const std::string& desc = "" ) override;
116 const std::string& desc = "" ) override;
117
118 void suppressAction( const std::string& ) override;
119 void suppressAction( const std::string&, const Io::Action& ) override;
120
121private:
123 Gaudi::Property<bool> m_printSummary{ this, "PrintSummary", false };
124 Gaudi::Property<bool> m_loadRootHandler{ this, "LoadROOTHandler", true };
125 Gaudi::Property<bool> m_loadPosixHandler{ this, "LoadPOSIXHandler", true };
126
127 Gaudi::Property<std::string> m_ssl_proxy{ this, "TSSL_UserProxy", "X509" };
128 Gaudi::Property<std::string> m_ssl_cert{ this, "TSSL_CertDir", "X509" };
129
130 virtual Io::open_t open( const IoTech&, const std::string& caller, const std::string& fname, const std::string& desc,
131 const IoFlags&, Fd&, void*&,
132 const bool shared ); // does not override...
133
134 typedef std::pair<Io::bfcn_action_t, std::string> bfcn_desc_t;
135 typedef std::map<Io::Action, std::list<bfcn_desc_t>> actionMap;
136 StatusCode execAction( Io::FileAttr*, const std::string&, const Io::Action& ) const;
137 StatusCode execActs( Io::FileAttr*, const std::string&, const Io::Action&, const actionMap& m ) const;
138
139 bool accessMatch( const Io::IoFlags&, const Io::IoFlags&, bool strict = false ) const;
140 bool isShareable( const std::string& filename, const Io::IoFlags& ) const;
141
142 typedef std::multimap<std::string, FileAttr*> fileMap;
143
145 std::map<IoTech, FileHdlr> m_handlers;
146 std::map<Fd, FileAttr*> m_descriptors;
147 std::vector<std::unique_ptr<FileAttr>> m_attr;
148
149 std::vector<FileAttr*> m_oldFiles;
150
151 std::map<IoTech, actionMap> m_actions;
152
153 std::map<std::string, Io::Action_bitmap> m_supMap;
154
155 std::string m_lastErrS;
157
158 std::optional<RootFileHandler> m_rfh;
159 std::optional<POSIXFileHandler> m_pfh;
160};
std::vector< std::unique_ptr< FileAttr > > m_attr
Definition FileMgr.h:147
Io::reopen_t reopen(const Fd, const IoFlags &, const std::string &caller) override
Definition FileMgr.cpp:600
Gaudi::Property< std::string > m_logfile
Definition FileMgr.h:122
void suppressAction(const std::string &) override
Definition FileMgr.cpp:1162
Gaudi::Property< bool > m_printSummary
Definition FileMgr.h:123
StatusCode initialize() override
Definition FileMgr.cpp:71
StatusCode deregHandler(const IoTech &) override
Definition FileMgr.cpp:220
bool isShareable(const std::string &filename, const Io::IoFlags &) const
std::vector< FileAttr * > m_oldFiles
Definition FileMgr.h:149
StatusCode execAction(Io::FileAttr *, const std::string &, const Io::Action &) const
Definition FileMgr.cpp:1097
fileMap m_files
Definition FileMgr.h:144
Gaudi::Property< std::string > m_ssl_cert
Definition FileMgr.h:128
virtual void listActions() const
Definition FileMgr.cpp:1072
std::optional< RootFileHandler > m_rfh
Definition FileMgr.h:158
StatusCode regHandler(FileHdlr) override
Definition FileMgr.cpp:186
StatusCode execActs(Io::FileAttr *, const std::string &, const Io::Action &, const actionMap &m) const
Definition FileMgr.cpp:1115
std::map< IoTech, actionMap > m_actions
Definition FileMgr.h:151
Gaudi::Property< bool > m_loadPosixHandler
Definition FileMgr.h:125
void listHandlers() const override
Definition FileMgr.cpp:1043
~FileMgr() override
Definition FileMgr.cpp:63
virtual void listSuppression() const
Definition FileMgr.cpp:1170
StatusCode regAction(Io::bfcn_action_t, const Io::Action &, const std::string &desc="") override
Definition FileMgr.cpp:1053
std::map< Io::Action, std::list< bfcn_desc_t > > actionMap
Definition FileMgr.h:135
std::string m_lastErrS
Definition FileMgr.h:155
std::map< Fd, FileAttr * > m_descriptors
Definition FileMgr.h:146
bool accessMatch(const Io::IoFlags &, const Io::IoFlags &, bool strict=false) const
Definition FileMgr.cpp:1151
Io::open_t open(const Io::IoTech &, const std::string &caller, const std::string &fname, const Io::IoFlags &, Io::Fd &fd, void *&ptr, const std::string &desc="", const bool shared=false) override
Definition FileMgr.cpp:242
std::multimap< std::string, FileAttr * > fileMap
Definition FileMgr.h:142
Gaudi::Property< std::string > m_ssl_proxy
Definition FileMgr.h:127
Gaudi::Property< bool > m_loadRootHandler
Definition FileMgr.h:124
Io::Fd fd(const std::string &) const override
Definition FileMgr.cpp:949
std::pair< Io::bfcn_action_t, std::string > bfcn_desc_t
Definition FileMgr.h:134
int getFd(std::vector< Fd > &) const override
Definition FileMgr.cpp:893
Io::close_t close(const Fd, const std::string &caller) override
Definition FileMgr.cpp:402
const std::string & fname(const Io::Fd &) const override
Definition FileMgr.cpp:931
void handle(const Incident &) override
Definition FileMgr.cpp:182
std::map< IoTech, FileHdlr > m_handlers
Definition FileMgr.h:145
int m_lastErr
Definition FileMgr.h:156
StatusCode hasHandler(const IoTech &) const override
Definition FileMgr.cpp:234
std::optional< POSIXFileHandler > m_pfh
Definition FileMgr.h:159
void * fptr(const std::string &) const override
Definition FileMgr.cpp:967
void listFiles() const override
Definition FileMgr.cpp:985
std::map< std::string, Io::Action_bitmap > m_supMap
Definition FileMgr.h:153
int getFileAttr(const std::string &, std::vector< const FileAttr * > &) const override
Definition FileMgr.cpp:723
int getFiles(std::vector< std::string > &, bool onlyOpen=true) const override
Definition FileMgr.cpp:780
int getLastError(std::string &) const override
Definition FileMgr.cpp:997
StatusCode finalize() override
Definition FileMgr.cpp:125
StatusCode getHandler(const IoTech &, FileHdlr &) const override
Definition FileMgr.cpp:1005
Implementation of property with value of concrete type.
Definition PropertyFwd.h:27
Base class for all Incidents (computing events).
Definition Incident.h:24
This class is used for returning status codes from appropriate routines.
Definition StatusCode.h:64
Base class used to extend a class implementing other interfaces.
Definition extends.h:19
Action
Definition IFileMgr.h:263
std::function< StatusCode(FILEMGR_CALLBACK_ARGS)> bfcn_action_t
Definition IFileMgr.h:273
int reopen_t
Definition IFileMgr.h:232
IoTech
Definition IFileMgr.h:147
IoFlag
Definition IFileMgr.h:29
int Fd
Definition IFileMgr.h:158
int close_t
Definition IFileMgr.h:231
int open_t
Definition IFileMgr.h:230