41 #include <sys/param.h>
44 #include <sys/types.h>
121 bool 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);
170 tpcRdrHost{}, tpcRdrPort{}
184 myRole = strdup(
"server");
192 myPort = (bp = getenv(
"XRDPORT")) ? strtol(bp, (
char **)NULL, 10) : 0;
285 else if (!(retc =
dp->
Opendir(dir_path, Open_Env)))
286 {
fname = strdup(dir_path);
364 return (
const char *)(
dname);
444 if ((retc =
dp->
StatRet(buf)))
return retc;
459 oh(
XrdOfs::dummyHandle), myTPC(0), myCKP(0),
460 dorawio(0), viaDel(0), ckpBad(false) {}
508 int OK() {hP = 0; fP = 0; poscNum = 0;
return SFS_OK;}
510 OpenHelper(
const char *path)
511 :
Path(path), hP(0), fP(0), poscNum(0) {}
523 int retc, isPosc = 0, crOpts = 0, isRW = 0, open_flag = 0;
535 if (
oh != XrdOfs::dummyHandle)
543 if (open_mode & crMask)
550 {open_flag = O_RDWR | O_CREAT | O_EXCL;
554 open_flag |= O_RDWR | O_CREAT | O_TRUNC;
559 switch(open_mode & opMask)
565 Open_Env.
Get(
"ofs.posc"))) oP.poscNum = -1;
570 Open_Env.
Get(
"ofs.posc"))) oP.poscNum = -1;
572 default: open_flag = O_RDONLY; find_flag |=
SFS_O_RDONLY;
584 int k = ((dOn && *dOn ==
'1') || strcmp(tpcKey,
"delegate") ? 1 : 0);
595 find_flag, &Open_Env)))
602 "+TPC prohibited due to security configuration");
606 if (open_flag & O_CREAT)
610 bool overwrite_permitted =
true;
611 if (!(open_flag & O_EXCL))
612 {
if (client &&
XrdOfsFS->Authorization &&
617 overwrite_permitted =
false;
619 open_flag &= ~O_TRUNC;
623 else if (client &&
XrdOfsFS->Authorization &&
628 overwrite_permitted =
false;
639 "+ofs_open: failed to enter file into posc queue");
650 ((open_flag << 8) | crOpts))))
652 if (retc == -EINPROGRESS)
656 if (retc != -ENOTSUP)
659 if ((open_flag & O_EXCL) && retc == -EEXIST && !overwrite_permitted)
666 open_flag = O_RDWR|O_TRUNC;
682 "open", path,
error);
699 {
char pfnbuff[MAXPATHLEN+8];
const char *pfnP;
702 "+ofs_open: mapping tpc target lfn to pfn failed");
712 if ((retc = oP.hP->PoscSet(
tident, oP.poscNum, theMode)))
715 "+ofs_open: posc mode initiation failed");
723 if (!(oP.hP->Inactive()))
727 "+ofs_open: this tpc is already in progress");
748 {
if (
myTPC) open_flag |= O_NOFOLLOW;
755 if ((retc = oP.fP->Open(path, open_flag, theMode, Open_Env)))
757 if (retc == -EINPROGRESS)
762 if (retc == -EDESTADDRREQ)
763 {
char *url = Open_Env.
Get(
"FileURL");
766 if (
XrdOfsFS->Balancer && retc == -ENOENT)
770 if (
XrdOfsFS->tryXERT && oP.fP->getErrMsg(eText)) etP = eText.c_str();
777 {
if ((retc = oP.fP->Fchmod(
static_cast<mode_t
>(theMode|
XRDSFS_POSCPEND))))
779 "+ofs_open: POSC file designation failed");
785 if (oP.fP->isCompressed() > 0)
786 {oP.hP->isCompressed = 1;
789 oP.hP->Activate(oP.fP);
794 #if defined(__linux__) || (defined(__FreeBSD_kernel__) && defined(__GLIBC__))
797 int theFD = oP.fP->getFD();
798 if (theFD >= 0 && fadFails < 4096)
799 if (posix_fadvise(theFD, 0, 0, POSIX_FADV_SEQUENTIAL) < 0)
800 {
OfsEroute.
Emsg(epname, errno,
"fadvise for sequential I/O.");
848 snprintf(etxt,
sizeof(etxt),
"%s from %s",
oh->
Name(),ofsFile.
oh->
Name());
864 snprintf(etxt,
sizeof(etxt),
"%s from file ranges",
oh->
Name());
891 int poscNum, retc, cRetc = 0;
901 if (
oh == XrdOfs::dummyHandle)
907 hP =
oh;
oh = XrdOfs::dummyHandle;
962 {
long long FSize, *retsz;
963 char pathbuff[MAXPATHLEN+8];
967 if (!(hP->
Retire(cRetc, retsz, pathbuff,
sizeof(pathbuff))))
992 "handle checkpoint", (
const char *)0);
997 "handle disabled checkpoint", (
const char *)0);
1003 "(only delete or restore possible) for",
oh->
Name());
1009 ckpName =
"create checkpoint for";
1010 if ((rc = CreateCKP()))
return rc;
1014 ckpName =
"delete checkpoint for";
1015 if (!
myCKP) rc = ENOENT;
1023 ckpName =
"query checkpoint for";
1024 if (!range || n <= 0)
1026 "query checkpoint limits for",
oh->
Name());
1030 ckpName =
"restore checkpoint for";
1031 if (!
myCKP) rc = ENOENT;
1044 ckpName =
"checkpoint truncate";
1045 if (!range) rc = EINVAL;
1046 else if (!
myCKP) rc = ENOENT;
1050 ckpName =
"checkpoint write";
1051 if (!range || n <= 0) rc = EINVAL;
1052 else if (!
myCKP) rc = ENOENT;
1057 "decode checkpoint request for",
oh->
Name());
1074 int XrdOfsFile::CreateCKP()
1080 "create checkpoint for",
oh->
Name());
1085 "create checkpoint for R/O",
oh->
Name(),
1086 "+ofs_CreateCKP: file is not open in r/w mode");
1092 "create checkpoint for POSC file",
oh->
Name(),
1093 "+ofs_CreateCKP: POSC file cannot be checkpointed");
1101 "create proxy checkpoint");
1127 out_error.
setErrInfo(ENOTSUP,
"fctl operation not supported");
1140 static const char *fctlArg =
"ofs.tpc cancel";
1141 static const int fctlAsz = 15;
1149 {
if (resp)
delete[] resp;
1153 {
if ((rc = strlen(resp)))
1165 if (cmd !=
SFS_FCTL_SPEC1 || !args || alen < fctlAsz || strcmp(fctlArg,args))
1212 #if _FILE_OFFSET_BITS!=64
1213 if (offset > 0x000000007fffffff)
1225 (off_t)offset, (
size_t)rdlen, csvec, pgOpts));
1258 #if _FILE_OFFSET_BITS!=64
1259 if (aiop->sfsAio.aio_offset > 0x000000007fffffff)
1306 #if _FILE_OFFSET_BITS!=64
1307 if (offset > 0x000000007fffffff)
1325 (off_t)offset, (
size_t)wrlen, csvec, pgOpts));
1371 #if _FILE_OFFSET_BITS!=64
1372 if (aiop->sfsAio.aio_offset > 0x000000007fffffff)
1417 FTRACE(
read,
"preread " <<blen <<
"@" <<offset);
1421 #if _FILE_OFFSET_BITS!=64
1422 if (offset > 0x000000007fffffff)
1428 if ((retc =
oh->
Select().
Read((off_t)offset, (
size_t)blen)) < 0)
1464 #if _FILE_OFFSET_BITS!=64
1465 if (offset > 0x000000007fffffff)
1473 (off_t)offset, (
size_t)blen))
1475 (off_t)offset, (
size_t)blen)));
1547 #if _FILE_OFFSET_BITS!=64
1593 #if _FILE_OFFSET_BITS!=64
1594 if (offset > 0x000000007fffffff)
1607 (off_t)offset, (
size_t)blen));
1644 #if _FILE_OFFSET_BITS!=64
1803 if (
sizeof(off_t) <
sizeof(flen) && flen > 0x000000007fffffff)
1852 void XrdOfsFile::GenFWEvent()
1902 char buff[MAXPATHLEN+8];
1908 {einfo.
setErrInfo(ENOTSUP,
"Checksums are not supported.");
1915 rc = cksData.
Set(csName);
1917 {
if (rc && (rc = Cks->
Size(csName)))
1919 strcpy(buff, csName); strcat(buff,
" checksum not supported.");
1927 {strcpy(buff, csName);
1928 strcat(buff,
" checksum path not specified.");
1947 return Emsg(epname, einfo, rc,
"checksum",
Path,
1948 "+ofs_chksum: lfn to pfn mapping failed");
1955 {
if (client) cksData.envP = &cksEnv;
1956 else cksData.envP = (einfo.
getEnv() ? einfo.
getEnv() : &cksEnv);
1963 else {einfo.
setErrInfo(EINVAL,
"Invalid checksum function.");
1970 if (rc >= 0 || rc == -
ENOATTR || rc == -ESTALE || rc == -ESRCH)
1972 if (rc >= 0 || rc == -
ENODATA || rc == -ESTALE || rc == -ESRCH)
1974 {
if (rc >= 0) {cksData.
Get(buff, MAXPATHLEN); rc = 0;}
1975 else {*buff = 0; rc = -rc;}
1982 return Emsg(epname, einfo, rc,
"checksum",
Path,
"?");
2023 sprintf(buff,
"%o",
static_cast<int>(acc_mode));
2024 if (Forward(retc,einfo,
fwdCHMOD,path,buff,&chmod_Env))
return retc;
2026 else if ((retc =
Finder->
Locate(einfo, path, locFlags, &chmod_Env)))
2033 return XrdOfsFS->
Emsg(epname, einfo, retc,
"stat", path,
"?");
2034 if (S_ISDIR(
Stat.st_mode)) acc_mode = (acc_mode |
dMask[0]) &
dMask[1];
2035 else acc_mode = (acc_mode |
fMask[0]) &
fMask[1];
2050 return XrdOfsFS->
Emsg(epname, einfo, retc,
"chmod", path,
"?");
2132 if (retc == -ENOENT)
2139 return XrdOfsFS->
Emsg(epname, einfo, retc,
"locate", path,
"?");
2157 buff += n; blen -= n;
2205 sprintf(buff,
"%o",
static_cast<int>(acc_mode));
2207 path, buff, &mkdir_Env))
return retc;
2209 else if ((retc =
Finder->
Locate(einfo,path,LocOpts,&mkdir_Env)))
2215 if ((retc =
XrdOfsOss->
Mkdir(path, acc_mode, mkpath, &mkdir_Env)))
2216 return XrdOfsFS->
Emsg(epname, einfo, retc,
"mkdir", path,
"?");
2228 {
if (!mkpath) Balancer->
Added(path);
2229 else {
char *slash, *myPath = strdup(path);
2230 do {Balancer->
Added(myPath);
2231 if ((slash = rindex(myPath,
'/'))) *slash = 0;
2232 }
while(slash && slash != myPath);
2266 return prepHandler->
query(pargs, out_error, client);
2268 return prepHandler->
cancel(pargs, out_error, client);
2270 return prepHandler->
begin(pargs, out_error, client);
2278 return fsError(out_error, retc);
2286 int XrdOfs::remove(
const char type,
2308 XTRACE(remove, path, type);
2319 {
if (Forward(retc, einfo, *fSpec, path, 0, &rem_Env))
return retc;}
2320 else if ((retc =
Finder->
Locate(einfo, path, LocOpts, &rem_Env)))
2328 if (evsObject->
Enabled(theEvent))
2330 evsObject->
Notify(theEvent, evInfo);
2342 if (retc)
return XrdOfsFS->
Emsg(epname, einfo, retc,
"remove", path,
"?");
2344 if (Balancer) Balancer->
Removed(path);
2353 const char *new_name,
2377 XTRACE(
rename, new_name,
"old fn=" <<old_name <<
" new ");
2389 if (client) client->
eaAPI->
Add(
"request.name",
"",
true);
2393 bool cannot_overwrite =
false;
2394 if (client &&
XrdOfsFS->Authorization &&
2396 {cannot_overwrite =
true;
2398 "rename to existing file (overwrite disallowed)", new_name, einfo);
2405 {
if (Forward(retc,einfo,
fwdMV,old_name,new_name,&old_Env,&new_Env))
2408 else if ((retc =
Finder->
Locate(einfo, old_name, LocOpts, &old_Env)))
2416 new_name, infoN, &new_Env);
2426 if (cannot_overwrite)
2428 if (
SFS_OK !=
exists(new_name, exists_flag, einfo, client, infoN))
2436 einfo.
setErrInfo(EPERM,
"Overwrite of existing data not permitted");
2437 return fsError(einfo, -EPERM);
2443 if ((retc =
XrdOfsOss->
Rename(old_name, new_name, &old_Env, &new_Env)))
2444 {
return XrdOfsFS->
Emsg(epname, einfo, retc,
"rename", old_name,
"?");
2447 if (Balancer) {Balancer->
Removed(old_name);
2448 Balancer->
Added(new_name);
2493 return XrdOfsFS->
Emsg(epname, einfo, retc,
"locate", path,
"?");
2541 else if ((-ENOMSG) != retc)
2542 return XrdOfsFS->
Emsg(epname, einfo, retc,
"locate", path,
"?");
2582 sprintf(xSz,
"%lld",
static_cast<long long>(Size));
2583 if (Forward(retc,einfo,
fwdTRUNC,path,xSz,&trunc_Env))
return retc;
2602 return XrdOfsFS->
Emsg(epname, einfo, retc,
"trunc", path,
"?");
2617 const char* etP = 0;
2631 rc =
Emsg(pfx, einfo, ecode, op, hP->
Name(), etP);
2659 bool msgDone =
false;
2678 {
case '?': xtra = 0;
2680 {
if (eText.find(
"Unable") != std::string::npos)
2683 }
else xtra = eText.c_str();
2719 if (ecode < 0) ecode = -ecode;
2720 if (ecode == EBUSY)
return 5;
2724 if (ecode == ETIMEDOUT)
return OSSDelay;
2739 const char *XrdOfs::Fname(
const char *path)
2741 int i = strlen(path)-1;
2742 while(i)
if (path[i] ==
'/')
return &path[i+1];
2751 int XrdOfs::Forward(
int &Result,
XrdOucErrInfo &Resp,
struct fwdOpt &Fwd,
2752 const char *arg1,
const char *arg2,
2757 if ((retc =
Finder->
Forward(Resp, Fwd.Cmd, arg1, arg2, Env1, Env2)))
2758 {Result =
fsError(Resp, retc);
2764 return (Fwd.Port ? 0 : 1);
2795 static const char *fmt =
"oss.cgroup=all&oss.space=%llu&oss.free=%llu"
2796 "&oss.maxf=%llu&oss.used=%llu&oss.quota=-1";
2798 unsigned long long totSpace, totFree, maxFree;
2807 n = sscanf(bP,
"%c %llu %llu %llu", &qsFmt, &totSpace, &totFree, &maxFree);
2811 if (n != 4 || qsFmt !=
'A')
2812 {myError.
setErrInfo(ENOTSUP,
"space fctl operation not supported by cmsd");
2818 totSpace = totSpace << 20LL;
2819 totFree = totFree << 20LL;
2820 maxFree = maxFree << 20LL;
2824 blen = snprintf(bP,blen,fmt,totSpace,totFree,maxFree,(totSpace-totFree));
2835 char *
Path,
int Plen)
2838 *Opq = index(Args,
'?');
2839 if (!(*Opq))
return Args;
2841 if (xlen >= Plen) xlen = Plen-1;
2842 strncpy(
Path, Args, xlen);
2855 const char *msgfmt =
"File %s is being %s; "
2856 "estimated time to completion %s";
2861 char Mbuff[2048], Tbuff[32];
2862 const char *What =
"staged";
2866 if (stime < 0) {stime = 60; What =
"created";}
2870 snprintf(Mbuff,
sizeof(Mbuff)-1, msgfmt,
2871 Fname(path), What,
WaitTime(stime, Tbuff,
sizeof(Tbuff)));
2872 ZTRACE(delay,
"Stall " <<stime <<
": " <<Mbuff <<
" for " <<path);
2921 if ((poscNum = oh->
PoscGet(theMode))) poscQ->
Del(oh->
Name(), poscNum, 1);
2944 snprintf(buff,blen,
"%d second%s",sec,(sec > 1 ?
"s" :
""));
2946 {
if (sec > 10) min++;
2947 snprintf(buff,blen,
"%d minute%s",min,(min > 1 ?
"s" :
""));
2951 snprintf(buff,blen,
"%d minutes",min+60);
2952 else snprintf(buff,blen,
"%d hour and %d minutes",hr,min);
2953 else {
if (min > 30) hr++;
2954 snprintf(buff,blen,
"%d hours",hr);
2960 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
int Set(const char *csName)
int Get(char *Buff, int Blen)
virtual int Get(const char *Xfn, XrdCksData &Cks)=0
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 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