Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  master (d98a2936)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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>
21 #include <GaudiKernel/IFileMgr.h>
23 #include <GaudiKernel/Service.h>
24 #include <GaudiKernel/StatusCode.h>
25 
26 #include "POSIXFileHandler.h"
27 #include "RootFileHandler.h"
28 
29 #include <list>
30 #include <map>
31 #include <optional>
32 #include <string>
33 
34 using Io::Fd;
35 using Io::FileAttr;
36 using Io::FileHdlr;
37 using Io::IoFlag;
38 using Io::IoFlags;
39 using Io::IoTech;
40 
41 class RootFileHandler;
42 class POSIXFileHandler;
43 
44 class FileMgr : public extends<Service, IFileMgr, IIncidentListener> {
45 public:
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 
121 private:
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 };
FileMgr::m_rfh
std::optional< RootFileHandler > m_rfh
Definition: FileMgr.h:158
Io::IoTech
IoTech
Definition: IFileMgr.h:147
FileMgr::execActs
StatusCode execActs(Io::FileAttr *, const std::string &, const Io::Action &, const actionMap &m) const
Definition: FileMgr.cpp:1115
FileMgr::m_pfh
std::optional< POSIXFileHandler > m_pfh
Definition: FileMgr.h:159
FileMgr::isShareable
bool isShareable(const std::string &filename, const Io::IoFlags &) const
FileMgr::getFiles
int getFiles(std::vector< std::string > &, bool onlyOpen=true) const override
Definition: FileMgr.cpp:780
FileMgr::m_oldFiles
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:149
RootFileHandler.h
FileMgr::m_loadPosixHandler
Gaudi::Property< bool > m_loadPosixHandler
Definition: FileMgr.h:125
FileMgr::m_ssl_proxy
Gaudi::Property< std::string > m_ssl_proxy
Definition: FileMgr.h:127
Io::open_t
int open_t
Definition: IFileMgr.h:230
FileMgr::fptr
void * fptr(const std::string &) const override
Definition: FileMgr.cpp:967
FileMgr::fd
Io::Fd fd(const std::string &) const override
Definition: FileMgr.cpp:949
FileMgr::suppressAction
void suppressAction(const std::string &) override
Definition: FileMgr.cpp:1162
FileMgr::handle
void handle(const Incident &) override
Definition: FileMgr.cpp:182
FileMgr::m_supMap
std::map< std::string, Io::Action_bitmap > m_supMap
Definition: FileMgr.h:153
FileMgr::m_loadRootHandler
Gaudi::Property< bool > m_loadRootHandler
Definition: FileMgr.h:124
ClassID.h
FileMgr::open
virtual Io::open_t open(const IoTech &, const std::string &caller, const std::string &fname, const std::string &desc, const IoFlags &, Fd &, void *&, const bool shared)
FileMgr::getFileAttr
StatusCode getFileAttr(const Fd, const FileAttr *&) const override
FileMgr
Definition: FileMgr.h:44
FileMgr::hasHandler
StatusCode hasHandler(const IoTech &) const override
Definition: FileMgr.cpp:234
FileMgr::listActions
virtual void listActions() const
Definition: FileMgr.cpp:1072
POSIXFileHandler.h
IFileMgr.h
FileMgr::getHandler
StatusCode getHandler(const IoTech &, FileHdlr &) const override
StatusCode.h
FileMgr::open
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
Io::reopen_t
int reopen_t
Definition: IFileMgr.h:232
FileMgr::initialize
StatusCode initialize() override
Definition: FileMgr.cpp:71
FileMgr::close
Io::close_t close(const Fd, const std::string &caller) override
FileMgr::getFileAttr
int getFileAttr(const std::string &, std::vector< const FileAttr * > &) const override
Definition: FileMgr.cpp:723
FileMgr::fname
const std::string & fname(const Io::Fd &) const override
Definition: FileMgr.cpp:931
FileMgr::regHandler
StatusCode regHandler(FileHdlr) override
Definition: FileMgr.cpp:186
FileMgr::fileMap
std::multimap< std::string, FileAttr * > fileMap
Definition: FileMgr.h:142
StatusCode
Definition: StatusCode.h:64
FileMgr::m_handlers
std::map< IoTech, FileHdlr > m_handlers
Definition: FileMgr.h:145
FileMgr::execAction
StatusCode execAction(Io::FileAttr *, const std::string &, const Io::Action &) const
Definition: FileMgr.cpp:1097
FileMgr::deregHandler
StatusCode deregHandler(const IoTech &) override
Definition: FileMgr.cpp:220
Gaudi::Units::m
constexpr double m
Definition: SystemOfUnits.h:107
FileMgr::m_logfile
Gaudi::Property< std::string > m_logfile
Definition: FileMgr.h:122
Io::FileAttr
Definition: IFileMgr.h:160
FileMgr::m_descriptors
std::map< Fd, FileAttr * > m_descriptors
Definition: FileMgr.h:146
FileMgr::m_ssl_cert
Gaudi::Property< std::string > m_ssl_cert
Definition: FileMgr.h:128
FileMgr::m_lastErrS
std::string m_lastErrS
Definition: FileMgr.h:155
FileMgr::accessMatch
bool accessMatch(const Io::IoFlags &, const Io::IoFlags &, bool strict=false) const
Definition: FileMgr.cpp:1151
extends
Base class used to extend a class implementing other interfaces.
Definition: extends.h:19
Io::Fd
int Fd
Definition: IFileMgr.h:158
Io::close_t
int close_t
Definition: IFileMgr.h:231
FileMgr::listSuppression
virtual void listSuppression() const
Definition: FileMgr.cpp:1170
FileMgr::finalize
StatusCode finalize() override
Definition: FileMgr.cpp:125
FileMgr::getLastError
int getLastError(std::string &) const override
Definition: FileMgr.cpp:997
POSIXFileHandler
Definition: POSIXFileHandler.h:26
FileMgr::m_printSummary
Gaudi::Property< bool > m_printSummary
Definition: FileMgr.h:123
Service.h
FileMgr::regAction
StatusCode regAction(Io::bfcn_action_t, const Io::Action &, const std::string &desc="") override
Definition: FileMgr.cpp:1053
FileMgr::listFiles
void listFiles() const override
Definition: FileMgr.cpp:985
RootFileHandler
Definition: RootFileHandler.h:26
Io::IoFlag
IoFlag
Definition: IFileMgr.h:29
FileMgr::actionMap
std::map< Io::Action, std::list< bfcn_desc_t > > actionMap
Definition: FileMgr.h:135
IIncidentListener.h
FileMgr::m_actions
std::map< IoTech, actionMap > m_actions
Definition: FileMgr.h:151
FileMgr::listHandlers
void listHandlers() const override
Definition: FileMgr.cpp:1043
FileMgr::getFd
int getFd(std::vector< Fd > &) const override
Io::FileHdlr
Definition: IFileMgr.h:241
Io::bfcn_action_t
std::function< StatusCode(FILEMGR_CALLBACK_ARGS)> bfcn_action_t
Definition: IFileMgr.h:273
FileMgr::~FileMgr
~FileMgr() override
Definition: FileMgr.cpp:63
Io::Action
Action
Definition: IFileMgr.h:263
FileMgr::reopen
Io::reopen_t reopen(const Fd, const IoFlags &, const std::string &caller) override
FileMgr::bfcn_desc_t
std::pair< Io::bfcn_action_t, std::string > bfcn_desc_t
Definition: FileMgr.h:134
Incident
Definition: Incident.h:24
graphanalysis.filename
filename
Definition: graphanalysis.py:130
Io::IoFlags
Definition: IFileMgr.h:43
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:144
Gaudi::Property< std::string >
FileMgr::m_lastErr
int m_lastErr
Definition: FileMgr.h:156
FileMgr::m_attr
std::vector< std::unique_ptr< FileAttr > > m_attr
Definition: FileMgr.h:147