41 #include <sys/param.h>
44 #include <sys/types.h>
123 bool 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);
172 tpcRdrHost{}, tpcRdrPort{}
186 myRole = strdup(
"server");
194 myPort = (bp = getenv(
"XRDPORT")) ? strtol(bp, (
char **)NULL, 10) : 0;
290 else if (!(retc =
dp->
Opendir(dir_path, Open_Env)))
291 {
fname = strdup(dir_path);
369 return (
const char *)(
dname);
449 if ((retc =
dp->
StatRet(buf)))
return retc;
464 oh(
XrdOfs::dummyHandle), myTPC(0), myCKP(0),
465 dorawio(0), viaDel(false), ckpBad(false) {}
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) {}
530 int retc, isPosc = 0, crOpts = 0, isRW = 0, open_flag = 0;
542 if (
oh != XrdOfs::dummyHandle)
550 if (open_mode & crMask)
557 {open_flag = O_RDWR | O_CREAT | O_EXCL;
561 open_flag |= O_RDWR | O_CREAT | O_TRUNC;
565 {
const char* cipher = 0;
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)))
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;
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;
718 "+ofs_open: mapping tpc target lfn to pfn failed");
728 if ((retc = oP.hP->PoscSet(
tident, oP.poscNum, theMode)))
731 "+ofs_open: posc mode initiation failed");
739 if (!(oP.hP->Inactive()))
743 "+ofs_open: this tpc is already in progress");
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)
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();
801 {
if ((retc = oP.fP->Fchmod(
static_cast<mode_t
>(theMode|
XRDSFS_POSCPEND))))
803 "+ofs_open: POSC file designation failed");
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.");
872 snprintf(etxt,
sizeof(etxt),
"%s from %s",
oh->
Name(),ofsFile.
oh->
Name());
888 snprintf(etxt,
sizeof(etxt),
"%s from file ranges",
oh->
Name());
915 int poscNum, retc, cRetc = 0;
925 if (
oh == XrdOfs::dummyHandle)
931 hP =
oh;
oh = XrdOfs::dummyHandle;
986 {
long long FSize, *retsz;
987 char pathbuff[MAXPATHLEN+8];
991 if (!(hP->
Retire(cRetc, retsz, pathbuff,
sizeof(pathbuff))))
1009 const char *ckpName;
1016 "handle checkpoint", (
const char *)0);
1021 "handle disabled checkpoint", (
const char *)0);
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;
1047 ckpName =
"query checkpoint for";
1048 if (!range || n <= 0)
1050 "query checkpoint limits for",
oh->
Name());
1054 ckpName =
"restore checkpoint for";
1055 if (!
myCKP) rc = ENOENT;
1068 ckpName =
"checkpoint truncate";
1069 if (!range) rc = EINVAL;
1070 else if (!
myCKP) rc = ENOENT;
1074 ckpName =
"checkpoint write";
1075 if (!range || n <= 0) rc = EINVAL;
1076 else if (!
myCKP) rc = ENOENT;
1081 "decode checkpoint request for",
oh->
Name());
1098 int 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");
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)))
1189 if (cmd !=
SFS_FCTL_SPEC1 || !args || alen < fctlAsz || strcmp(fctlArg,args))
1236 #if _FILE_OFFSET_BITS!=64
1237 if (offset > 0x000000007fffffff)
1249 (off_t)offset, (
size_t)rdlen, csvec, pgOpts));
1282 #if _FILE_OFFSET_BITS!=64
1283 if (aiop->sfsAio.aio_offset > 0x000000007fffffff)
1330 #if _FILE_OFFSET_BITS!=64
1331 if (offset > 0x000000007fffffff)
1349 (off_t)offset, (
size_t)wrlen, csvec, pgOpts));
1395 #if _FILE_OFFSET_BITS!=64
1396 if (aiop->sfsAio.aio_offset > 0x000000007fffffff)
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)
1488 #if _FILE_OFFSET_BITS!=64
1489 if (offset > 0x000000007fffffff)
1497 (off_t)offset, (
size_t)blen))
1499 (off_t)offset, (
size_t)blen)));
1571 #if _FILE_OFFSET_BITS!=64
1617 #if _FILE_OFFSET_BITS!=64
1618 if (offset > 0x000000007fffffff)
1631 (off_t)offset, (
size_t)blen));
1668 #if _FILE_OFFSET_BITS!=64
1827 if (
sizeof(off_t) <
sizeof(flen) && flen > 0x000000007fffffff)
1876 void 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];
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);
2302 return fsError(out_error, retc);
2310 int 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))
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);
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;
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")))
2769 {cP = CksRTCalc->
New();
2785 const char *XrdOfs::Fname(
const char *path)
2787 int i = strlen(path)-1;
2788 while(i)
if (path[i] ==
'/')
return &path[i+1];
2797 int 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);
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")
DIR * opendir(const char *path)
XrdOucTList * paths
List of paths.
@ XrdSfsFileExistIsDirectory
long long XrdSfsFileOffset
virtual XrdAccPrivs Access(const XrdSecEntity *Entity, const char *path, const Access_Operation oper, XrdOucEnv *Env=0)=0
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)
virtual int Get(const char *Xfn, XrdCksData &Cks)=0
virtual XrdCksCalc * Object(const char *name)
virtual int Size(const char *Name=0)=0
virtual int Calc(const char *Xfn, XrdCksData &Cks, int doSet=1)=0
virtual void Added(const char *path, int Pend=0)
virtual int Prepare(XrdOucErrInfo &Resp, XrdSfsPrep &pargs, XrdOucEnv *Info=0)
virtual void Removed(const char *path)
virtual int Forward(XrdOucErrInfo &Resp, const char *cmd, const char *arg1=0, const char *arg2=0, XrdOucEnv *Env1=0, XrdOucEnv *Env2=0)
virtual int Locate(XrdOucErrInfo &Resp, const char *path, int flags, XrdOucEnv *Info=0)=0
int autoStat(struct stat *buf)
int open(const char *dirName, const XrdSecEntity *client, const char *opaque=0)
void Wait4Event(const char *path, XrdOucErrInfo *einfo)
void Notify(Event eNum, XrdOfsEvsInfo &Info)
int Enabled(Event theEvents)
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)
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)
virtual int fctl(const int cmd, const char *args, XrdOucErrInfo &eInfo)=0
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)
void Suppress(int rrc=-EDOM, int wrc=-EDOM)
static int Alloc(const char *thePath, int Opts, XrdOfsHandle **Handle)
int Del(const char *Lfn, int Offset, int Unlink=0)
int Commit(const char *Lfn, int Offset)
int Add(const char *Tident, const char *Lfn, bool isNew)
virtual int cancel(XrdSfsPrep &pargs, XrdOucErrInfo &eInfo, const XrdSecEntity *client=0)=0
virtual int begin(XrdSfsPrep &pargs, XrdOucErrInfo &eInfo, const XrdSecEntity *client=0)=0
virtual int query(XrdSfsPrep &pargs, XrdOucErrInfo &eInfo, const XrdSecEntity *client=0)=0
struct XrdOfsStats::StatsData Data
int Report(char *Buff, int Blen)
static int Authorize(XrdOfsTPC **theTPC, Facts &Args, int isPLE=0)
virtual int Sync(XrdOucErrInfo *error)
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 FSctl(const int cmd, XrdSfsFSctl &args, XrdOucErrInfo &eInfo, const XrdSecEntity *client=0)
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)
virtual int StatRet(struct stat *buff)
virtual int isCompressed(char *cxidp=0)
virtual int Opendir(const char *path, XrdOucEnv &env)
virtual int Clone(XrdOssDF &srcFile)
virtual int Ftruncate(unsigned long long flen)
virtual int Readdir(char *buff, int blen)
virtual int Fstat(struct stat *buf)
static const uint64_t Verify
all: Verify checksums
virtual ssize_t ReadRaw(void *buffer, off_t offset, size_t size)
virtual int Close(long long *retsz=0)=0
virtual ssize_t Read(off_t offset, size_t size)
virtual int Fctl(int cmd, int alen, const char *args, char **resp=0)
virtual int Fchmod(mode_t mode)
static const int Fctl_ckpObj
virtual ssize_t pgWrite(void *buffer, off_t offset, size_t wrlen, uint32_t *csvec, uint64_t opts)
virtual ssize_t pgRead(void *buffer, off_t offset, size_t rdlen, uint32_t *csvec, uint64_t opts)
static const uint16_t DF_isProxy
Object is a proxy object.
virtual off_t getMmap(void **addr)
virtual ssize_t ReadV(XrdOucIOVec *readV, int rdvcnt)
virtual bool getErrMsg(std::string &eText)
virtual ssize_t Write(const void *buffer, off_t offset, size_t size)
static const int Fctl_QFinfo
virtual int Mkdir(const char *path, mode_t mode, int mkpath=0, XrdOucEnv *envP=0)=0
virtual bool getErrMsg(std::string &eText)
virtual int Create(const char *tid, const char *path, mode_t mode, XrdOucEnv &env, int opts=0)=0
virtual XrdOssDF * newDir(const char *tident)=0
virtual void Connect(XrdOucEnv &env)
virtual int Chmod(const char *path, mode_t mode, XrdOucEnv *envP=0)=0
virtual void Disc(XrdOucEnv &env)
virtual int Lfn2Pfn(const char *Path, char *buff, int blen)
virtual int Remdir(const char *path, int Opts=0, XrdOucEnv *envP=0)=0
virtual int Rename(const char *oPath, const char *nPath, XrdOucEnv *oEnvP=0, XrdOucEnv *nEnvP=0)=0
virtual XrdOssDF * newFile(const char *tident)=0
virtual int Truncate(const char *path, unsigned long long fsize, XrdOucEnv *envP=0)=0
virtual int Stats(char *buff, int blen)
virtual int Stat(const char *path, struct stat *buff, int opts=0, XrdOucEnv *envP=0)=0
virtual int Unlink(const char *path, int Opts=0, XrdOucEnv *envP=0)=0
virtual void Finished()=0
virtual int Restore(bool *readok=0)=0
virtual int Query(struct iov &range)=0
virtual int Write(struct iov *&range, int rnum)=0
virtual int Truncate(struct iov *&range)=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)
void clear()
Reset data and error information to null. Any appenadges are released.
int setErrInfo(int code, const char *emsg)
char * getMsgBuff(int &mblen)
const char * getErrUser()
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.
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
static const int uUrlOK
ucap: Supports async responses
static const int uLclF
ucap: Client is on a private net