FileMgr.h
Go to the documentation of this file.
1 // FileMgr.h
3 // Manages all file open/reopen/close
4 // implementation of IFileMgr
5 // Author: C.Leggett
7 
8 #ifndef GAUDISVC_FILEMGR_H
9 #define GAUDISVC_FILEMGR_H 1
10 
11 #include "GaudiKernel/IFileMgr.h"
12 #include "GaudiKernel/Service.h"
13 #include "GaudiKernel/IIncidentListener.h"
14 #include "GaudiKernel/ClassID.h"
15 #include "GaudiKernel/MsgStream.h"
16 #include "GaudiKernel/StatusCode.h"
17 
18 #include <string>
19 #include <map>
20 #include <list>
21 
22 using Io::IoTech;
23 using Io::IoFlag;
24 using Io::IoFlags;
25 using Io::FileAttr;
26 using Io::FileHdlr;
27 using Io::Fd;
28 
29 class RootFileHandler;
30 class POSIXFileHandler;
31 
32 class FileMgr: public extends2<Service, IFileMgr, IIncidentListener> {
33 public:
34  FileMgr(const std::string& name, ISvcLocator* svc);
35  ~FileMgr() override;
36 
37  StatusCode initialize() override;
38  StatusCode finalize() override;
39 
40  void handle(const Incident&) override;
41 
42  StatusCode regHandler(FileHdlr) override;
43  StatusCode hasHandler(const IoTech&) const override;
44 
45  StatusCode deregHandler(const IoTech&) override;
46 
47  StatusCode getHandler(const IoTech&, FileHdlr&) const override;
48  StatusCode getHandler(const std::string&, FileHdlr&) const override;
49 
50  int getFileAttr(const std::string&, std::vector<const FileAttr*>&) const override;
51  StatusCode getFileAttr(const Fd, const FileAttr*&) const override;
52  StatusCode getFileAttr(void*, const FileAttr*&) const override;
53 
54  void listHandlers() const override;
55  void listFiles() const override;
56  virtual void listActions() const ; // does not override...
57  virtual void listSuppression() const ; // does not override...
58 
59  int getFiles(std::vector<std::string>&, bool onlyOpen=true) const override;
60  int getFiles(std::vector<const Io::FileAttr*>&,
61  bool onlyOpen=true) const override;
62  int getFiles(const Io::IoTech&, std::vector<std::string>&,
63  bool onlyOpen=true) const override;
64  int getFiles(const Io::IoTech&, std::vector<const Io::FileAttr*>&,
65  bool onlyOpen=true) const override;
66  int getFiles(const Io::IoTech&, const Io::IoFlags&,
67  std::vector<std::string>&, bool onlyOpen=true) const override;
68  int getFiles(const Io::IoTech&, const Io::IoFlags&,
69  std::vector<const Io::FileAttr*>&,
70  bool onlyOpen=true) const override;
71 
72  int getFd(std::vector<Fd>&) const override;
73  int getFd(const Io::IoTech&, std::vector<Io::Fd>&) const override;
74  int getFd(const Io::IoTech&, const Io::IoFlags&,
75  std::vector<Io::Fd> &) const override;
76 
77  // get file name given Fd or ptr
78  const std::string& fname(const Io::Fd&) const override;
79  const std::string& fname(void*) const override;
80 
81  // get Fd or ptr given file name
82  Io::Fd fd(const std::string&) const override;
83  Io::Fd fd(void*) const override;
84 
85  void* fptr(const std::string&) const override;
86  void* fptr(const Io::Fd&) const override;
87 
88  int getLastError(std::string&) const override;
89 
90 
91  // Open file, get Fd and ptr
92  Io::open_t open(const Io::IoTech&, const std::string& caller,
93  const std::string& fname,
94  const Io::IoFlags&, Io::Fd& fd, void*& ptr,
95  const std::string& desc="",
96  const bool shared=false) override;
97 
98  // Open file, get Fd
99  Io::open_t open(const Io::IoTech&, const std::string& caller,
100  const std::string& fname,
101  const Io::IoFlags&, Io::Fd&,
102  const std::string& desc="",
103  const bool shared=false) override;
104 
105  // Open file, get ptr
106  Io::open_t open(const Io::IoTech&, const std::string& caller,
107  const std::string& fname,
108  const Io::IoFlags&, void*&,
109  const std::string& desc="",
110  const bool shared=false) override;
111 
112 
113  Io::close_t close(const Fd, const std::string& caller) override;
114  Io::close_t close(void*, const std::string& caller) override;
115 
116  Io::reopen_t reopen(const Fd, const IoFlags&,
117  const std::string& caller) override;
118  Io::reopen_t reopen(void*, const IoFlags&,
119  const std::string& caller) override;
120 
121 
123  const std::string& desc="") override;
125  const Io::IoTech&, const std::string& desc="") override;
126 
127  void suppressAction(const std::string&) override;
128  void suppressAction(const std::string&, const Io::Action&) override;
129 
130 private:
131 
135 
136  virtual Io::open_t open(const IoTech&, const std::string& caller,
137  const std::string& fname, const std::string& desc,
138  const IoFlags&, Fd&, void*&,
139  const bool shared) ; // does not override...
140 
141  typedef std::pair<Io::bfcn_action_t,std::string> bfcn_desc_t;
142  typedef std::map<Io::Action, std::list<bfcn_desc_t> > actionMap;
143  StatusCode execAction(Io::FileAttr*, const std::string&, const Io::Action&) const;
144  StatusCode execActs(Io::FileAttr*, const std::string&, const Io::Action&,
145  const actionMap& m) const;
146 
147  bool accessMatch(const Io::IoFlags&, const Io::IoFlags&,
148  bool strict=false) const;
149  bool isShareable(const std::string& filename, const Io::IoFlags&) const;
150 
151 
152  typedef std::multimap<std::string, FileAttr*> fileMap;
153 
154  fileMap m_files;
155  std::map<IoTech, FileHdlr> m_handlers;
156  std::map<Fd, FileAttr*> m_descriptors;
157  std::vector<std::unique_ptr<FileAttr>> m_attr;
158 
159  std::vector<FileAttr*> m_oldFiles;
160 
161  std::map< IoTech, actionMap > m_actions;
162 
163  typedef std::map<std::string, int> supMap;
164  supMap m_supMap;
165 
166  std::string m_lastErrS;
168 
169  std::unique_ptr<RootFileHandler> m_rfh;
170  std::unique_ptr<POSIXFileHandler> m_pfh;
171  mutable MsgStream m_log;
172 
173 };
174 
175 #endif
176 
std::vector< std::unique_ptr< FileAttr > > m_attr
Definition: FileMgr.h:157
StatusCode regHandler(FileHdlr) override
Definition: FileMgr.cpp:278
StatusCode getHandler(const IoTech &, FileHdlr &) const override
IoTech
Definition: IFileMgr.h:150
Io::Fd fd(const std::string &) const override
Definition: FileMgr.cpp:1235
StringProperty m_logfile
Definition: FileMgr.h:132
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
std::function< StatusCode(FILEMGR_CALLBACK_ARGS) > bfcn_action_t
Definition: IFileMgr.h:309
int reopen_t
Definition: IFileMgr.h:254
int Fd
Definition: IFileMgr.h:172
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:353
void suppressAction(const std::string &) override
Definition: FileMgr.cpp:1516
IoFlag
Definition: IFileMgr.h:25
MsgStream m_log
Definition: FileMgr.h:171
supMap m_supMap
Definition: FileMgr.h:164
fileMap m_files
Definition: FileMgr.h:154
int open_t
Definition: IFileMgr.h:252
std::map< Io::Action, std::list< bfcn_desc_t > > actionMap
Definition: FileMgr.h:142
int getLastError(std::string &) const override
Definition: FileMgr.cpp:1295
StatusCode deregHandler(const IoTech &) override
Definition: FileMgr.cpp:325
StatusCode execAction(Io::FileAttr *, const std::string &, const Io::Action &) const
Definition: FileMgr.cpp:1420
std::map< Fd, FileAttr * > m_descriptors
Definition: FileMgr.h:156
StatusCode hasHandler(const IoTech &) const override
Definition: FileMgr.cpp:343
bool accessMatch(const Io::IoFlags &, const Io::IoFlags &, bool strict=false) const
Definition: FileMgr.cpp:1499
std::unique_ptr< RootFileHandler > m_rfh
Definition: FileMgr.h:169
virtual void listActions() const
Definition: FileMgr.cpp:1391
Action
Definition: IFileMgr.h:290
std::map< IoTech, FileHdlr > m_handlers
Definition: FileMgr.h:155
void handle(const Incident &) override
Definition: FileMgr.cpp:271
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
constexpr double m
Definition: SystemOfUnits.h:93
Io::reopen_t reopen(const Fd, const IoFlags &, const std::string &caller) override
StatusCode execActs(Io::FileAttr *, const std::string &, const Io::Action &, const actionMap &m) const
Definition: FileMgr.cpp:1445
BooleanProperty m_printSummary
Definition: FileMgr.h:133
std::pair< Io::bfcn_action_t, std::string > bfcn_desc_t
Definition: FileMgr.h:141
Io::close_t close(const Fd, const std::string &caller) override
std::unique_ptr< POSIXFileHandler > m_pfh
Definition: FileMgr.h:170
int getFileAttr(const std::string &, std::vector< const FileAttr * > &) const override
Definition: FileMgr.cpp:974
std::string m_lastErrS
Definition: FileMgr.h:166
StatusCode regAction(Io::bfcn_action_t, const Io::Action &, const std::string &desc="") override
Definition: FileMgr.cpp:1365
FileMgr(const std::string &name, ISvcLocator *svc)
Definition: FileMgr.cpp:78
std::multimap< std::string, FileAttr * > fileMap
Definition: FileMgr.h:152
BooleanProperty m_loadRootHandler
Definition: FileMgr.h:133
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:159
const std::string & fname(const Io::Fd &) const override
Definition: FileMgr.cpp:1212
BooleanProperty m_loadPosixHandler
Definition: FileMgr.h:133
Base class used to extend a class implementing other interfaces.
Definition: extends.h:10
virtual void listSuppression() const
Definition: FileMgr.cpp:1541
void * fptr(const std::string &) const override
Definition: FileMgr.cpp:1258
StringProperty m_ssl_cert
Definition: FileMgr.h:134
Base class for all Incidents (computing events).
Definition: Incident.h:16
bool isShareable(const std::string &filename, const Io::IoFlags &) const
int m_lastErr
Definition: FileMgr.h:167
int getFiles(std::vector< std::string > &, bool onlyOpen=true) const override
Definition: FileMgr.cpp:1037
void listFiles() const override
Definition: FileMgr.cpp:1280
StringProperty m_ssl_proxy
Definition: FileMgr.h:134
void listHandlers() const override
Definition: FileMgr.cpp:1352
~FileMgr() override
Definition: FileMgr.cpp:97
int getFd(std::vector< Fd > &) const override
StatusCode finalize() override
Definition: FileMgr.cpp:202
int close_t
Definition: IFileMgr.h:253
StatusCode initialize() override
Definition: FileMgr.cpp:106
std::map< IoTech, actionMap > m_actions
Definition: FileMgr.h:161
std::map< std::string, int > supMap
Definition: FileMgr.h:163