121bool VerPgw(
const char *buf, ssize_t off,
size_t len,
const uint32_t* csv,
134 n = snprintf(
eMsg,
sizeof(
eMsg),
"Checksum error at offset %lld.", (
long long) badoff);
184 myRole = strdup(
"server");
192 myPort = (bp = getenv(
"XRDPORT")) ? strtol(bp, (
char **)NULL, 10) : 0;
269 XrdOfsFS->Emsg(epname,
error, EADDRINUSE,
"open directory", dir_path);
278 && (retc =
XrdOfsFS->Finder->Locate(
error, dir_path, od_mode, &Open_Env)))
284 else if (!(retc =
dp->Opendir(dir_path, Open_Env)))
285 {
fname = strdup(dir_path);
288 else {
delete dp;
dp = 0;}
292 return XrdOfsFS->Emsg(epname,
error, retc,
"open directory", dir_path);
352 return (
const char *)(
dname);
385 if ((retc =
dp->Close()))
429 if ((retc =
dp->StatRet(buf)))
return retc;
492 int OK() {hP = 0; fP = 0; poscNum = 0;
return SFS_OK;}
494 OpenHelper(
const char *path)
495 :
Path(path), hP(0), fP(0), poscNum(0) {}
501 if (poscNum > 0)
XrdOfsFS->poscQ->Del(
Path, poscNum, 1);
507 int retc, isPosc = 0, crOpts = 0, isRW = 0, open_flag = 0;
519 if (
oh != XrdOfs::dummyHandle)
521 return XrdOfsFS->Emsg(epname,
error,EADDRINUSE,
"open file",path);
527 if (open_mode & crMask)
530 XrdOfsFS->poscAuto || Open_Env.Get(
"ofs.posc")))
534 {open_flag = O_RDWR | O_CREAT | O_EXCL;
538 open_flag |= O_RDWR | O_CREAT | O_TRUNC;
543 switch(open_mode & opMask)
549 Open_Env.Get(
"ofs.posc"))) oP.poscNum = -1;
554 Open_Env.Get(
"ofs.posc"))) oP.poscNum = -1;
556 default: open_flag = O_RDONLY; find_flag |=
SFS_O_RDONLY;
568 int k = ((dOn && *dOn ==
'1') || strcmp(tpcKey,
"delegate") ? 1 : 0);
579 find_flag, &Open_Env)))
585 return XrdOfsFS->Emsg(epname,
error, EPROTOTYPE,
"tpc", path);
589 if (open_flag & O_CREAT)
593 bool overwrite_permitted =
true;
594 if (!(open_flag & O_EXCL))
595 {
if (client &&
XrdOfsFS->Authorization &&
600 overwrite_permitted =
false;
602 open_flag &= ~O_TRUNC;
606 else if (client &&
XrdOfsFS->Authorization &&
611 overwrite_permitted =
false;
621 return XrdOfsFS->Emsg(epname,
error, oP.poscNum,
"pcreate", path);
628 ((open_flag << 8) | crOpts))))
630 if (retc == -EINPROGRESS)
634 if (retc != -ENOTSUP)
637 if ((open_flag & O_EXCL) && retc == -EEXIST && !overwrite_permitted)
644 open_flag = O_RDWR|O_TRUNC;
660 "open", path,
error);
677 {
char pfnbuff[MAXPATHLEN+8];
const char *pfnP;
678 if (!(pfnP =
XrdOfsOss->Lfn2Pfn(path, pfnbuff, MAXPATHLEN, retc)))
689 if ((retc = oP.hP->PoscSet(
tident, oP.poscNum, theMode)))
690 {
if (retc > 0)
XrdOfsFS->poscQ->Del(path, retc);
691 else return XrdOfsFS->Emsg(epname,
error, retc,
"access", path);
699 if (!(oP.hP->Inactive()))
705 if (oP.poscNum > 0)
XrdOfsFS->poscQ->Commit(path, oP.poscNum);
709 if (oP.poscNum > 0)
OfsStats.Data.numOpenP++;
723 {
if (
myTPC) open_flag |= O_NOFOLLOW;
730 if ((retc = oP.fP->Open(path, open_flag, theMode, Open_Env)))
732 if (retc == -EINPROGRESS)
736 if (retc == -ETXTBSY)
return XrdOfsFS->Stall(
error, -1, path);
737 if (retc == -EDESTADDRREQ)
738 {
char *url = Open_Env.Get(
"FileURL");
741 if (
XrdOfsFS->Balancer && retc == -ENOENT)
749 {
if ((retc = oP.fP->Fchmod(
static_cast<mode_t
>(theMode|
XRDSFS_POSCPEND))))
751 XrdOfsFS->poscQ->Commit(path, oP.poscNum);
756 if (oP.fP->isCompressed() > 0)
757 {oP.hP->isCompressed = 1;
760 oP.hP->Activate(oP.fP);
765#if defined(__linux__) || (defined(__FreeBSD_kernel__) && defined(__GLIBC__))
768 int theFD = oP.fP->getFD();
769 if (theFD >= 0 && fadFails < 4096)
770 if (posix_fadvise(theFD, 0, 0, POSIX_FADV_SEQUENTIAL) < 0)
771 {
OfsEroute.Emsg(epname, errno,
"fadsize for sequential I/O.");
781 if (
XrdOfsFS->evsObject->Enabled(theEvent))
783 XrdOfsFS->evsObject->Notify(theEvent, evInfo);
791 if (oP.poscNum > 0)
OfsStats.Data.numOpenP++;
820 int poscNum, retc, cRetc = 0;
830 if (
oh == XrdOfs::dummyHandle)
832 if ((
oh->Inactive()))
836 hP =
oh;
oh = XrdOfs::dummyHandle;
876 {retc =
myCKP->Restore();
891 {
long long FSize, *retsz;
892 char pathbuff[MAXPATHLEN+8];
896 if (!(hP->
Retire(cRetc, retsz, pathbuff,
sizeof(pathbuff))))
898 XrdOfsFS->evsObject->Notify(theEvent, evInfo);
921 "handle checkpoint", (
const char *)0);
926 "handle disabled checkpoint", (
const char *)0);
931 return XrdOfsFS->Emsg(epname,
error, EIDRM,
"extend checkpoint "
932 "(only delete or restore possible) for",
oh->Name());
938 ckpName =
"create checkpoint for";
939 if ((rc = CreateCKP()))
return rc;
943 ckpName =
"delete checkpoint for";
944 if (!
myCKP) rc = ENOENT;
945 else {rc =
myCKP->Delete();
952 ckpName =
"query checkpoint for";
953 if (!range || n <= 0)
955 "query checkpoint limits for",
oh->Name());
959 ckpName =
"restore checkpoint for";
960 if (!
myCKP) rc = ENOENT;
961 else {
if (!(rc =
myCKP->Restore(&readok)))
967 oh->Suppress((readok ? 0 : -EDOM));
973 ckpName =
"checkpoint truncate";
974 if (!range) rc = EINVAL;
975 else if (!
myCKP) rc = ENOENT;
976 else if ((rc =
myCKP->Truncate(range)))
ckpBad =
true;
979 ckpName =
"checkpoint write";
980 if (!range || n <= 0) rc = EINVAL;
981 else if (!
myCKP) rc = ENOENT;
982 else if ((rc =
myCKP->Write(range, n)))
ckpBad =
true;
986 "decode checkpoint request for",
oh->Name());
1003int XrdOfsFile::CreateCKP()
1009 "create checkpoint for",
oh->
Name());
1014 "create checkpoint for R/O",
oh->
Name());
1020 "create checkpoint for POSC file",
oh->
Name());
1028 "create proxy checkpoint");
1030 }
else myCKP =
new XrdOfsChkPnt(
oh->Select(),
oh->Name());
1054 out_error.
setErrInfo(ENOTSUP,
"fctl operation not supported");
1066 static const char *fctlArg =
"ofs.tpc cancel";
1067 static const int fctlAsz = 15;
1071 if (cmd !=
SFS_FCTL_SPEC1 || !args || alen < fctlAsz || strcmp(fctlArg,args))
1072 return XrdOfsFS->FSctl(*
this, cmd, alen, args, client);
1077 {
error.setErrInfo(ESRCH,
"tpc operation not found");
1118#if _FILE_OFFSET_BITS!=64
1119 if (offset > 0x000000007fffffff)
1131 (off_t)offset, (
size_t)rdlen, csvec, pgOpts));
1133 return XrdOfsFS->Emsg(epname,
error, (
int)nbytes,
"pgRead",
oh->Name());
1164#if _FILE_OFFSET_BITS!=64
1165 if (aiop->sfsAio.aio_offset > 0x000000007fffffff)
1176 if ((rc =
oh->Select().pgRead(aioparm, pgOpts)) < 0)
1212#if _FILE_OFFSET_BITS!=64
1213 if (offset > 0x000000007fffffff)
1231 (off_t)offset, (
size_t)wrlen, csvec, pgOpts));
1277#if _FILE_OFFSET_BITS!=64
1278 if (aiop->sfsAio.aio_offset > 0x000000007fffffff)
1295 if ((rc =
oh->Select().pgWrite(aioparm, pgOpts)) < 0)
1323 FTRACE(
read,
"preread " <<blen <<
"@" <<offset);
1327#if _FILE_OFFSET_BITS!=64
1328 if (offset > 0x000000007fffffff)
1334 if ((retc =
oh->Select().Read((off_t)offset, (
size_t)blen)) < 0)
1335 return XrdOfsFS->Emsg(epname,
error, (
int)retc,
"preread",
oh->Name());
1370#if _FILE_OFFSET_BITS!=64
1371 if (offset > 0x000000007fffffff)
1379 (off_t)offset, (
size_t)blen))
1381 (off_t)offset, (
size_t)blen)));
1383 return XrdOfsFS->Emsg(epname,
error, (
int)nbytes,
"read",
oh->Name());
1413 return XrdOfsFS->Emsg(epname,
error, (
int)nbytes,
"readv",
oh->Name());
1439 if (
oh->isCompressed)
1453#if _FILE_OFFSET_BITS!=64
1460 if ((rc =
oh->Select().Read(aiop)) < 0)
1499#if _FILE_OFFSET_BITS!=64
1500 if (offset > 0x000000007fffffff)
1513 (off_t)offset, (
size_t)blen));
1550#if _FILE_OFFSET_BITS!=64
1563 if ((rc =
oh->Select().Write(aiop)) < 0)
1587 Size =
oh->Select().getMmap(Addr);
1614 if ((retc =
oh->Select().Fstat(buf)) < 0)
1647 if (!(
oh->isPending))
return SFS_OK;
1658 if ((retc =
oh->Select().Fsync()))
1709 if (
sizeof(off_t) <
sizeof(flen) && flen > 0x000000007fffffff)
1720 if ((retc =
oh->Select().Ftruncate(flen)))
1747 cxrsz =
oh->Select().isCompressed(cxtype);
1758void XrdOfsFile::GenFWEvent()
1808 char buff[MAXPATHLEN+8];
1814 {einfo.
setErrInfo(ENOTSUP,
"Checksums are not supported.");
1821 rc = cksData.
Set(csName);
1823 {
if (rc && (rc = Cks->Size(csName)))
1825 strcpy(buff, csName); strcat(buff,
" checksum not supported.");
1833 {strcpy(buff, csName);
1834 strcat(buff,
" checksum path not specified.");
1853 return Emsg(epname, einfo, rc,
"checksum",
Path);
1860 {
if (client) cksData.envP = &cksEnv;
1861 else cksData.envP = (einfo.
getEnv() ? einfo.
getEnv() : &cksEnv);
1868 else {einfo.
setErrInfo(EINVAL,
"Invalid checksum function.");
1875 if (rc >= 0 || rc == -
ENOATTR || rc == -ESTALE || rc == -ESRCH)
1877 if (rc >= 0 || rc == -
ENODATA || rc == -ESTALE || rc == -ESRCH)
1879 {
if (rc >= 0) {cksData.
Get(buff, MAXPATHLEN); rc = 0;}
1880 else {*buff = 0; rc = -rc;}
1887 return Emsg(epname, einfo, rc,
"checksum",
Path);
1928 sprintf(buff,
"%o",
static_cast<int>(acc_mode));
1929 if (Forward(retc,einfo,
fwdCHMOD,path,buff,&chmod_Env))
return retc;
1931 else if ((retc =
Finder->Locate(einfo, path, locFlags, &chmod_Env)))
1938 return XrdOfsFS->Emsg(epname, einfo, retc,
"change", path);
1939 if (S_ISDIR(
Stat.st_mode)) acc_mode = (acc_mode |
dMask[0]) &
dMask[1];
1940 else acc_mode = (acc_mode |
fMask[0]) &
fMask[1];
1951 if (!(retc =
XrdOfsOss->Chmod(path, acc_mode, &chmod_Env)))
return SFS_OK;
1955 return XrdOfsFS->Emsg(epname, einfo, retc,
"change", path);
2037 if (retc == -ENOENT)
2044 return XrdOfsFS->Emsg(epname, einfo, retc,
"locate", path);
2062 buff += n; blen -= n;
2110 sprintf(buff,
"%o",
static_cast<int>(acc_mode));
2112 path, buff, &mkdir_Env))
return retc;
2114 else if ((retc =
Finder->Locate(einfo,path,LocOpts,&mkdir_Env)))
2120 if ((retc =
XrdOfsOss->Mkdir(path, acc_mode, mkpath, &mkdir_Env)))
2121 return XrdOfsFS->Emsg(epname, einfo, retc,
"mkdir", path);
2133 {
if (!mkpath) Balancer->Added(path);
2134 else {
char *slash, *myPath = strdup(path);
2135 do {Balancer->Added(myPath);
2136 if ((slash = rindex(myPath,
'/'))) *slash = 0;
2137 }
while(slash && slash != myPath);
2171 return prepHandler->query(pargs, out_error, client);
2173 return prepHandler->cancel(pargs, out_error, client);
2175 return prepHandler->begin(pargs, out_error, client);
2182 && (retc =
XrdOfsFS->Finder->Prepare(out_error, pargs, &prep_Env)))
2183 return fsError(out_error, retc);
2191int XrdOfs::remove(
const char type,
2213 XTRACE(remove, path, type);
2224 {
if (Forward(retc, einfo, *fSpec, path, 0, &rem_Env))
return retc;}
2225 else if ((retc =
Finder->Locate(einfo, path, LocOpts, &rem_Env)))
2233 if (evsObject->Enabled(theEvent))
2234 {XrdOfsEvsInfo evInfo(
tident, path, info, &rem_Env);
2235 evsObject->Notify(theEvent, evInfo);
2247 if (retc)
return XrdOfsFS->
Emsg(epname, einfo, retc,
"remove", path);
2249 if (Balancer) Balancer->Removed(path);
2258 const char *new_name,
2282 XTRACE(
rename, new_name,
"old fn=" <<old_name <<
" new ");
2294 if (client) client->
eaAPI->
Add(
"request.name",
"",
true);
2298 bool cannot_overwrite =
false;
2299 if (client &&
XrdOfsFS->Authorization &&
2301 {cannot_overwrite =
true;
2309 {
if (Forward(retc,einfo,
fwdMV,old_name,new_name,&old_Env,&new_Env))
2312 else if ((retc =
Finder->Locate(einfo, old_name, LocOpts, &old_Env)))
2320 new_name, infoN, &new_Env);
2330 if (cannot_overwrite)
2332 if (
SFS_OK !=
exists(new_name, exists_flag, einfo, client, infoN))
2340 einfo.
setErrInfo(EPERM,
"Overwrite of existing data not permitted");
2341 return fsError(einfo, -EPERM);
2347 if ((retc =
XrdOfsOss->Rename(old_name, new_name, &old_Env, &new_Env)))
2348 {
return XrdOfsFS->Emsg(epname, einfo, retc,
"rename", old_name);
2351 if (Balancer) {Balancer->Removed(old_name);
2352 Balancer->Added(new_name);
2396 if ((retc =
XrdOfsOss->Stat(path, buf, 0, &stat_Env)))
2397 return XrdOfsFS->Emsg(epname, einfo, retc,
"locate", path);
2445 else if ((-ENOMSG) != retc)
2446 return XrdOfsFS->Emsg(epname, einfo, retc,
"locate", path);
2486 sprintf(xSz,
"%lld",
static_cast<long long>(Size));
2487 if (Forward(retc,einfo,
fwdTRUNC,path,xSz,&trunc_Env))
return retc;
2502 if (!(retc =
XrdOfsOss->Truncate(path, Size, &trunc_Env)))
return SFS_OK;
2506 return XrdOfsFS->Emsg(epname, einfo, retc,
"trunc", path);
2547 char buffer[MAXPATHLEN+80];
2556if (strcmp(
"read", op) && strcmp(
"readv", op) && strcmp(
"pgRead", op) &&
2557 strcmp(
"write",op) && strcmp(
"pgwrite",op)) {
2558 if (ecode < 0) ecode = -ecode;
2559 if (ecode == EBUSY)
return 5;
2563 if (ecode == ETIMEDOUT)
return OSSDelay;
2590const char *XrdOfs::Fname(
const char *path)
2592 int i = strlen(path)-1;
2593 while(i)
if (path[i] ==
'/')
return &path[i+1];
2602int XrdOfs::Forward(
int &Result,
XrdOucErrInfo &Resp,
struct fwdOpt &Fwd,
2603 const char *arg1,
const char *arg2,
2608 if ((retc =
Finder->Forward(Resp, Fwd.Cmd, arg1, arg2, Env1, Env2)))
2609 {Result =
fsError(Resp, retc);
2615 return (Fwd.Port ? 0 : 1);
2635 if (rc > 0) {
OfsStats.Data.numDelays++;
return rc; }
2646 static const char *fmt =
"oss.cgroup=all&oss.space=%llu&oss.free=%llu"
2647 "&oss.maxf=%llu&oss.used=%llu&oss.quota=-1";
2649 unsigned long long totSpace, totFree, maxFree;
2658 n = sscanf(bP,
"%c %llu %llu %llu", &qsFmt, &totSpace, &totFree, &maxFree);
2662 if (n != 4 || qsFmt !=
'A')
2663 {myError.
setErrInfo(ENOTSUP,
"space fctl operation not supported by cmsd");
2669 totSpace = totSpace << 20LL;
2670 totFree = totFree << 20LL;
2671 maxFree = maxFree << 20LL;
2675 blen = snprintf(bP,blen,fmt,totSpace,totFree,maxFree,(totSpace-totFree));
2686 char *
Path,
int Plen)
2689 *Opq = index(Args,
'?');
2690 if (!(*Opq))
return Args;
2692 if (xlen >= Plen) xlen = Plen-1;
2693 strncpy(
Path, Args, xlen);
2706 const char *msgfmt =
"File %s is being %s; "
2707 "estimated time to completion %s";
2712 char Mbuff[2048], Tbuff[32];
2713 const char *What =
"staged";
2717 if (stime < 0) {stime = 60; What =
"created";}
2721 snprintf(Mbuff,
sizeof(Mbuff)-1, msgfmt,
2722 Fname(path), What,
WaitTime(stime, Tbuff,
sizeof(Tbuff)));
2723 ZTRACE(delay,
"Stall " <<stime <<
": " <<Mbuff <<
" for " <<path);
2772 if ((poscNum = oh->
PoscGet(theMode))) poscQ->Del(oh->
Name(), poscNum, 1);
2795 snprintf(buff,blen,
"%d second%s",sec,(sec > 1 ?
"s" :
""));
2797 {
if (sec > 10) min++;
2798 snprintf(buff,blen,
"%d minute%s",min,(min > 1 ?
"s" :
""));
2802 snprintf(buff,blen,
"%d minutes",min+60);
2803 else snprintf(buff,blen,
"%d hour and %d minutes",hr,min);
2804 else {
if (min > 30) hr++;
2805 snprintf(buff,blen,
"%d hours",hr);
2811 buff[blen-1] =
'\0';
@ AOP_Delete
rm() or rmdir()
@ AOP_Update
open() r/w or append
@ AOP_Create
open() with create
@ AOP_Stat
exists(), stat()
@ AOP_Rename
mv() for source
@ AOP_Read
open() r/o, prepare()
@ AOP_Excl_Create
open() with O_EXCL|O_CREAT
@ AOP_Insert
mv() for target
@ AOP_Excl_Insert
mv() where destination doesn't exist.
#define XTRACE(act, target, x)
#define OOIDENTENV(usr, env)
#define AUTHORIZE(usr, env, optype, action, pathp, edata)
XrdSysTrace OfsTrace("ofs")
XrdOucTList * paths
List of paths.
@ XrdSfsFileExistIsDirectory
long long XrdSfsFileOffset
XrdSys::RAtomic< int > RAtomic_int
int Set(const char *csName)
int Get(char *Buff, int Blen)
int autoStat(struct stat *buf)
int open(const char *dirName, const XrdSecEntity *client, const char *opaque=0)
XrdOfsFile(XrdOucErrInfo &eInfo, const char *user)
int getCXinfo(char cxtype[4], int &cxrsz)
int checkpoint(XrdSfsFile::cpAct act, struct iov *range=0, int n=0)
XrdSfsXferSize pgWrite(XrdSfsFileOffset offset, char *buffer, XrdSfsXferSize wrlen, uint32_t *csvec, uint64_t opts=0)
XrdSfsXferSize write(XrdSfsFileOffset fileOffset, const char *buffer, XrdSfsXferSize buffer_size)
int truncate(XrdSfsFileOffset fileOffset)
int read(XrdSfsFileOffset fileOffset, XrdSfsXferSize amount)
int fctl(const int cmd, const char *args, XrdOucErrInfo &out_error)
XrdSfsXferSize readv(XrdOucIOVec *readV, int readCount)
int open(const char *fileName, XrdSfsFileOpenMode openMode, mode_t createMode, const XrdSecEntity *client, const char *opaque=0)
XrdSfsXferSize pgRead(XrdSfsFileOffset offset, char *buffer, XrdSfsXferSize rdlen, uint32_t *csvec, uint64_t opts=0)
int getMmap(void **Addr, off_t &Size)
int stat(struct stat *buf)
int Retire(int &retc, long long *retsz=0, char *buff=0, int blen=0)
static void Hide(const char *thePath)
int PoscGet(short &Mode, int Done=0)
static int Alloc(const char *thePath, int Opts, XrdOfsHandle **Handle)
struct XrdOfsStats::StatsData Data
static int Authorize(XrdOfsTPC **theTPC, Facts &Args, int isPLE=0)
static int Validate(XrdOfsTPC **theTPC, Facts &Args)
void Connect(const XrdSecEntity *client=0)
int chmod(const char *Name, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
int truncate(const char *Name, XrdSfsFileOffset fileOffset, XrdOucErrInfo &out_error, const XrdSecEntity *client=0, const char *opaque=0)
void Disc(const XrdSecEntity *client=0)
int prepare(XrdSfsPrep &pargs, XrdOucErrInfo &out_error, const XrdSecEntity *client=0)
const char * Split(const char *Args, const char **Opq, char *Path, int Plen)
char * WaitTime(int, char *, int)
int mkdir(const char *dirName, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
int chksum(csFunc Func, const char *csName, const char *Path, XrdOucErrInfo &out_error, const XrdSecEntity *client=0, const char *opaque=0)
int rename(const char *oldFileName, const char *newFileName, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *infoO=0, const char *infoN=0)
static int Emsg(const char *, XrdOucErrInfo &, int, const char *x, XrdOfsHandle *hP)
static int fsError(XrdOucErrInfo &myError, int rc)
int stat(const char *Name, struct stat *buf, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
int getStats(char *buff, int blen)
int Stall(XrdOucErrInfo &, int, const char *)
int exists(const char *fileName, XrdSfsFileExistence &exists_flag, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
void Unpersist(XrdOfsHandle *hP, int xcev=1)
static const uint64_t Verify
all: Verify checksums
virtual int Fctl(int cmd, int alen, const char *args, char **resp=0)
virtual int Fchmod(mode_t mode)
static const int Fctl_ckpObj
static const uint16_t DF_isProxy
Object is a proxy object.
virtual int Remdir(const char *path, int Opts=0, XrdOucEnv *envP=0)=0
virtual int Unlink(const char *path, int Opts=0, XrdOucEnv *envP=0)=0
static int Format(char *buff, int blen, int ecode, const char *etxt1, const char *etxt2=0)
const char * getErrUser()
char * getMsgBuff(int &mblen)
int setErrInfo(int code, const char *emsg)
static void csCalc(const char *data, off_t offs, size_t count, uint32_t *csval)
static bool csVer(dataInfo &dInfo, off_t &bado, int &badc)
static const char * tpcDlgOn
static const char * tpcKey
bool Add(XrdSecAttr &attr)
XrdSecEntityAttr * eaAPI
non-const API to attributes
virtual void doneRead()=0
virtual void doneWrite()=0
static const uint64_t Verify
Options for pgRead() and pgWrite() as noted below.
@ cpTrunc
Truncate a file within checkpoint.
@ cpDelete
Delete an existing checkpoint.
@ cpRestore
Restore an active checkpoint and delete it.
@ cpWrite
Add data to an existing checkpoint.
@ cpQuery
Return checkpoint limits.
@ cpCreate
Create a checkpoint, one must not be active.
XrdSfsFile(const char *user=0, int MonID=0)
static const int uUrlOK
ucap: Supports async responses
static const int uLclF
ucap: Client is on a private net