XRootD
Loading...
Searching...
No Matches
XrdThrottle.hh
Go to the documentation of this file.
1#ifndef __XRDTHROTTLE_H_
2#define __XRDTHROTTLE_H_
3
4#include <memory>
5#include <string>
6
7#include "XrdVersion.hh"
10
13
14class XrdSysLogger;
15class XrdOucStream;
16
17
18namespace XrdThrottle {
19
20#if __cplusplus >= 201103L
21typedef std::unique_ptr<XrdSfsFile> unique_sfs_ptr;
22#else
23typedef std::auto_ptr<XrdSfsFile> unique_sfs_ptr;
24#endif
25
26class FileSystem;
27
28class File final : public XrdSfsFile {
29
30friend class FileSystem;
31
32public:
33
34 virtual int
35 open(const char *fileName,
36 XrdSfsFileOpenMode openMode,
37 mode_t createMode,
38 const XrdSecEntity *client,
39 const char *opaque = 0) override;
40
41 virtual int
42 close() override;
43
44 virtual int
45 checkpoint(cpAct act, struct iov *range=0, int n=0) override;
46
47 using XrdSfsFile::fctl;
48 virtual int
49 fctl(const int cmd,
50 const char *args,
51 XrdOucErrInfo &out_error) override;
52
53 virtual const char *
54 FName() override;
55
56 virtual int
57 getMmap(void **Addr, off_t &Size) override;
58
59 virtual XrdSfsXferSize
61 char *buffer,
62 XrdSfsXferSize rdlen,
63 uint32_t *csvec,
64 uint64_t opts=0) override;
65
66 virtual XrdSfsXferSize
67 pgRead(XrdSfsAio *aioparm, uint64_t opts=0) override;
68
69 virtual XrdSfsXferSize
71 char *buffer,
72 XrdSfsXferSize rdlen,
73 uint32_t *csvec,
74 uint64_t opts=0) override;
75
76 virtual XrdSfsXferSize
77 pgWrite(XrdSfsAio *aioparm, uint64_t opts=0) override;
78
79 virtual int
80 read(XrdSfsFileOffset fileOffset, // Preread only
81 XrdSfsXferSize amount) override;
82
83 virtual XrdSfsXferSize
84 read(XrdSfsFileOffset fileOffset,
85 char *buffer,
86 XrdSfsXferSize buffer_size) override;
87
88 virtual int
89 read(XrdSfsAio *aioparm) override;
90
91 virtual XrdSfsXferSize
92 write(XrdSfsFileOffset fileOffset,
93 const char *buffer,
94 XrdSfsXferSize buffer_size) override;
95
96 virtual int
97 write(XrdSfsAio *aioparm) override;
98
99 virtual int
100 sync() override;
101
102 virtual int
103 sync(XrdSfsAio *aiop) override;
104
105 virtual int
106 stat(struct stat *buf) override;
107
108 virtual int
109 truncate(XrdSfsFileOffset fileOffset) override;
110
111 virtual int
112 getCXinfo(char cxtype[4], int &cxrsz) override;
113
114 virtual int
115 SendData(XrdSfsDio *sfDio,
116 XrdSfsFileOffset offset,
117 XrdSfsXferSize size) override;
118
119private:
121
122 virtual
123 ~File();
124
125 bool m_is_open{false};
126 unique_sfs_ptr m_sfs;
127 int m_uid; // A unique identifier for this user; has no meaning except for the fairshare.
128 std::string m_loadshed;
129 std::string m_connection_id; // Identity for the connection; may or may authenticated
130 std::string m_user;
131 XrdThrottleManager &m_throttle;
132 XrdSysError &m_eroute;
133};
134
135class FileSystem final : public XrdSfsFileSystem
136{
137
139
140public:
141
142 virtual XrdSfsDirectory *
143 newDir(char *user=0, int monid=0) override;
144
145 virtual XrdSfsFile *
146 newFile(char *user=0, int monid=0) override;
147
148 virtual int
149 chksum( csFunc Func,
150 const char *csName,
151 const char *path,
152 XrdOucErrInfo &eInfo,
153 const XrdSecEntity *client = 0,
154 const char *opaque = 0) override;
155
156 virtual int
157 chmod(const char *Name,
159 XrdOucErrInfo &out_error,
160 const XrdSecEntity *client,
161 const char *opaque = 0) override;
162
163 virtual void
164 Connect(const XrdSecEntity *client = 0) override;
165
166 virtual void
167 Disc(const XrdSecEntity *client = 0) override;
168
169 virtual void
170 EnvInfo(XrdOucEnv *envP) override;
171
172 virtual int
173 exists(const char *fileName,
174 XrdSfsFileExistence &exists_flag,
175 XrdOucErrInfo &out_error,
176 const XrdSecEntity *client,
177 const char *opaque = 0) override;
178
179 virtual int
180 FAttr( XrdSfsFACtl *faReq,
181 XrdOucErrInfo &eInfo,
182 const XrdSecEntity *client = 0) override;
183
184 virtual int
185 fsctl(const int cmd,
186 const char *args,
187 XrdOucErrInfo &out_error,
188 const XrdSecEntity *client) override;
189
190 virtual int
191 getChkPSize() override;
192
193 virtual int
194 getStats(char *buff, int blen) override;
195
196 virtual const char *
197 getVersion() override;
198
199 virtual int
200 gpFile( gpfFunc &gpAct,
201 XrdSfsGPFile &gpReq,
202 XrdOucErrInfo &eInfo,
203 const XrdSecEntity *client = 0) override;
204
205 virtual int
206 mkdir(const char *dirName,
208 XrdOucErrInfo &out_error,
209 const XrdSecEntity *client,
210 const char *opaque = 0) override;
211
212 virtual int
213 prepare( XrdSfsPrep &pargs,
214 XrdOucErrInfo &out_error,
215 const XrdSecEntity *client = 0) override;
216
217 virtual int
218 rem(const char *path,
219 XrdOucErrInfo &out_error,
220 const XrdSecEntity *client,
221 const char *info = 0) override;
222
223 virtual int
224 remdir(const char *dirName,
225 XrdOucErrInfo &out_error,
226 const XrdSecEntity *client,
227 const char *info = 0) override;
228
229 virtual int
230 rename(const char *oldFileName,
231 const char *newFileName,
232 XrdOucErrInfo &out_error,
233 const XrdSecEntity *client,
234 const char *infoO = 0,
235 const char *infoN = 0) override;
236
237 virtual int
238 stat(const char *Name,
239 struct stat *buf,
240 XrdOucErrInfo &out_error,
241 const XrdSecEntity *client,
242 const char *opaque = 0) override;
243
244 virtual int
245 stat(const char *Name,
246 mode_t &mode,
247 XrdOucErrInfo &out_error,
248 const XrdSecEntity *client,
249 const char *opaque = 0) override;
250
251 virtual int
252 truncate(const char *Name,
253 XrdSfsFileOffset fileOffset,
254 XrdOucErrInfo &out_error,
255 const XrdSecEntity *client = 0,
256 const char *opaque = 0) override;
257
258private:
259 static void
260 Initialize( FileSystem *&fs,
261 XrdSfsFileSystem *native_fs,
262 XrdSysLogger *lp,
263 const char *config_file,
264 XrdOucEnv *envP);
265
266 int
267 Configure(XrdSysError &, XrdSfsFileSystem *native_fs, XrdOucEnv *envP);
268
269 FileSystem();
270
271 virtual
272 ~FileSystem();
273
274 int
275 xthrottle(XrdOucStream &Config);
276
277 int
278 xloadshed(XrdOucStream &Config);
279
280 int
281 xtrace(XrdOucStream &Config);
282
283 int
284 xmaxopen(XrdOucStream &Config);
285
286 int
287 xmaxconn(XrdOucStream &Config);
288
289 static FileSystem *m_instance;
290 XrdSysError m_eroute;
291 XrdOucTrace m_trace;
292 std::string m_config_file;
293 XrdSfsFileSystem *m_sfs_ptr;
294 bool m_initialized;
295 XrdThrottleManager m_throttle;
296 XrdVersionInfo *myVersion;
297
298};
299
300}
301
302#endif
303
static void prepare()
#define write(a, b, c)
Definition XrdPosix.hh:115
#define mkdir(a, b)
Definition XrdPosix.hh:74
#define open
Definition XrdPosix.hh:76
#define stat(a, b)
Definition XrdPosix.hh:101
#define rename(a, b)
Definition XrdPosix.hh:92
#define truncate(a, b)
Definition XrdPosix.hh:111
#define read(a, b, c)
Definition XrdPosix.hh:82
int Mode
XrdOucString File
struct myOpts opts
int XrdSfsMode
XrdSfsFileExistence
int XrdSfsFileOpenMode
long long XrdSfsFileOffset
int XrdSfsXferSize
< Prepare parameters
virtual int fctl(const int cmd, const char *args, XrdOucErrInfo &eInfo)=0
virtual void Connect(const XrdSecEntity *client=0) override
friend XrdSfsFileSystem * XrdSfsGetFileSystem_Internal(XrdSfsFileSystem *, XrdSysLogger *, const char *, XrdOucEnv *)
virtual XrdSfsFile * newFile(char *user=0, int monid=0) override
virtual int gpFile(gpfFunc &gpAct, XrdSfsGPFile &gpReq, XrdOucErrInfo &eInfo, const XrdSecEntity *client=0) override
virtual int rem(const char *path, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *info=0) override
virtual int getStats(char *buff, int blen) override
virtual void EnvInfo(XrdOucEnv *envP) override
virtual int fsctl(const int cmd, const char *args, XrdOucErrInfo &out_error, const XrdSecEntity *client) override
virtual void Disc(const XrdSecEntity *client=0) override
virtual const char * getVersion() override
virtual int exists(const char *fileName, XrdSfsFileExistence &exists_flag, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0) override
virtual XrdSfsDirectory * newDir(char *user=0, int monid=0) override
virtual int chmod(const char *Name, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0) override
virtual int remdir(const char *dirName, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *info=0) override
virtual int getChkPSize() override
virtual int chksum(csFunc Func, const char *csName, const char *path, XrdOucErrInfo &eInfo, const XrdSecEntity *client=0, const char *opaque=0) override
virtual int FAttr(XrdSfsFACtl *faReq, XrdOucErrInfo &eInfo, const XrdSecEntity *client=0) override
virtual int getCXinfo(char cxtype[4], int &cxrsz) override
virtual const char * FName() override
virtual int sync() override
virtual int close() override
virtual XrdSfsXferSize pgWrite(XrdSfsFileOffset offset, char *buffer, XrdSfsXferSize rdlen, uint32_t *csvec, uint64_t opts=0) override
virtual XrdSfsXferSize pgRead(XrdSfsFileOffset offset, char *buffer, XrdSfsXferSize rdlen, uint32_t *csvec, uint64_t opts=0) override
virtual int SendData(XrdSfsDio *sfDio, XrdSfsFileOffset offset, XrdSfsXferSize size) override
virtual int checkpoint(cpAct act, struct iov *range=0, int n=0) override
virtual int getMmap(void **Addr, off_t &Size) override
virtual int fctl(const int cmd, const char *args, XrdOucErrInfo &out_error) override
std::auto_ptr< XrdSfsFile > unique_sfs_ptr