123bool VerPgw(
const char *buf, ssize_t off,
size_t len,
const uint32_t* csv,
136 n = snprintf(
eMsg,
sizeof(
eMsg),
"Checksum error at offset %lld.", (
long long) badoff);
186 myRole = strdup(
"server");
194 myPort = (bp = getenv(
"XRDPORT")) ? strtol(bp, (
char **)NULL, 10) : 0;
275 XrdOfsFS->Emsg(epname,
error, EADDRINUSE,
"open directory", dir_path);
284 && (retc =
XrdOfsFS->Finder->Locate(
error, dir_path, od_mode, &Open_Env)))
290 else if (!(retc =
dp->Opendir(dir_path, Open_Env)))
291 {
fname = strdup(dir_path);
300 {
if (
dp->getErrMsg(eText)) etP = eText.c_str();
306 return XrdOfsFS->Emsg(epname,
error, retc,
"open directory", dir_path, etP);
352 if (
XrdOfsFS->tryXERT &&
dp->getErrMsg(eText)) etP = eText.c_str();
369 return (
const char *)(
dname);
402 if ((retc =
dp->Close()))
405 if (
XrdOfsFS->tryXERT &&
dp->getErrMsg(eText)) etP = eText.c_str();
449 if ((retc =
dp->StatRet(buf)))
return retc;
514 int OK() {hP=0; fP=0; cP=0; poscNum=0;
return SFS_OK;}
516 OpenHelper(
const char *path)
517 :
Path(path), hP(0), fP(0), cP(0), poscNum(0) {}
524 if (poscNum > 0)
XrdOfsFS->poscQ->Del(
Path, poscNum, 1);
530 int retc, isPosc = 0, crOpts = 0, isRW = 0, open_flag = 0;
542 if (
oh != XrdOfs::dummyHandle)
544 return XrdOfsFS->Emsg(epname,
error,EADDRINUSE,
"open file",path);
550 if (open_mode & crMask)
553 XrdOfsFS->poscAuto || Open_Env.Get(
"ofs.posc")))
557 {open_flag = O_RDWR | O_CREAT | O_EXCL;
561 open_flag |= O_RDWR | O_CREAT | O_TRUNC;
565 {
const char* cipher = 0;
566 if ((retc =
XrdOfsFS->SetupCksRT(oP.cP, Open_Env, cipher)))
568 snprintf(eBuff,
sizeof(eBuff),
"setup real-time %s checksum",
569 (cipher ? cipher :
"unknown"));
575 switch(open_mode & opMask)
581 Open_Env.Get(
"ofs.posc"))) oP.poscNum = -1;
586 Open_Env.Get(
"ofs.posc"))) oP.poscNum = -1;
588 default: open_flag = O_RDONLY; find_flag |=
SFS_O_RDONLY;
600 int k = ((dOn && *dOn ==
'1') || strcmp(tpcKey,
"delegate") ? 1 : 0);
611 find_flag, &Open_Env)))
617 return XrdOfsFS->Emsg(epname,
error, EPROTOTYPE,
"tpc", path,
618 "+TPC prohibited due to security configuration");
622 if (open_flag & O_CREAT)
626 bool overwrite_permitted =
true;
627 if (!(open_flag & O_EXCL))
628 {
if (client &&
XrdOfsFS->Authorization &&
633 overwrite_permitted =
false;
635 open_flag &= ~O_TRUNC;
639 else if (client &&
XrdOfsFS->Authorization &&
644 overwrite_permitted =
false;
654 return XrdOfsFS->Emsg(epname,
error, oP.poscNum,
"pcreate", path,
655 "+ofs_open: failed to enter file into posc queue");
666 ((open_flag << 8) | crOpts))))
668 if (retc == -EINPROGRESS)
672 if (retc != -ENOTSUP)
675 if ((open_flag & O_EXCL) && retc == -EEXIST && !overwrite_permitted)
682 open_flag = O_RDWR|O_TRUNC;
698 "open", path,
error);
715 {
char pfnbuff[MAXPATHLEN+8];
const char *pfnP;
716 if (!(pfnP =
XrdOfsOss->Lfn2Pfn(path, pfnbuff, MAXPATHLEN, retc)))
718 "+ofs_open: mapping tpc target lfn to pfn failed");
728 if ((retc = oP.hP->PoscSet(
tident, oP.poscNum, theMode)))
729 {
if (retc > 0)
XrdOfsFS->poscQ->Del(path, retc);
730 else return XrdOfsFS->Emsg(epname,
error, retc,
"access", path,
731 "+ofs_open: posc mode initiation failed");
739 if (!(oP.hP->Inactive()))
743 "+ofs_open: this tpc is already in progress");
746 if (oP.poscNum > 0)
XrdOfsFS->poscQ->Commit(path, oP.poscNum);
750 if (oP.poscNum > 0)
OfsStats.Data.numOpenP++;
764 {
if (
myTPC) open_flag |= O_NOFOLLOW;
773 oP.fP =
static_cast<XrdOssDF*
>(cfP);
779 if ((retc = oP.fP->Open(path, open_flag, theMode, Open_Env)))
781 if (retc == -EINPROGRESS)
785 if (retc == -ETXTBSY)
return XrdOfsFS->Stall(
error, -1, path);
786 if (retc == -EDESTADDRREQ)
787 {
char *url = Open_Env.Get(
"FileURL");
790 if (
XrdOfsFS->Balancer && retc == -ENOENT)
794 if (
XrdOfsFS->tryXERT && oP.fP->getErrMsg(eText)) etP = eText.c_str();
795 return XrdOfsFS->Emsg(epname,
error, retc,
"open", path, etP);
801 {
if ((retc = oP.fP->Fchmod(
static_cast<mode_t
>(theMode|
XRDSFS_POSCPEND))))
803 "+ofs_open: POSC file designation failed");
804 XrdOfsFS->poscQ->Commit(path, oP.poscNum);
809 if (oP.fP->isCompressed() > 0)
810 {oP.hP->isCompressed = 1;
813 oP.hP->Activate(oP.fP);
818#if defined(__linux__) || (defined(__FreeBSD_kernel__) && defined(__GLIBC__))
821 int theFD = oP.fP->getFD();
822 if (theFD >= 0 && fadFails < 4096)
823 if (posix_fadvise(theFD, 0, 0, POSIX_FADV_SEQUENTIAL) < 0)
824 {
OfsEroute.Emsg(epname, errno,
"fadvise for sequential I/O.");
834 if (
XrdOfsFS->evsObject->Enabled(theEvent))
836 XrdOfsFS->evsObject->Notify(theEvent, evInfo);
844 if (oP.poscNum > 0)
OfsStats.Data.numOpenP++;
868 int rc =
oh->Select().Clone(ofsFile.
oh->
Select());
872 snprintf(etxt,
sizeof(etxt),
"%s from %s",
oh->Name(),ofsFile.
oh->
Name());
884 int rc =
oh->Select().Clone(cVec);
888 snprintf(etxt,
sizeof(etxt),
"%s from file ranges",
oh->Name());
915 int poscNum, retc, cRetc = 0;
925 if (
oh == XrdOfs::dummyHandle)
927 if ((
oh->Inactive()))
931 hP =
oh;
oh = XrdOfs::dummyHandle;
971 {retc =
myCKP->Restore();
986 {
long long FSize, *retsz;
987 char pathbuff[MAXPATHLEN+8];
991 if (!(hP->
Retire(cRetc, retsz, pathbuff,
sizeof(pathbuff))))
993 XrdOfsFS->evsObject->Notify(theEvent, evInfo);
1009 const char *ckpName;
1016 "handle checkpoint", (
const char *)0);
1021 "handle disabled checkpoint", (
const char *)0);
1026 return XrdOfsFS->Emsg(epname,
error, EIDRM,
"extend checkpoint "
1027 "(only delete or restore possible) for",
oh->Name());
1033 ckpName =
"create checkpoint for";
1034 if ((rc = CreateCKP()))
return rc;
1038 ckpName =
"delete checkpoint for";
1039 if (!
myCKP) rc = ENOENT;
1040 else {rc =
myCKP->Delete();
1047 ckpName =
"query checkpoint for";
1048 if (!range || n <= 0)
1050 "query checkpoint limits for",
oh->Name());
1051 rc = (
myCKP ?
myCKP->Query(*range) : ENOENT);
1054 ckpName =
"restore checkpoint for";
1055 if (!
myCKP) rc = ENOENT;
1056 else {
if (!(rc =
myCKP->Restore(&readok)))
1062 oh->Suppress((readok ? 0 : -EDOM));
1068 ckpName =
"checkpoint truncate";
1069 if (!range) rc = EINVAL;
1070 else if (!
myCKP) rc = ENOENT;
1071 else if ((rc =
myCKP->Truncate(range)))
ckpBad =
true;
1074 ckpName =
"checkpoint write";
1075 if (!range || n <= 0) rc = EINVAL;
1076 else if (!
myCKP) rc = ENOENT;
1077 else if ((rc =
myCKP->Write(range, n)))
ckpBad =
true;
1081 "decode checkpoint request for",
oh->Name());
1086 if (rc)
return XrdOfsFS->Emsg(epname,
error, rc, ckpName,
oh->Name());
1098int XrdOfsFile::CreateCKP()
1104 "create checkpoint for",
oh->
Name());
1109 "create checkpoint for R/O",
oh->
Name(),
1110 "+ofs_CreateCKP: file is not open in r/w mode");
1116 "create checkpoint for POSC file",
oh->
Name(),
1117 "+ofs_CreateCKP: POSC file cannot be checkpointed");
1125 "create proxy checkpoint");
1127 }
else myCKP =
new XrdOfsChkPnt(
oh->Select(),
oh->Name());
1151 out_error.
setErrInfo(ENOTSUP,
"fctl operation not supported");
1164 static const char *fctlArg =
"ofs.tpc cancel";
1165 static const int fctlAsz = 15;
1173 {
if (resp)
delete[] resp;
1177 {
if ((rc = strlen(resp)))
1178 {
error.setErrInfo(rc, resp);
1189 if (cmd !=
SFS_FCTL_SPEC1 || !args || alen < fctlAsz || strcmp(fctlArg,args))
1190 return XrdOfsFS->FSctl(*
this, cmd, alen, args, client);
1195 {
error.setErrInfo(ESRCH,
"tpc operation not found");
1236#if _FILE_OFFSET_BITS!=64
1237 if (offset > 0x000000007fffffff)
1249 (off_t)offset, (
size_t)rdlen, csvec, pgOpts));
1251 return XrdOfsFS->Emsg(epname,
error,(
int)nbytes,
"pgRead",
oh,
false,
false);
1282#if _FILE_OFFSET_BITS!=64
1283 if (aiop->sfsAio.aio_offset > 0x000000007fffffff)
1284 return XrdOfsFS->Emsg(epname,
error,-EFBIG,
"pgRead",
oh->Name(),0,
false);
1294 if ((rc =
oh->Select().pgRead(aioparm, pgOpts)) < 0)
1330#if _FILE_OFFSET_BITS!=64
1331 if (offset > 0x000000007fffffff)
1332 return XrdOfsFS->Emsg(epname,
error, -EFBIG,
"pgwrite",
oh,
true,
false);
1349 (off_t)offset, (
size_t)wrlen, csvec, pgOpts));
1351 return XrdOfsFS->Emsg(epname,
error,(
int)nbytes,
"pgwrite",
oh,
true,
false);
1395#if _FILE_OFFSET_BITS!=64
1396 if (aiop->sfsAio.aio_offset > 0x000000007fffffff)
1397 return XrdOfsFS->Emsg(epname,
error, -EFBIG,
"pgwrite",
oh,
true,
false);
1413 if ((rc =
oh->Select().pgWrite(aioparm, pgOpts)) < 0)
1441 FTRACE(
read,
"preread " <<blen <<
"@" <<offset);
1445#if _FILE_OFFSET_BITS!=64
1446 if (offset > 0x000000007fffffff)
1452 if ((retc =
oh->Select().Read((off_t)offset, (
size_t)blen)) < 0)
1453 return XrdOfsFS->Emsg(epname,
error, (
int)retc,
"preread",
oh, 0,
false);
1488#if _FILE_OFFSET_BITS!=64
1489 if (offset > 0x000000007fffffff)
1497 (off_t)offset, (
size_t)blen))
1499 (off_t)offset, (
size_t)blen)));
1501 return XrdOfsFS->Emsg(epname,
error, (
int)nbytes,
"read",
oh, 0,
false);
1531 return XrdOfsFS->Emsg(epname,
error,(
int)nbytes,
"readv",
oh,
false,
false);
1557 if (
oh->isCompressed)
1571#if _FILE_OFFSET_BITS!=64
1578 if ((rc =
oh->Select().Read(aiop)) < 0)
1617#if _FILE_OFFSET_BITS!=64
1618 if (offset > 0x000000007fffffff)
1631 (off_t)offset, (
size_t)blen));
1633 return XrdOfsFS->Emsg(epname,
error,(
int)nbytes,
"write",
oh,
true,
false);
1668#if _FILE_OFFSET_BITS!=64
1670 return XrdOfsFS->Emsg(epname,
error, -EFBIG,
"write",
oh,
true,
false);
1681 if ((rc =
oh->Select().Write(aiop)) < 0)
1705 Size =
oh->Select().getMmap(Addr);
1732 if ((retc =
oh->Select().Fstat(buf)) < 0)
1765 if (!(
oh->isPending))
return SFS_OK;
1776 if ((retc =
oh->Select().Fsync()))
1827 if (
sizeof(off_t) <
sizeof(flen) && flen > 0x000000007fffffff)
1838 if ((retc =
oh->Select().Ftruncate(flen)))
1865 cxrsz =
oh->Select().isCompressed(cxtype);
1876void XrdOfsFile::GenFWEvent()
1926 char buff[MAXPATHLEN+8];
1932 {einfo.
setErrInfo(ENOTSUP,
"Checksums are not supported.");
1939 rc = cksData.
Set(csName);
1941 {
if (rc && (rc = Cks->Size(csName)))
1943 strcpy(buff, csName); strcat(buff,
" checksum not supported.");
1951 {strcpy(buff, csName);
1952 strcat(buff,
" checksum path not specified.");
1971 return Emsg(epname, einfo, rc,
"checksum",
Path,
1972 "+ofs_chksum: lfn to pfn mapping failed");
1979 {
if (client) cksData.envP = &cksEnv;
1980 else cksData.envP = (einfo.
getEnv() ? einfo.
getEnv() : &cksEnv);
1987 else {einfo.
setErrInfo(EINVAL,
"Invalid checksum function.");
1994 if (rc >= 0 || rc == -
ENOATTR || rc == -ESTALE || rc == -ESRCH)
1996 if (rc >= 0 || rc == -
ENODATA || rc == -ESTALE || rc == -ESRCH)
1998 {
if (rc >= 0) {cksData.
Get(buff, MAXPATHLEN); rc = 0;}
1999 else {*buff = 0; rc = -rc;}
2006 return Emsg(epname, einfo, rc,
"checksum",
Path,
"?");
2047 sprintf(buff,
"%o",
static_cast<int>(acc_mode));
2048 if (Forward(retc,einfo,
fwdCHMOD,path,buff,&chmod_Env))
return retc;
2050 else if ((retc =
Finder->Locate(einfo, path, locFlags, &chmod_Env)))
2057 return XrdOfsFS->Emsg(epname, einfo, retc,
"stat", path,
"?");
2058 if (S_ISDIR(
Stat.st_mode)) acc_mode = (acc_mode |
dMask[0]) &
dMask[1];
2059 else acc_mode = (acc_mode |
fMask[0]) &
fMask[1];
2070 if (!(retc =
XrdOfsOss->Chmod(path, acc_mode, &chmod_Env)))
return SFS_OK;
2074 return XrdOfsFS->Emsg(epname, einfo, retc,
"chmod", path,
"?");
2156 if (retc == -ENOENT)
2163 return XrdOfsFS->Emsg(epname, einfo, retc,
"locate", path,
"?");
2181 buff += n; blen -= n;
2229 sprintf(buff,
"%o",
static_cast<int>(acc_mode));
2231 path, buff, &mkdir_Env))
return retc;
2233 else if ((retc =
Finder->Locate(einfo,path,LocOpts,&mkdir_Env)))
2239 if ((retc =
XrdOfsOss->Mkdir(path, acc_mode, mkpath, &mkdir_Env)))
2240 return XrdOfsFS->Emsg(epname, einfo, retc,
"mkdir", path,
"?");
2252 {
if (!mkpath) Balancer->Added(path);
2253 else {
char *slash, *myPath = strdup(path);
2254 do {Balancer->Added(myPath);
2255 if ((slash = rindex(myPath,
'/'))) *slash = 0;
2256 }
while(slash && slash != myPath);
2290 return prepHandler->query(pargs, out_error, client);
2292 return prepHandler->cancel(pargs, out_error, client);
2294 return prepHandler->begin(pargs, out_error, client);
2301 && (retc =
XrdOfsFS->Finder->Prepare(out_error, pargs, &prep_Env)))
2302 return fsError(out_error, retc);
2310int XrdOfs::remove(
const char type,
2332 XTRACE(remove, path, type);
2343 {
if (Forward(retc, einfo, *fSpec, path, 0, &rem_Env))
return retc;}
2344 else if ((retc =
Finder->Locate(einfo, path, LocOpts, &rem_Env)))
2352 if (evsObject->Enabled(theEvent))
2353 {XrdOfsEvsInfo evInfo(
tident, path, info, &rem_Env);
2354 evsObject->Notify(theEvent, evInfo);
2366 if (retc)
return XrdOfsFS->
Emsg(epname, einfo, retc,
"remove", path,
"?");
2368 if (Balancer) Balancer->Removed(path);
2377 const char *new_name,
2401 XTRACE(
rename, new_name,
"old fn=" <<old_name <<
" new ");
2413 if (client) client->
eaAPI->
Add(
"request.name",
"",
true);
2417 bool cannot_overwrite =
false;
2418 if (client &&
XrdOfsFS->Authorization &&
2420 {cannot_overwrite =
true;
2422 "rename to existing file (overwrite disallowed)", new_name, einfo);
2429 {
if (Forward(retc,einfo,
fwdMV,old_name,new_name,&old_Env,&new_Env))
2432 else if ((retc =
Finder->Locate(einfo, old_name, LocOpts, &old_Env)))
2440 new_name, infoN, &new_Env);
2450 if (cannot_overwrite)
2452 if (
SFS_OK !=
exists(new_name, exists_flag, einfo, client, infoN))
2460 einfo.
setErrInfo(EPERM,
"Overwrite of existing data not permitted");
2461 return fsError(einfo, -EPERM);
2467 if ((retc =
XrdOfsOss->Rename(old_name, new_name, &old_Env, &new_Env)))
2468 {
return XrdOfsFS->Emsg(epname, einfo, retc,
"rename", old_name,
"?");
2471 if (Balancer) {Balancer->Removed(old_name);
2472 Balancer->Added(new_name);
2516 if ((retc =
XrdOfsOss->Stat(path, buf, 0, &stat_Env)))
2517 return XrdOfsFS->Emsg(epname, einfo, retc,
"locate", path,
"?");
2565 else if ((-ENOMSG) != retc)
2566 return XrdOfsFS->Emsg(epname, einfo, retc,
"locate", path,
"?");
2606 sprintf(xSz,
"%lld",
static_cast<long long>(Size));
2607 if (Forward(retc,einfo,
fwdTRUNC,path,xSz,&trunc_Env))
return retc;
2622 if (!(retc =
XrdOfsOss->Truncate(path, Size, &trunc_Env)))
return SFS_OK;
2626 return XrdOfsFS->Emsg(epname, einfo, retc,
"trunc", path,
"?");
2641 const char* etP = 0;
2655 rc =
Emsg(pfx, einfo, ecode, op, hP->
Name(), etP);
2683 bool msgDone =
false;
2702 {
case '?': xtra = 0;
2704 {
if (eText.find(
"Unable") != std::string::npos)
2707 }
else xtra = eText.c_str();
2743 if (ecode < 0) ecode = -ecode;
2744 if (ecode == EBUSY)
return 5;
2748 if (ecode == ETIMEDOUT)
return OSSDelay;
2763 if (CksRTCgi && (cT = Env.
Get(
"cks.type")))
2764 return (
ValidCST(cT) && (cP=Cks->Object(cT)) ? 0 : -ENOTSUP);
2769 {cP = CksRTCalc->
New();
2785const char *XrdOfs::Fname(
const char *path)
2787 int i = strlen(path)-1;
2788 while(i)
if (path[i] ==
'/')
return &path[i+1];
2797int XrdOfs::Forward(
int &Result,
XrdOucErrInfo &Resp,
struct fwdOpt &Fwd,
2798 const char *arg1,
const char *arg2,
2803 if ((retc =
Finder->Forward(Resp, Fwd.Cmd, arg1, arg2, Env1, Env2)))
2804 {Result =
fsError(Resp, retc);
2810 return (Fwd.Port ? 0 : 1);
2830 if (rc > 0) {
OfsStats.Data.numDelays++;
return rc; }
2841 static const char *fmt =
"oss.cgroup=all&oss.space=%llu&oss.free=%llu"
2842 "&oss.maxf=%llu&oss.used=%llu&oss.quota=-1";
2844 unsigned long long totSpace, totFree, maxFree;
2853 n = sscanf(bP,
"%c %llu %llu %llu", &qsFmt, &totSpace, &totFree, &maxFree);
2857 if (n != 4 || qsFmt !=
'A')
2858 {myError.
setErrInfo(ENOTSUP,
"space fctl operation not supported by cmsd");
2864 totSpace = totSpace << 20LL;
2865 totFree = totFree << 20LL;
2866 maxFree = maxFree << 20LL;
2870 blen = snprintf(bP,blen,fmt,totSpace,totFree,maxFree,(totSpace-totFree));
2881 char *
Path,
int Plen)
2884 *Opq = index(Args,
'?');
2885 if (!(*Opq))
return Args;
2887 if (xlen >= Plen) xlen = Plen-1;
2888 strncpy(
Path, Args, xlen);
2901 const char *msgfmt =
"File %s is being %s; "
2902 "estimated time to completion %s";
2907 char Mbuff[2048], Tbuff[32];
2908 const char *What =
"staged";
2912 if (stime < 0) {stime = 60; What =
"created";}
2916 snprintf(Mbuff,
sizeof(Mbuff)-1, msgfmt,
2917 Fname(path), What,
WaitTime(stime, Tbuff,
sizeof(Tbuff)));
2918 ZTRACE(delay,
"Stall " <<stime <<
": " <<Mbuff <<
" for " <<path);
2967 if ((poscNum = oh->
PoscGet(theMode))) poscQ->Del(oh->
Name(), poscNum, 1);
2990 snprintf(buff,blen,
"%d second%s",sec,(sec > 1 ?
"s" :
""));
2992 {
if (sec > 10) min++;
2993 snprintf(buff,blen,
"%d minute%s",min,(min > 1 ?
"s" :
""));
2997 snprintf(buff,blen,
"%d minutes",min+60);
2998 else snprintf(buff,blen,
"%d hour and %d minutes",hr,min);
2999 else {
if (min > 30) hr++;
3000 snprintf(buff,blen,
"%d hours",hr);
3006 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
virtual void Recycle()
Recycle the checksum object as it is no longer needed. A default is given.
virtual XrdCksCalc * New()=0
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 Clone(XrdSfsFile &srcFile)
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)
static int EmsgType(int ecode)
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, bool posChk=false, bool chktype=true)
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 SetupCksRT(XrdCksCalc *&, XrdOucEnv &, const char *&)
bool ValidCST(const char *cst)
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 bool getErrMsg(std::string &eText)
static const int Fctl_QFinfo
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 *xtra=0)
char * Get(const char *varname)
const char * getErrUser()
char * getMsgBuff(int &mblen)
int setErrInfo(int code, const char *emsg)
void Reset()
Reset object to no message state. Call this method to release appendages.
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