10 #define DO_LOADSHED if (m_throttle.CheckLoadShed(m_loadshed)) \
14 m_throttle.PerformLoadShed(m_loadshed, host, port); \
15 m_eroute.Emsg("File", "Performing load-shed for client", m_connection_id.c_str()); \
16 error.setErrInfo(port, host.c_str()); \
17 return SFS_REDIRECT; \
20 #define DO_THROTTLE(amount) \
22 m_throttle.Apply(amount, 1, m_uid); \
23 XrdThrottleTimer xtimer = m_throttle.StartIOTimer();
25 File::File(
const char *user,
30 #
if __cplusplus >= 201103L
31 m_sfs(std::move(sfs)),
36 m_connection_id(user ? user :
""),
57 if (client->
eaAPI && client->
eaAPI->
Get(
"token.subject", m_user)) {
58 if (client->
vorg) m_user = std::string(client->
vorg) +
":" + m_user;
59 }
else if (client->
eaAPI) {
61 if (client->
eaAPI->
Get(
"request.name", user) && !user.empty()) m_user = user;
63 if (m_user.empty()) {m_user = client->
name ? client->
name :
"nobody";}
66 std::string open_error_message;
67 if (!m_throttle.
OpenFile(m_user, open_error_message)) {
71 auto retval = m_sfs->open(fileName, openMode, createMode, client, opaque);
85 return m_sfs->close();
89 {
return m_sfs->checkpoint(act, range, n);}
99 error.
setErrInfo(ENOTSUP,
"Sendfile not supported by throttle plugin.");
102 else return m_sfs->fctl(cmd, args, out_error);
108 return m_sfs->FName();
126 return m_sfs->pgRead(offset, buffer, rdlen, csvec,
opts);
148 return m_sfs->pgWrite(offset, buffer, rdlen, csvec,
opts);
167 return m_sfs->read(fileOffset, amount);
176 return m_sfs->read(fileOffset, buffer, buffer_size);
195 return m_sfs->write(fileOffset, buffer, buffer_size);
211 return m_sfs->sync();
217 return m_sfs->sync(aiop);
223 return m_sfs->stat(buf);
229 return m_sfs->truncate(fileOffset);
235 return m_sfs->getCXinfo(cxtype, cxrsz);
244 return m_sfs->SendData(sfDio, offset, size);
int stat(const char *path, struct stat *buf)
long long XrdSfsFileOffset
#define DO_THROTTLE(amount)
int setErrInfo(int code, const char *emsg)
XrdSecAttr * Get(const void *sigkey)
char * vorg
Entity's virtual organization(s)
XrdSecEntityAttr * eaAPI
non-const API to attributes
char * name
Entity's name.
virtual void doneRead()=0
virtual void doneWrite()=0
void PrepLoadShed(const char *opaque, std::string &lsOpaque)
bool CloseFile(const std::string &entity)
bool OpenFile(const std::string &entity, std::string &open_error_message)
static int GetUid(const char *username)
virtual int truncate(XrdSfsFileOffset fileOffset)
virtual XrdSfsXferSize write(XrdSfsFileOffset fileOffset, const char *buffer, XrdSfsXferSize buffer_size)
virtual XrdSfsXferSize pgRead(XrdSfsFileOffset offset, char *buffer, XrdSfsXferSize rdlen, uint32_t *csvec, uint64_t opts=0)
virtual const char * FName()
virtual int open(const char *fileName, XrdSfsFileOpenMode openMode, mode_t createMode, const XrdSecEntity *client, const char *opaque=0)
virtual int stat(struct stat *buf)
virtual int SendData(XrdSfsDio *sfDio, XrdSfsFileOffset offset, XrdSfsXferSize size)
virtual int getCXinfo(char cxtype[4], int &cxrsz)
virtual int checkpoint(cpAct act, struct iov *range=0, int n=0)
virtual int getMmap(void **Addr, off_t &Size)
virtual int read(XrdSfsFileOffset fileOffset, XrdSfsXferSize amount)
virtual XrdSfsXferSize pgWrite(XrdSfsFileOffset offset, char *buffer, XrdSfsXferSize rdlen, uint32_t *csvec, uint64_t opts=0)
virtual int fctl(const int cmd, const char *args, XrdOucErrInfo &eInfo)=0
std::auto_ptr< XrdSfsFile > unique_sfs_ptr