-
Notifications
You must be signed in to change notification settings - Fork 149
/
XrdThrottle.hh
254 lines (191 loc) · 6.06 KB
/
XrdThrottle.hh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
#ifndef __XRDTHROTTLE_H_
#define __XRDTHROTTLE_H_
#include <memory>
#include <string>
#include "XrdVersion.hh"
#include "XrdSys/XrdSysError.hh"
#include "XrdSfs/XrdSfsInterface.hh"
#include "XrdThrottle/XrdThrottleTrace.hh"
#include "XrdThrottle/XrdThrottleManager.hh"
class XrdSysLogger;
class XrdOucStream;
namespace XrdThrottle {
#if __cplusplus >= 201103L
typedef std::unique_ptr<XrdSfsFile> unique_sfs_ptr;
#else
typedef std::auto_ptr<XrdSfsFile> unique_sfs_ptr;
#endif
class FileSystem;
class File : public XrdSfsFile {
friend class FileSystem;
public:
virtual int
open(const char *fileName,
XrdSfsFileOpenMode openMode,
mode_t createMode,
const XrdSecEntity *client,
const char *opaque = 0);
virtual int
close();
using XrdSfsFile::fctl;
virtual int
fctl(const int cmd,
const char *args,
XrdOucErrInfo &out_error);
virtual const char *
FName();
virtual int
getMmap(void **Addr, off_t &Size);
virtual int
read(XrdSfsFileOffset fileOffset, // Preread only
XrdSfsXferSize amount);
virtual XrdSfsXferSize
read(XrdSfsFileOffset fileOffset,
char *buffer,
XrdSfsXferSize buffer_size);
virtual int
read(XrdSfsAio *aioparm);
virtual XrdSfsXferSize
write(XrdSfsFileOffset fileOffset,
const char *buffer,
XrdSfsXferSize buffer_size);
virtual int
write(XrdSfsAio *aioparm);
virtual int
sync();
virtual int
sync(XrdSfsAio *aiop);
virtual int
stat(struct stat *buf);
virtual int
truncate(XrdSfsFileOffset fileOffset);
virtual int
getCXinfo(char cxtype[4], int &cxrsz);
virtual int
SendData(XrdSfsDio *sfDio,
XrdSfsFileOffset offset,
XrdSfsXferSize size);
private:
File(const char *user, int monid, unique_sfs_ptr, XrdThrottleManager &throttle, XrdSysError &eroute);
virtual
~File();
unique_sfs_ptr m_sfs;
int m_uid; // A unique identifier for this user; has no meaning except for the fairshare.
std::string m_loadshed;
std::string m_user;
XrdThrottleManager &m_throttle;
XrdSysError &m_eroute;
};
class FileSystem : public XrdSfsFileSystem
{
friend XrdSfsFileSystem * XrdSfsGetFileSystem_Internal(XrdSfsFileSystem *, XrdSysLogger *, const char *);
public:
virtual XrdSfsDirectory *
newDir(char *user=0, int monid=0);
virtual XrdSfsFile *
newFile(char *user=0, int monid=0);
virtual int
chksum( csFunc Func,
const char *csName,
const char *path,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client = 0,
const char *opaque = 0);
virtual int
chmod(const char *Name,
XrdSfsMode Mode,
XrdOucErrInfo &out_error,
const XrdSecEntity *client,
const char *opaque = 0);
virtual void
Disc(const XrdSecEntity *client = 0);
virtual void
EnvInfo(XrdOucEnv *envP);
virtual int
exists(const char *fileName,
XrdSfsFileExistence &exists_flag,
XrdOucErrInfo &out_error,
const XrdSecEntity *client,
const char *opaque = 0);
virtual int
fsctl(const int cmd,
const char *args,
XrdOucErrInfo &out_error,
const XrdSecEntity *client);
virtual int
getStats(char *buff, int blen);
virtual const char *
getVersion();
virtual int
mkdir(const char *dirName,
XrdSfsMode Mode,
XrdOucErrInfo &out_error,
const XrdSecEntity *client,
const char *opaque = 0);
virtual int
prepare( XrdSfsPrep &pargs,
XrdOucErrInfo &out_error,
const XrdSecEntity *client = 0);
virtual int
rem(const char *path,
XrdOucErrInfo &out_error,
const XrdSecEntity *client,
const char *info = 0);
virtual int
remdir(const char *dirName,
XrdOucErrInfo &out_error,
const XrdSecEntity *client,
const char *info = 0);
virtual int
rename(const char *oldFileName,
const char *newFileName,
XrdOucErrInfo &out_error,
const XrdSecEntity *client,
const char *infoO = 0,
const char *infoN = 0);
virtual int
stat(const char *Name,
struct stat *buf,
XrdOucErrInfo &out_error,
const XrdSecEntity *client,
const char *opaque = 0);
virtual int
stat(const char *Name,
mode_t &mode,
XrdOucErrInfo &out_error,
const XrdSecEntity *client,
const char *opaque = 0);
virtual int
truncate(const char *Name,
XrdSfsFileOffset fileOffset,
XrdOucErrInfo &out_error,
const XrdSecEntity *client = 0,
const char *opaque = 0);
virtual int
Configure(XrdSysError &, XrdSfsFileSystem *native_fs);
private:
static void
Initialize( FileSystem *&fs,
XrdSfsFileSystem *native_fs,
XrdSysLogger *lp,
const char *config_file);
FileSystem();
virtual
~FileSystem();
int
xthrottle(XrdOucStream &Config);
int
xloadshed(XrdOucStream &Config);
int
xtrace(XrdOucStream &Config);
static FileSystem *m_instance;
XrdSysError m_eroute;
XrdOucTrace m_trace;
std::string m_config_file;
XrdSfsFileSystem *m_sfs_ptr;
bool m_initialized;
XrdThrottleManager m_throttle;
XrdVersionInfo *myVersion;
};
}
#endif