38 #include "XrdVersion.hh"
43 #include <sys/types.h>
58 if (config_.tagParam_.isTagFile(path))
return -ENOENT;
60 skipsuffix_ = !config_.tagParam_.hasPrefix();
63 skipprefix_ = config_.tagParam_.matchPrefixDir(path);
66 skipprefixname_ = config_.tagParam_.getPrefixName();
69 return successor_->
Opendir(path, env);
79 if (ret<0)
return ret;
86 if (skipprefixname_ == buff)
continue;
140 std::shared_ptr<XrdOssCsiFile::puMapItem_t> pmi;
162 pmi->unlinked =
true;
165 return (utret == -ENOENT) ? 0 : utret;
177 std::shared_ptr<XrdOssCsiFile::puMapItem_t> newpmi,pmi;
193 lck.Lock(&newpmi->mtx);
194 lck2.
Lock(&pmi->mtx);
198 lck2.
Lock(&pmi->mtx);
199 lck.Lock(&newpmi->mtx);
202 if (pmi->unlinked || newpmi->unlinked)
207 return Rename(oldname, newname, old_env, new_env);
220 std::string base = inew;
221 const size_t idx = base.rfind(
"/");
222 base = base.substr(0,idx);
225 const int AMode = S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH;
230 if (mkdret !=
XrdOssOK && mkdret != -EEXIST)
238 const int iret =
successor_->
Rename(iold.c_str(), inew.c_str(), old_env, new_env);
257 newpmi->unlinked =
true;
270 pmi->dpath = newname;
284 std::unique_ptr<XrdOssDF> fp(
newFile(
"xrdt"));
286 int ret = fp->Open(path, O_RDWR, 0,
envP ? *
envP : myEnv);
291 ret = fp->Ftruncate(size);
302 const char *cgName,
const char *anchor)
326 std::shared_ptr<XrdOssCsiFile::puMapItem_t> pmi;
339 const bool isTrunc = ((
Opts>>8)&O_TRUNC) ? true :
false;
342 if (isTrunc && pmi->pages)
352 const int exflags = isTrunc ? 0 : ((O_EXCL<<8)|
XRDOSS_new);
355 if (ret ==
XrdOssOK || ret == -EEXIST)
358 bool zlen = (ret ==
XrdOssOK) ?
true :
false;
363 if (sbuf.st_size == 0)
373 const int flags = O_RDWR|O_CREAT|O_TRUNC;
376 std::unique_ptr<XrdOucEnv> tagEnv =
tagOpenEnv(config_, env);
385 return (ret==-EEXIST && !isExcl) ?
XrdOssOK : ret;
429 const int oret = fp->Open(path, O_RDONLY, 0, myEnv);
434 const int vs = fp->VerificationStatus();
440 buff->st_rdev |=
static_cast<dev_t
>(vs);
454 const char *config_fn,
471 const char *info = env.
Env(infolen);
472 std::unique_ptr<XrdOucEnv> newEnv(
new XrdOucEnv(info, infolen, env.
secEnv()));
488 newEnv->Put(
"oss.asize", size_str);
492 newEnv->Put(
"oss.asize",
"0");
XrdVERSIONINFO(XrdOssAddStorageSystem2, XrdOssCsi) XrdSysError OssCsiEroute(0
XrdOucTrace OssCsiTrace & OssCsiEroute
XrdOss * XrdOssAddStorageSystem2(XrdOss *curr_oss, XrdSysLogger *Logger, const char *config_fn, const char *parms, XrdOucEnv *envP)
int stat(const char *path, struct stat *buf)
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 * newDir(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 * newFile(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
void * GetPtr(const char *varname)
char * Get(const char *varname)
const XrdSecEntity * secEnv() const
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