The Gaudi Framework  master (3c045658)
Loading...
Searching...
No Matches
FileMgr.h
Go to the documentation of this file.
1/***********************************************************************************\
2* (c) Copyright 1998-2026 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
42
43class FileMgr : public extends<Service, IFileMgr, IIncidentListener> {
44public:
45 using extends::extends;
46 ~FileMgr() override;
47
48 StatusCode initialize() override;
49 StatusCode finalize() override;
50
51 void handle( const Incident& ) override;
52
53 StatusCode regHandler( FileHdlr ) override;
54 StatusCode hasHandler( const IoTech& ) const override;
55
56 StatusCode deregHandler( const IoTech& ) override;
57
58 StatusCode getHandler( const IoTech&, FileHdlr& ) const override;
59 StatusCode getHandler( const std::string&, FileHdlr& ) const override;
60
61 int getFileAttr( const std::string&, std::vector<const FileAttr*>& ) const override;
62 StatusCode getFileAttr( const Fd, const FileAttr*& ) const override;
63 StatusCode getFileAttr( void*, const FileAttr*& ) const override;
64
65 void listHandlers() const override;
66 void listFiles() const override;
67 virtual void listActions() const; // does not override...
68 virtual void listSuppression() const; // does not override...
69
70 int getFiles( std::vector<std::string>&, bool onlyOpen = true ) const override;
71 int getFiles( std::vector<const Io::FileAttr*>&, bool onlyOpen = true ) const override;
72 int getFiles( const Io::IoTech&, std::vector<std::string>&, bool onlyOpen = true ) const override;
73 int getFiles( const Io::IoTech&, std::vector<const Io::FileAttr*>&, bool onlyOpen = true ) const override;
74 int getFiles( const Io::IoTech&, const Io::IoFlags&, std::vector<std::string>&, bool onlyOpen = true ) const override;
75 int getFiles( const Io::IoTech&, const Io::IoFlags&, std::vector<const Io::FileAttr*>&,
76 bool onlyOpen = true ) const override;
77
78 int getFd( std::vector<Fd>& ) const override;
79 int getFd( const Io::IoTech&, std::vector<Io::Fd>& ) const override;
80 int getFd( const Io::IoTech&, const Io::IoFlags&, std::vector<Io::Fd>& ) const override;
81
82 // get file name given Fd or ptr
83 const std::string& fname( const Io::Fd& ) const override;
84 const std::string& fname( void* ) const override;
85
86 // get Fd or ptr given file name
87 Io::Fd fd( const std::string& ) const override;
88 Io::Fd fd( void* ) const override;
89
90 void* fptr( const std::string& ) const override;
91 void* fptr( const Io::Fd& ) const override;
92
93 int getLastError( std::string& ) const override;
94
95 // Open file, get Fd and ptr
96 Io::open_t open( const Io::IoTech&, const std::string& caller, const std::string& fname, const Io::IoFlags&,
97 Io::Fd& fd, void*& ptr, const std::string& desc = "", const bool shared = false ) override;
98
99 // Open file, get Fd
100 Io::open_t open( const Io::IoTech&, const std::string& caller, const std::string& fname, const Io::IoFlags&, Io::Fd&,
101 const std::string& desc = "", const bool shared = false ) override;
102
103 // Open file, get ptr
104 Io::open_t open( const Io::IoTech&, const std::string& caller, const std::string& fname, const Io::IoFlags&, void*&,
105 const std::string& desc = "", const bool shared = false ) override;
106
107 Io::close_t close( const Fd, const std::string& caller ) override;
108 Io::close_t close( void*, const std::string& caller ) override;
109
110 Io::reopen_t reopen( const Fd, const IoFlags&, const std::string& caller ) override;
111 Io::reopen_t reopen( void*, const IoFlags&, const std::string& caller ) override;
112
113 StatusCode regAction( Io::bfcn_action_t, const Io::Action&, const std::string& desc = "" ) override;
115 const std::string& desc = "" ) override;
116
117 void suppressAction( const std::string& ) override;
118 void suppressAction( const std::string&, const Io::Action& ) override;
119
120private:
122 Gaudi::Property<bool> m_printSummary{ this, "PrintSummary", false };
123 Gaudi::Property<bool> m_loadRootHandler{ this, "LoadROOTHandler", true };
124 Gaudi::Property<bool> m_loadPosixHandler{ this, "LoadPOSIXHandler", true };
125
126 virtual Io::open_t open( const IoTech&, const std::string& caller, const std::string& fname, const std::string& desc,
127 const IoFlags&, Fd&, void*&,
128 const bool shared ); // does not override...
129
130 typedef std::pair<Io::bfcn_action_t, std::string> bfcn_desc_t;
131 typedef std::map<Io::Action, std::list<bfcn_desc_t>> actionMap;
132 StatusCode execAction( Io::FileAttr*, const std::string&, const Io::Action& ) const;
133 StatusCode execActs( Io::FileAttr*, const std::string&, const Io::Action&, const actionMap& m ) const;
134
135 bool accessMatch( const Io::IoFlags&, const Io::IoFlags&, bool strict = false ) const;
136 bool isShareable( const std::string& filename, const Io::IoFlags& ) const;
137
138 typedef std::multimap<std::string, FileAttr*> fileMap;
139
141 std::map<IoTech, FileHdlr> m_handlers;
142 std::map<Fd, FileAttr*> m_descriptors;
143 std::vector<std::unique_ptr<FileAttr>> m_attr;
144
145 std::vector<FileAttr*> m_oldFiles;
146
147 std::map<IoTech, actionMap> m_actions;
148
149 std::map<std::string, Io::Action_bitmap> m_supMap;
150
151 std::string m_lastErrS;
153
154 std::optional<RootFileHandler> m_rfh;
155 std::optional<POSIXFileHandler> m_pfh;
156};
std::vector< std::unique_ptr< FileAttr > > m_attr
Definition FileMgr.h:143
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:121
void suppressAction(const std::string &) override
Definition FileMgr.cpp:1162
Gaudi::Property< bool > m_printSummary
Definition FileMgr.h:122
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:145
StatusCode execAction(Io::FileAttr *, const std::string &, const Io::Action &) const
Definition FileMgr.cpp:1097
fileMap m_files
Definition FileMgr.h:140
virtual void listActions() const
Definition FileMgr.cpp:1072
std::optional< RootFileHandler > m_rfh
Definition FileMgr.h:154
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:147
Gaudi::Property< bool > m_loadPosixHandler
Definition FileMgr.h:124
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:131
std::string m_lastErrS
Definition FileMgr.h:151
std::map< Fd, FileAttr * > m_descriptors
Definition FileMgr.h:142
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:138
Gaudi::Property< bool > m_loadRootHandler
Definition FileMgr.h:123
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:130
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:141
int m_lastErr
Definition FileMgr.h:152
StatusCode hasHandler(const IoTech &) const override
Definition FileMgr.cpp:234
std::optional< POSIXFileHandler > m_pfh
Definition FileMgr.h:155
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:149
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 Property.h:35
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