38#include "XrdVersion.hh"
59 if (config_.tagParam_.isTagFile(path))
return -ENOENT;
61 skipsuffix_ = !config_.tagParam_.hasPrefix();
64 skipprefix_ = config_.tagParam_.matchPrefixDir(path);
67 skipprefixname_ = config_.tagParam_.getPrefixName();
70 return successor_->
Opendir(path, env);
80 if (ret<0)
return ret;
87 if (skipprefixname_ == buff)
continue;
141 std::shared_ptr<XrdOssCsiFile::puMapItem_t> pmi;
163 pmi->unlinked =
true;
166 return (utret == -ENOENT) ? 0 : utret;
178 std::shared_ptr<XrdOssCsiFile::puMapItem_t> newpmi,pmi;
194 if (std::less{}(pmi,newpmi))
196 lck.Lock(&newpmi->mtx);
197 lck2.
Lock(&pmi->mtx);
201 lck2.
Lock(&pmi->mtx);
202 lck.Lock(&newpmi->mtx);
205 if (pmi->unlinked || newpmi->unlinked)
210 return Rename(oldname, newname, old_env, new_env);
223 std::string base = inew;
224 const size_t idx = base.rfind(
"/");
225 base = base.substr(0,idx);
228 const int AMode = S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH;
233 if (mkdret !=
XrdOssOK && mkdret != -EEXIST)
241 const int iret =
successor_->
Rename(iold.c_str(), inew.c_str(), old_env, new_env);
260 newpmi->unlinked =
true;
273 pmi->dpath = newname;
287 std::unique_ptr<XrdOssDF> fp(
newFile(
"xrdt"));
289 int ret = fp->Open(path, O_RDWR, 0, envP ? *envP : myEnv);
294 ret = fp->Ftruncate(size);
305 const char *cgName,
const char *anchor)
329 std::shared_ptr<XrdOssCsiFile::puMapItem_t> pmi;
342 const bool isTrunc = ((Opts>>8)&O_TRUNC) ?
true :
false;
343 const bool isExcl = ((Opts&
XRDOSS_new) || ((Opts>>8)&O_EXCL)) ?
true :
false;
345 if (isTrunc && pmi->pages)
355 const int exflags = isTrunc ? 0 : ((O_EXCL<<8)|
XRDOSS_new);
358 if (ret ==
XrdOssOK || ret == -EEXIST)
361 bool zlen = (ret ==
XrdOssOK) ?
true :
false;
366 if (sbuf.st_size == 0)
376 const int flags = O_RDWR|O_CREAT|O_TRUNC;
379 std::unique_ptr<XrdOucEnv> tagEnv =
tagOpenEnv(config_, env);
388 return (ret==-EEXIST && !isExcl) ?
XrdOssOK : ret;
432 const int oret = fp->Open(path, O_RDONLY, 0, myEnv);
437 const int vs = fp->VerificationStatus();
443 buff->st_rdev |=
static_cast<dev_t
>(vs);
457 const char *config_fn,
474 const char *info = env.
Env(infolen);
475 std::unique_ptr<XrdOucEnv> newEnv(
new XrdOucEnv(info, infolen, env.
secEnv()));
491 newEnv->Put(
"oss.asize", size_str);
495 newEnv->Put(
"oss.asize",
"0");
static XrdSysLogger Logger
XrdOss * XrdOssAddStorageSystem2(XrdOss *curr_oss, XrdSysLogger *Logger, const char *config_fn, const char *parms, XrdOucEnv *envP)
XrdVERSIONINFO(XrdOssAddStorageSystem2, XrdOssCsi) XrdSysError OssCsiEroute(0
XrdOucTrace OssCsiTrace & OssCsiEroute
std::string makeBaseDirname(const char *path)
std::string makeTagFilename(const char *path)
bool isTagFile(const char *path)
std::string xrdtSpaceName() const
int Init(XrdSysError &, const char *, const char *, XrdOucEnv *)
virtual int Opendir(const char *path, XrdOucEnv &env)
virtual int Readdir(char *buff, int blen)
static XrdSysMutex pumtx_
static std::unordered_map< std::string, std::shared_ptr< puMapItem_t > > pumap_
static void mapTake(const std::string &, std::shared_ptr< puMapItem_t > &, bool create=true)
static int mapRelease(std::shared_ptr< puMapItem_t > &, XrdSysMutexHelper *plck=NULL)
virtual int Remdir(const char *path, int Opts=0, XrdOucEnv *eP=0)
virtual int Stat(const char *path, struct stat *buff, int opts=0, XrdOucEnv *EnvP=0)
static std::unique_ptr< XrdOucEnv > tagOpenEnv(const XrdOssCsiConfig &, XrdOucEnv &)
virtual int Unlink(const char *path, int Opts=0, XrdOucEnv *eP=0)
virtual int Reloc(const char *tident, const char *path, const char *cgName, const char *anchor=0)
virtual int Init(XrdSysLogger *lp, const char *cfn)
virtual XrdOssDF * newFile(const char *tident)
virtual int Mkdir(const char *path, mode_t mode, int mkpath=0, XrdOucEnv *envP=0)
virtual int Chmod(const char *path, mode_t mode, XrdOucEnv *envP=0)
virtual int Create(const char *tident, const char *path, mode_t access_mode, XrdOucEnv &env, int Opts=0)
virtual int Truncate(const char *path, unsigned long long size, XrdOucEnv *envP=0)
virtual int StatXA(const char *path, char *buff, int &blen, XrdOucEnv *envP=0)
static XrdScheduler * Sched_
virtual int StatPF(const char *path, struct stat *buff, int opts)
virtual int Rename(const char *oldname, const char *newname, XrdOucEnv *old_env=0, XrdOucEnv *new_env=0)
virtual XrdOssDF * newDir(const char *tident)
virtual int Readdir(char *buff, int blen)
virtual int Mkdir(const char *path, mode_t mode, int mkpath=0, XrdOucEnv *envP=0)=0
static const int PF_dStat
virtual int StatXA(const char *path, char *buff, int &blen, XrdOucEnv *envP=0)
static const int PF_csVer
verified file checksums present
virtual int Create(const char *tid, const char *path, mode_t mode, XrdOucEnv &env, int opts=0)=0
virtual XrdOssDF * newFile(const char *tident)=0
virtual int Reloc(const char *tident, const char *path, const char *cgName, const char *anchor=0)
virtual int Chmod(const char *path, mode_t mode, XrdOucEnv *envP=0)=0
virtual int StatPF(const char *path, struct stat *buff, int opts)
static const int PF_csVun
unverified file checksums present
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 * newDir(const char *tident)=0
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
const XrdSecEntity * secEnv() const
char * Get(const char *varname)
void * GetPtr(const char *varname)
static int a2sz(XrdSysError &, const char *emsg, const char *item, long long *val, long long minv=-1, long long maxv=-1)
void Lock(XrdSysMutex *Mutex)
static const int PageSize