#include <XrdFrcReqFile.hh>
Definition at line 36 of file XrdFrcReqFile.hh.
◆ XrdFrcReqFile()
XrdFrcReqFile::XrdFrcReqFile |
( |
const char * |
fn, |
|
|
int |
aVal |
|
) |
| |
Definition at line 60 of file XrdFrcReqFile.cc.
64 memset((
void *)&HdrData, 0,
sizeof(HdrData));
66 strcpy(buff, fn); strcat(buff,
".lock");
◆ ~XrdFrcReqFile()
XrdFrcReqFile::~XrdFrcReqFile |
( |
| ) |
|
|
inline |
◆ Add()
Definition at line 76 of file XrdFrcReqFile.cc.
78 rqMonitor rqMon(isAgent);
84 if (!FileLock()) {FailAdd(rP->
LFN, 0);
return;}
88 if ((fP = HdrData.Free))
89 {
if (!reqRead((
void *)&tmpReq, fP)) {FailAdd(rP->
LFN, 1);
return;}
90 HdrData.Free = tmpReq.Next;
93 if (
fstat(reqFD, &buf))
94 {
Say.
Emsg(
"Add",errno,
"stat",reqFN); FailAdd(rP->
LFN, 1);
return;}
101 {
if (!(rP->
Next = HdrData.First)) HdrData.Last = fP;
104 if (HdrData.First && HdrData.Last)
105 {
if (!reqRead((
void *)&tmpReq, HdrData.Last))
106 {FailAdd(rP->
LFN, 1);
return;}
108 if (!reqWrite((
void *)&tmpReq, HdrData.Last, 0))
109 {FailAdd(rP->
LFN, 1);
return;}
110 }
else HdrData.First = fP;
111 HdrData.Last = fP; rP->
Next = 0;
117 if (!reqWrite(rP, fP)) FailAdd(rP->
LFN, 0);
int stat(const char *path, struct stat *buf)
int fstat(int fildes, struct stat *buf)
static const int Register
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
References XrdSysError::Emsg(), fstat(), XrdFrcRequest::LFN, XrdFrcRequest::Next, XrdFrcRequest::Options, XrdFrcRequest::Register, XrdFrc::Say, stat(), and XrdFrcRequest::This.
Referenced by XrdFrcReqAgent::Start().
◆ Can()
Definition at line 125 of file XrdFrcReqFile.cc.
127 rqMonitor rqMon(isAgent);
129 int Offs, numCan = 0, numBad = 0;
135 if (!FileLock() ||
fstat(reqFD, &buf)) {FailCan(rP->
ID, 0);
return;}
139 for (Offs = ReqSize; Offs < buf.st_size; Offs += ReqSize)
140 {
if (!reqRead((
void *)&tmpReq, Offs))
return FailCan(rP->
ID);
141 if (!strcmp(tmpReq.ID, rP->
ID))
142 {tmpReq.LFN[0] =
'\0';
143 if (!reqWrite((
void *)&tmpReq, Offs, 0)) numBad++;
150 if (numCan)
fsync(reqFD);
154 if (numCan || numBad)
155 {sprintf(txt,
"has %d entries; %d removed (%d failures).",
156 numCan+numBad, numCan, numBad);
References XrdSysError::Emsg(), fstat(), fsync(), XrdFrcRequest::ID, XrdFrc::Say, and stat().
◆ Del()
◆ Get()
Definition at line 188 of file XrdFrcReqFile.cc.
194 if (!FileLock())
return 0;
198 while((fP = HdrData.First))
199 {
if (!reqRead((
void *)rP, fP)) {FileLock(lkNone);
return 0;}
200 HdrData.First= rP->Next;
201 if (*(rP->LFN)) {reqWrite(0,0,1);
break;}
202 rP->Next = HdrData.Free;
204 if (!reqWrite(rP, fP)) {fP = 0;
break;}
206 if (fP) rc = (HdrData.First ? 1 : -1);
◆ Init()
int XrdFrcReqFile::Init |
( |
| ) |
|
Definition at line 216 of file XrdFrcReqFile.cc.
219 static const int Mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH;
222 recEnt *RegList = 0, *First = 0, *rP, *pP, *tP;
223 int Offs, rc, numreq = 0;
227 if ((lokFD = XrdSysFD_Open(lokFN, O_RDWR|O_CREAT,
Mode)) < 0)
228 {
Say.
Emsg(
"Init",errno,
"open",lokFN);
return 0;}
232 if (!FileLock(lkInit))
return 0;
236 if ((reqFD = XrdSysFD_Open(reqFN, O_RDWR|O_CREAT,
Mode)) < 0)
238 Say.
Emsg(
"Init",errno,
"open",reqFN);
244 if (
fstat(reqFD, &buf))
return FailIni(
"stat");
245 if (buf.st_size < ReqSize)
246 {memset(&tmpReq, 0,
sizeof(tmpReq));
247 HdrData.Free = ReqSize;
248 if (!reqWrite((
void *)&tmpReq, ReqSize))
return FailIni(
"init file");
262 for (Offs = ReqSize; Offs < buf.st_size; Offs += ReqSize)
263 {
if (!reqRead((
void *)&tmpReq, Offs))
return FailIni(
"read file");
264 if (*tmpReq.LFN ==
'\0' || !tmpReq.addTOD
265 || tmpReq.Opaque >=
int(
sizeof(tmpReq.LFN)))
continue;
266 pP = 0; rP = First; tP =
new recEnt(tmpReq); numreq++;
268 {tP->Next = RegList; RegList = tP;
270 while(rP && rP->reqData.addTOD < tmpReq.addTOD) {pP=rP;rP=rP->Next;}
271 if (pP) pP->Next = tP;
279 while((rP = RegList))
287 DEBUG(numreq <<
" request(s) recovered from " <<reqFN);
294 CID.
Ref(tP->reqData.iName);
void Ref(const char *iName)
References XrdFrc::CID, DEBUG, XrdSysError::Emsg(), EPNAME, fstat(), Mode, XrdFrcCID::Ref(), XrdFrcRequest::Register, XrdFrc::Say, and stat().
◆ List()
char * XrdFrcReqFile::List |
( |
char * |
Buff, |
|
|
int |
bsz, |
|
|
int & |
Offs, |
|
|
XrdFrcRequest::Item * |
ITList = 0 , |
|
|
int |
ITNum = 0 |
|
) |
| |
Definition at line 308 of file XrdFrcReqFile.cc.
311 rqMonitor rqMon(isAgent);
317 if (Offs < ReqSize) Offs = ReqSize;
321 if (!FileLock(lkShare))
return 0;
325 do{
do {rc =
pread(reqFD, (
void *)&tmpReq, ReqSize, Offs);}
326 while(rc < 0 && errno == EINTR);
329 if (*tmpReq.
LFN ==
'\0' || !tmpReq.
addTOD
330 || tmpReq.
Opaque >=
int(
sizeof(tmpReq.
LFN))
333 if (!ITNum || !ITList)
strlcpy(Buff, tmpReq.
LFN, bsz);
334 else ListL(tmpReq, Buff, bsz, ITList, ITNum);
337 }
while(rc == ReqSize);
341 if (rc < 0)
Say.
Emsg(
"List",errno,
"read",reqFN);
ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset)
void ListL(XrdFrcRequest &tmpReq, char *Buff, int bsz, XrdFrcRequest::Item *ITList, int ITNum)
References XrdFrcRequest::addTOD, XrdSysError::Emsg(), XrdFrcRequest::LFN, XrdFrcRequest::Opaque, XrdFrcRequest::Options, pread(), XrdFrcRequest::Register, XrdFrc::Say, and strlcpy().
Referenced by XrdFrcReqAgent::NextLFN().
◆ ListL()
Definition at line 353 of file XrdFrcReqFile.cc.
358 int i, k, n, bln = bsz-2, Lfo;
360 for (i = 0; i < ITNum && bln > 0; i++)
365 n = strlen(tmpReq.
LFN);
370 n = strlen(tmpReq.
LFN+Lfo);
376 n = strlen(tmpReq.
LFN); tmpReq.
LFN[n] =
'?';
377 if (!tmpReq.
Opaque) tmpReq.
LFN[n+1] =
'\0';
379 k = strlen(tmpReq.
LFN);
380 tmpReq.
LFN[n] =
'\0'; n = k;
384 n = strlen(tmpReq.
LFN); tmpReq.
LFN[n] =
'?';
385 if (!tmpReq.
Opaque) tmpReq.
LFN[n+1] =
'\0';
387 k = strlen(tmpReq.
LFN+Lfo);
388 tmpReq.
LFN[n] =
'\0'; n = k;
395 if (bln) {Buff[n] = What; n++;}
397 if (bln-n > 0) {Buff[n] =
'f'; n++;}
399 if (bln-n > 0) {Buff[n] =
'n'; n++;}
403 n = strlen(tmpReq.
Notify);
413 if (tmpReq.
Prty == 2) What =
'2';
414 else if (tmpReq.
Prty == 1) What =
'1';
417 if (bln) *Buff = What;
424 if ((n = sprintf(tbuf,
"%lld", tval)) >= 0)
429 n = strlen(tmpReq.
ID);
434 n = strlen(tmpReq.
User);
438 default: n = 0;
break;
440 if (bln > 0) {bln -= n; Buff += n;}
441 if (bln > 0) {*Buff++ =
' '; bln--;}
References XrdFrcRequest::addTOD, XrdFrcRequest::getLFN, XrdFrcRequest::getLFNCGI, XrdFrcRequest::getMODE, XrdFrcRequest::getNOTE, XrdFrcRequest::getOBJ, XrdFrcRequest::getOBJCGI, XrdFrcRequest::getOP, XrdFrcRequest::getPRTY, XrdFrcRequest::getQWT, XrdFrcRequest::getRID, XrdFrcRequest::getTOD, XrdFrcRequest::getUSER, XrdFrcRequest::ID, XrdFrcRequest::LFN, XrdFrcRequest::LFO, XrdFrcRequest::makeRW, XrdFrcRequest::msgFail, XrdFrcRequest::msgSucc, XrdFrcRequest::Notify, XrdFrcRequest::Opaque, XrdFrcRequest::OPc, XrdFrcRequest::Options, XrdFrcRequest::Prty, strlcpy(), and XrdFrcRequest::User.
The documentation for this class was generated from the following files: