XRootD
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"
8 #include "XrdSys/XrdSysError.hh"
10 
13 
14 class XrdSysLogger;
15 class XrdOucStream;
16 
17 
18 namespace XrdThrottle {
19 
20 #if __cplusplus >= 201103L
21 typedef std::unique_ptr<XrdSfsFile> unique_sfs_ptr;
22 #else
23 typedef std::auto_ptr<XrdSfsFile> unique_sfs_ptr;
24 #endif
25 
26 class FileSystem;
27 
28 class File final : public XrdSfsFile {
29 
30 friend class FileSystem;
31 
32 public:
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
60  pgRead(XrdSfsFileOffset offset,
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 
119 private:
120  File(const char *, unique_sfs_ptr, XrdThrottleManager &, XrdSysError &);
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 
135 class FileSystem final : public XrdSfsFileSystem
136 {
137 
139 
140 public:
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 
258 private:
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 
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
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 int mkdir(const char *dirName, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0) override
virtual int truncate(const char *Name, XrdSfsFileOffset fileOffset, XrdOucErrInfo &out_error, const XrdSecEntity *client=0, const char *opaque=0) 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 rename(const char *oldFileName, const char *newFileName, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *infoO=0, const char *infoN=0) override
virtual int chmod(const char *Name, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0) override
virtual int prepare(XrdSfsPrep &pargs, XrdOucErrInfo &out_error, const XrdSecEntity *client=0) override
friend XrdSfsFileSystem * XrdSfsGetFileSystem_Internal(XrdSfsFileSystem *, XrdSysLogger *, const char *, XrdOucEnv *)
virtual int remdir(const char *dirName, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *info=0) override
virtual int getChkPSize() override
virtual int stat(const char *Name, struct stat *buf, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0) 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 open(const char *fileName, XrdSfsFileOpenMode openMode, mode_t createMode, const XrdSecEntity *client, const char *opaque=0) 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 read(XrdSfsFileOffset fileOffset, XrdSfsXferSize amount) override
virtual int truncate(XrdSfsFileOffset fileOffset) override
virtual int getMmap(void **Addr, off_t &Size) override
virtual XrdSfsXferSize write(XrdSfsFileOffset fileOffset, const char *buffer, XrdSfsXferSize buffer_size) override
virtual int fctl(const int cmd, const char *args, XrdOucErrInfo &eInfo)=0
virtual int stat(struct stat *buf) override
XrdCmsConfig Config
XrdOucEnv * envP
Definition: XrdPss.cc:109
std::auto_ptr< XrdSfsFile > unique_sfs_ptr
Definition: XrdThrottle.hh:23