All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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"
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  virtual ~FileMgr();
36 
37 public:
38  virtual StatusCode initialize();
39  virtual StatusCode finalize();
40 
41 public:
42  virtual void handle(const Incident&);
43 
44 public:
46  virtual StatusCode hasHandler(const IoTech&) const;
47 
48  virtual StatusCode deregHandler(const IoTech&);
49 
50  virtual StatusCode getHandler(const IoTech&, FileHdlr&) const;
51  virtual StatusCode getHandler(const std::string&, FileHdlr&) const;
52 
53  virtual int getFileAttr(const std::string&, std::vector<const FileAttr*>&) const;
54  virtual StatusCode getFileAttr(const Fd, const FileAttr*&) const;
55  virtual StatusCode getFileAttr(void*, const FileAttr*&) const;
56 
57  virtual void listHandlers() const;
58  virtual void listFiles() const;
59  virtual void listActions() const;
60  virtual void listSuppression() const;
61 
62  virtual int getFiles(std::vector<std::string>&, bool onlyOpen=true) const;
63  virtual int getFiles(std::vector<const Io::FileAttr*>&,
64  bool onlyOpen=true) const;
65  virtual int getFiles(const Io::IoTech&, std::vector<std::string>&,
66  bool onlyOpen=true) const;
67  virtual int getFiles(const Io::IoTech&, std::vector<const Io::FileAttr*>&,
68  bool onlyOpen=true) const;
69  virtual int getFiles(const Io::IoTech&, const Io::IoFlags&,
70  std::vector<std::string>&, bool onlyOpen=true) const;
71  virtual int getFiles(const Io::IoTech&, const Io::IoFlags&,
72  std::vector<const Io::FileAttr*>&,
73  bool onlyOpen=true) const;
74 
75  virtual int getFd(std::vector<Fd>&) const;
76  virtual int getFd(const Io::IoTech&, std::vector<Io::Fd>&) const;
77  virtual int getFd(const Io::IoTech&, const Io::IoFlags&,
78  std::vector<Io::Fd> &) const;
79 
80  // get file name given Fd or ptr
81  virtual const std::string& fname(const Io::Fd&) const;
82  virtual const std::string& fname(void*) const;
83 
84  // get Fd or ptr given file name
85  virtual Io::Fd fd(const std::string&) const;
86  virtual Io::Fd fd(void*) const;
87 
88  virtual void* fptr(const std::string&) const;
89  virtual void* fptr(const Io::Fd&) const;
90 
91  virtual int getLastError(std::string&) const;
92 
93 
94  // Open file, get Fd and ptr
95  virtual Io::open_t open(const Io::IoTech&, const std::string& caller,
96  const std::string& fname,
97  const Io::IoFlags&, Io::Fd& fd, void*& ptr,
98  const std::string& desc="",
99  const bool shared=false);
100 
101  // Open file, get Fd
102  virtual Io::open_t open(const Io::IoTech&, const std::string& caller,
103  const std::string& fname,
104  const Io::IoFlags&, Io::Fd&,
105  const std::string& desc="",
106  const bool shared=false);
107 
108  // Open file, get ptr
109  virtual Io::open_t open(const Io::IoTech&, const std::string& caller,
110  const std::string& fname,
111  const Io::IoFlags&, void*&,
112  const std::string& desc="",
113  const bool shared=false);
114 
115 
116  virtual Io::close_t close(const Fd, const std::string& caller);
117  virtual Io::close_t close(void*, const std::string& caller);
118 
119  virtual Io::reopen_t reopen(const Fd, const IoFlags&,
120  const std::string& caller);
121  virtual Io::reopen_t reopen(void*, const IoFlags&,
122  const std::string& caller);
123 
124 
126  const std::string& desc="");
128  const Io::IoTech&, const std::string& desc="");
129 
130  virtual void suppressAction(const std::string&);
131  virtual void suppressAction(const std::string&, const Io::Action&);
132 
133 private:
134 
138 
139  virtual Io::open_t open(const IoTech&, const std::string& caller,
140  const std::string& fname, const std::string& desc,
141  const IoFlags&, Fd&, void*&,
142  const bool shared);
143 
144  typedef std::pair<Io::bfcn_action_t,std::string> bfcn_desc_t;
145  typedef std::map<Io::Action, std::list<bfcn_desc_t> > actionMap;
146  StatusCode execAction(Io::FileAttr*, const std::string&, const Io::Action&) const;
147  StatusCode execActs(Io::FileAttr*, const std::string&, const Io::Action&,
148  const actionMap& m) const;
149 
150  bool accessMatch(const Io::IoFlags&, const Io::IoFlags&,
151  bool strict=false) const;
152  bool isShareable(const std::string& filename, const Io::IoFlags&) const;
153 
154 
155  typedef std::multimap<std::string, FileAttr*> fileMap;
156 
158  std::map<IoTech, FileHdlr> m_handlers;
159  std::map<Fd, FileAttr*> m_descriptors;
160  std::map<void*, FileAttr*> m_fptr;
161  std::vector<FileAttr*> m_attr;
162 
163  typedef std::list<FileAttr*> fileList;
165 
166  std::map< IoTech, actionMap > m_actions;
167 
168  typedef std::map<std::string, int> supMap;
170 
171  std::string m_lastErrS;
173 
176  mutable MsgStream m_log;
177 
178 };
179 
180 #endif
181 
IoTech
Definition: IFileMgr.h:170
StringProperty m_logfile
Definition: FileMgr.h:135
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
virtual void listFiles() const
Definition: FileMgr.cpp:1396
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:26
virtual Io::reopen_t reopen(const Fd, const IoFlags &, const std::string &caller)
virtual 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)
Definition: FileMgr.cpp:317
virtual StatusCode regAction(Io::bfcn_action_t, const Io::Action &, const std::string &desc="")
Definition: FileMgr.cpp:1498
int reopen_t
Definition: IFileMgr.h:280
int Fd
Definition: IFileMgr.h:197
IoFlag
Definition: IFileMgr.h:25
MsgStream m_log
Definition: FileMgr.h:176
supMap m_supMap
Definition: FileMgr.h:169
virtual int getFileAttr(const std::string &, std::vector< const FileAttr * > &) const
Definition: FileMgr.cpp:973
fileMap m_files
Definition: FileMgr.h:157
int open_t
Definition: IFileMgr.h:278
fileList m_oldFiles
Definition: FileMgr.h:164
std::map< Io::Action, std::list< bfcn_desc_t > > actionMap
Definition: FileMgr.h:145
StatusCode execAction(Io::FileAttr *, const std::string &, const Io::Action &) const
Definition: FileMgr.cpp:1586
virtual int getFiles(std::vector< std::string > &, bool onlyOpen=true) const
Definition: FileMgr.cpp:1049
virtual ~FileMgr()
Definition: FileMgr.cpp:57
Base class used to extend a class implementing other interfaces.
Definition: extends.h:75
virtual StatusCode getHandler(const IoTech &, FileHdlr &) const
std::map< Fd, FileAttr * > m_descriptors
Definition: FileMgr.h:159
virtual StatusCode regHandler(FileHdlr)
Definition: FileMgr.cpp:237
virtual StatusCode finalize()
Finalize (from INITIALIZED to CONFIGURED).
Definition: FileMgr.cpp:145
virtual void handle(const Incident &)
Inform that a new incident has occurred.
Definition: FileMgr.cpp:230
virtual StatusCode initialize()
Initialization (from CONFIGURED to INITIALIZED).
Definition: FileMgr.cpp:64
bool accessMatch(const Io::IoFlags &, const Io::IoFlags &, bool strict=false) const
Definition: FileMgr.cpp:1677
virtual void suppressAction(const std::string &)
Definition: FileMgr.cpp:1699
virtual void listActions() const
Definition: FileMgr.cpp:1541
Action
Definition: IFileMgr.h:316
virtual const std::string & fname(const Io::Fd &) const
Definition: FileMgr.cpp:1293
std::map< IoTech, FileHdlr > m_handlers
Definition: FileMgr.h:158
virtual Io::close_t close(const Fd, const std::string &caller)
std::vector< FileAttr * > m_attr
Definition: FileMgr.h:161
virtual StatusCode deregHandler(const IoTech &)
Definition: FileMgr.cpp:284
boost::function< StatusCode(FILEMGR_CALLBACK_ARGS) > bfcn_action_t
Definition: IFileMgr.h:340
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:30
StatusCode execActs(Io::FileAttr *, const std::string &, const Io::Action &, const actionMap &m) const
Definition: FileMgr.cpp:1618
BooleanProperty m_printSummary
Definition: FileMgr.h:136
std::pair< Io::bfcn_action_t, std::string > bfcn_desc_t
Definition: FileMgr.h:144
std::string m_lastErrS
Definition: FileMgr.h:171
virtual const std::string & name() const
Retrieve name of the service.
Definition: Service.cpp:331
FileMgr(const std::string &name, ISvcLocator *svc)
Definition: FileMgr.cpp:38
RootFileHandler * m_rfh
Definition: FileMgr.h:174
std::multimap< std::string, FileAttr * > fileMap
Definition: FileMgr.h:155
BooleanProperty m_loadRootHandler
Definition: FileMgr.h:136
POSIXFileHandler * m_pfh
Definition: FileMgr.h:175
BooleanProperty m_loadPosixHandler
Definition: FileMgr.h:136
virtual void listSuppression() const
Definition: FileMgr.cpp:1724
StringProperty m_ssl_cert
Definition: FileMgr.h:137
Base class for all Incidents (computing events).
Definition: Incident.h:16
virtual Io::Fd fd(const std::string &) const
Definition: FileMgr.cpp:1327
bool isShareable(const std::string &filename, const Io::IoFlags &) const
std::map< void *, FileAttr * > m_fptr
Definition: FileMgr.h:160
virtual StatusCode hasHandler(const IoTech &) const
Definition: FileMgr.cpp:303
virtual void * fptr(const std::string &) const
Definition: FileMgr.cpp:1362
int m_lastErr
Definition: FileMgr.h:172
StringProperty m_ssl_proxy
Definition: FileMgr.h:137
virtual void listHandlers() const
Definition: FileMgr.cpp:1481
std::list< FileAttr * > fileList
Definition: FileMgr.h:163
int close_t
Definition: IFileMgr.h:279
virtual int getFd(std::vector< Fd > &) const
std::map< IoTech, actionMap > m_actions
Definition: FileMgr.h:166
virtual int getLastError(std::string &) const
Definition: FileMgr.cpp:1419
std::map< std::string, int > supMap
Definition: FileMgr.h:168