#ifndef _XRDOSSWRAPPER_H #define _XRDOSSWRAPPER_H /******************************************************************************/ /* */ /* X r d O s s W r a p p e r . h h */ /* */ /* (c) 2020 by the Board of Trustees of the Leland Stanford, Jr., University */ /* All Rights Reserved */ /* Produced by Andrew Hanushevsky for Stanford University under contract */ /* DE-AC02-76-SFO0515 with the Department of Energy */ /* */ /* This file is part of the XRootD software suite. */ /* */ /* XRootD is free software: you can redistribute it and/or modify it under */ /* the terms of the GNU Lesser General Public License as published by the */ /* Free Software Foundation, either version 3 of the License, or (at your */ /* option) any later version. */ /* */ /* XRootD is distributed in the hope that it will be useful, but WITHOUT */ /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */ /* License for more details. */ /* */ /* You should have received a copy of the GNU Lesser General Public License */ /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */ /* COPYING (GPL license). If not, see . */ /* */ /* The copyright holder's institutional names and contributor's names may not */ /* be used to endorse or promote products derived from this software without */ /* specific prior written permission of the institution or contributor. */ /******************************************************************************/ #include "XrdOss/XrdOss.hh" /******************************************************************************/ //! This class defines a wrapper around the three basic XrdOss classes that //! defines the Oss interface. It is meant to be used by pushed XrdOss plugins //! that wish to intercept certain XrdOss method for an underlying Oss plugin. //! Inheriting this class and providing it the underlying wrapped object //! allows the derived class to easily intercept certain methods while //! allow non-intercepted methods to pass through. /******************************************************************************/ /******************************************************************************/ /* C l a s s X r d O s s W r a p D F */ /******************************************************************************/ //! This class wraps the object that handles directory as well as file //! oriented requests. It is used by the derived class to wrap the object //! obtained by calling newDir() or newFile() in class XrdOss. class XrdOssWrapDF : public XrdOssDF { public: /******************************************************************************/ /* D i r e c t o r y O r i e n t e d M e t h o d s */ /******************************************************************************/ //----------------------------------------------------------------------------- //! Open a directory. //! //! @param path - Pointer to the path of the directory to be opened. //! @param env - Reference to environmental information. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Opendir(const char *path, XrdOucEnv &env) {return wrapDF.Opendir(path, env);} //----------------------------------------------------------------------------- //! Get the next directory entry. //! //! @param buff - Pointer to buffer where a null terminated string of the //! entry name is to be returned. If no more entries exist, //! a null string is returned. //! @param blen - Length of the buffer. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Readdir(char *buff, int blen) {return wrapDF.Readdir(buff, blen);} //----------------------------------------------------------------------------- //! Set the stat() buffer where stat information is to be placed corresponding //! to the directory entry returned by Readdir(). //! //! @param Stat - Pointer to stat structure to be used. //! //! @return 0 upon success or -ENOTSUP if not supported. //! //! @note This is a one-time call as stat structure is reused for each Readdir. //----------------------------------------------------------------------------- virtual int StatRet(struct stat *Stat) {return wrapDF.StatRet(Stat);} /******************************************************************************/ /* F i l e O r i e n t e d M e t h o d s */ /******************************************************************************/ //----------------------------------------------------------------------------- //! Change file mode settings. //! //! @param mode - The new file mode setting. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Fchmod(mode_t mode) {return wrapDF.Fchmod(mode);} //----------------------------------------------------------------------------- //! Flush filesystem cached pages for this file (used for checksums). //----------------------------------------------------------------------------- virtual void Flush() {wrapDF.Flush();} //----------------------------------------------------------------------------- //! Return state information for this file. //! //! @param buf - Pointer to the structure where info it to be returned. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Fstat(struct stat *buf) {return wrapDF.Fstat(buf);} //----------------------------------------------------------------------------- //! Synchronize associated file with media (synchronous). //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Fsync() {return wrapDF.Fsync();} //----------------------------------------------------------------------------- //! Synchronize associated file with media (asynchronous). //! //! @param aiop - Pointer to async I/O request object. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Fsync(XrdSfsAio *aiop) {return wrapDF.Fsync(aiop);} //----------------------------------------------------------------------------- //! Set the size of the associated file. //! //! @param flen - The new size of the file. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Ftruncate(unsigned long long flen) {return wrapDF.Ftruncate(flen);} //----------------------------------------------------------------------------- //! Return the memory mapped characteristics of the file. //! //! @param addr - Pointer to where the memory mapped address is to be returned. //! //! @return If mapped, the size of the file is returned and it memory location //! is placed in addr. Otherwise, addr is set to zero and zero is //! returned. Note that zero length files cannot be memory mapped. //----------------------------------------------------------------------------- virtual off_t getMmap(void **addr) {return wrapDF.getMmap(addr);} //----------------------------------------------------------------------------- //! Return file compression charectistics. //! //! @param cxidp - Pointer to where the compression algorithm name returned. //! //! @return If the file is compressed, the region size if returned. Otherwise, //! zero is returned (file not compressed). //----------------------------------------------------------------------------- virtual int isCompressed(char *cxidp=0) {return wrapDF.isCompressed(cxidp);} //----------------------------------------------------------------------------- //! Open a file. //! //! @param path - Pointer to the path of the file to be opened. //! @param Oflag - Standard open flags. //! @param Mode - File open mode (ignored unless creating a file). //! @param env - Reference to environmental information. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Open(const char *path, int Oflag, mode_t Mode, XrdOucEnv &env) {return wrapDF.Open(path, Oflag, Mode, env);} //----------------------------------------------------------------------------- //! Read file pages into a buffer and return corresponding checksums. //! //! @param buffer - pointer to buffer where the bytes are to be placed. //! @param offset - The offset where the read is to start. It must be //! page aligned. //! @param rdlen - The number of bytes to read. The amount must be an //! integral number of XrdSfsPage::Size bytes. //! @param csvec - A vector of entries to be filled with the cooresponding //! CRC32C checksum for each page. It must be size to //! rdlen/XrdSys::PageSize + (rdlen%XrdSys::PageSize != 0) //! @param opts - Processing options (see below). //! //! @return >= 0 The number of bytes that placed in buffer upon success. //! @return < 0 -errno or -osserr upon failure. (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual ssize_t pgRead (void* buffer, off_t offset, size_t rdlen, uint32_t* csvec, uint64_t opts) {return wrapDF.pgRead(buffer,offset,rdlen,csvec,opts);} //----------------------------------------------------------------------------- //! Read file pages and checksums using asynchronous I/O. //! //! @param aioparm - Pointer to async I/O object controlling the I/O. //! @param opts - Processing options (see above). //! //! @return 0 upon if request started success or -errno or -osserr //! (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int pgRead (XrdSfsAio* aioparm, uint64_t opts) {return wrapDF.pgRead(aioparm, opts);} //----------------------------------------------------------------------------- //! Write file pages into a file with corresponding checksums. //! //! @param buffer - pointer to buffer containing the bytes to write. //! @param offset - The offset where the write is to start. It must be //! page aligned. //! @param wrlen - The number of bytes to write. If amount is not an //! integral number of XrdSys::PageSize bytes, then this must //! be the last write to the file at or above the offset. //! @param csvec - A vector which contains the corresponding CRC32 checksum //! for each page. It must be size to //! wrlen/XrdSys::PageSize + (wrlen%XrdSys::PageSize != 0) //! @param opts - Processing options (see above). //! //! @return >= 0 The number of bytes written upon success. //! or -errno or -osserr upon failure. (see XrdOssError.hh). //! @return < 0 -errno or -osserr upon failure. (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual ssize_t pgWrite(void* buffer, off_t offset, size_t wrlen, uint32_t* csvec, uint64_t opts) {return wrapDF.pgWrite(buffer,offset,wrlen,csvec,opts);} //----------------------------------------------------------------------------- //! Write file pages and checksums using asynchronous I/O. //! //! @param aioparm - Pointer to async I/O object controlling the I/O. //! @param opts - Processing options (see above). //! //! @return 0 upon if request started success or -errno or -osserr //! (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int pgWrite(XrdSfsAio* aioparm, uint64_t opts) {return wrapDF.pgWrite(aioparm, opts);} //----------------------------------------------------------------------------- //! Preread file blocks into the file system cache. //! //! @param offset - The offset where the read is to start. //! @param size - The number of bytes to pre-read. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual ssize_t Read(off_t offset, size_t size) {return wrapDF.Read(offset, size);} //----------------------------------------------------------------------------- //! Read file bytes into a buffer. //! //! @param buffer - pointer to buffer where the bytes are to be placed. //! @param offset - The offset where the read is to start. //! @param size - The number of bytes to read. //! //! @return >= 0 The number of bytes that placed in buffer. //! @return < 0 -errno or -osserr upon failure (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual ssize_t Read(void *buffer, off_t offset, size_t size) {return wrapDF.Read(buffer, offset, size);} //----------------------------------------------------------------------------- //! Read file bytes using asynchronous I/O. //! //! @param aiop - Pointer to async I/O object controlling the I/O. //! //! @return 0 upon if request started success or -errno or -osserr //! (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Read(XrdSfsAio *aiop) {return wrapDF.Read(aiop);} //----------------------------------------------------------------------------- //! Read uncompressed file bytes into a buffer. //! //! @param buffer - pointer to buffer where the bytes are to be placed. //! @param offset - The offset where the read is to start. //! @param size - The number of bytes to read. //! //! @return >= 0 The number of bytes that placed in buffer. //! @return < 0 -errno or -osserr upon failure (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual ssize_t ReadRaw(void *buffer, off_t offset, size_t size) {return wrapDF.ReadRaw(buffer, offset, size);} //----------------------------------------------------------------------------- //! Read file bytes as directed by the read vector. //! //! @param readV pointer to the array of read requests. //! @param rdvcnt the number of elements in readV. //! //! @return >=0 The numbe of bytes read. //! @return < 0 -errno or -osserr upon failure (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual ssize_t ReadV(XrdOucIOVec *readV, int rdvcnt) {return wrapDF.ReadV(readV, rdvcnt);} //----------------------------------------------------------------------------- //! Write file bytes from a buffer. //! //! @param buffer - pointer to buffer where the bytes reside. //! @param offset - The offset where the write is to start. //! @param size - The number of bytes to write. //! //! @return >= 0 The number of bytes that were written. //! @return < 0 -errno or -osserr upon failure (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual ssize_t Write(const void *buffer, off_t offset, size_t size) {return wrapDF.Write(buffer, offset, size);} //----------------------------------------------------------------------------- //! Write file bytes using asynchronous I/O. //! //! @param aiop - Pointer to async I/O object controlling the I/O. //! //! @return 0 upon if request started success or -errno or -osserr //! (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Write(XrdSfsAio *aiop) {return wrapDF.Write(aiop);} //----------------------------------------------------------------------------- //! Write file bytes as directed by the write vector. //! //! @param writeV pointer to the array of write requests. //! @param wrvcnt the number of elements in writeV. //! //! @return >=0 The numbe of bytes read. //! @return < 0 -errno or -osserr upon failure (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual ssize_t WriteV(XrdOucIOVec *writeV, int wrvcnt) {return wrapDF.WriteV(writeV, wrvcnt);} /******************************************************************************/ /* C o m m o n D i r e c t o r y a n d F i l e M e t h o d s */ /******************************************************************************/ //----------------------------------------------------------------------------- //! Close a directory or file. //! //! @param retsz If not nil, where the size of the file is to be returned. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Close(long long *retsz=0) {return wrapDF.Close(retsz);} //----------------------------------------------------------------------------- //! Return the underlying object type. //! //! @return Type of object. //----------------------------------------------------------------------------- uint16_t DFType() {return wrapDF.DFType();} //----------------------------------------------------------------------------- //! Execute a special operation on the directory or file. //! //! @param cmd - The operation to be performed: //! Fctl_ckpObj - Obtain checkpoint object for proxy file. //! Argument: None. //! Response: Pointer to XrdOucChkPnt object. //! Fctl_utimes - Set atime and mtime (no response). //! Argument: struct timeval tv[2] //! @param alen - Length of data pointed to by args. //! @param args - Data sent with request, zero if alen is zero. //! @param resp - Where the response is to be set. The caller must call //! delete on the returned object. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Fctl(int cmd, int alen, const char *args, char **resp=0) {return wrapDF.Fctl(cmd, alen, args, resp);} //----------------------------------------------------------------------------- //! Return the underlying file descriptor. //! //! @return -1 if there is no file descriptor or a non-negative FD number. //----------------------------------------------------------------------------- virtual int getFD() {return wrapDF.getFD();} //----------------------------------------------------------------------------- //! Return trace identifier associated with this object. //! //! @return Pointer to trace identifier //----------------------------------------------------------------------------- virtual const char *getTID() {return wrapDF.getTID();} //----------------------------------------------------------------------------- //! Constructor and Destructor //! //! @param df2Wrap- Reference to the newFile or newDir object being wrapped. //! //! @note: The object creator is responsible for deleting the df2Wrap object. //! The ref to this object is stored here and is accessible. //----------------------------------------------------------------------------- XrdOssWrapDF(XrdOssDF &df2Wrap) : wrapDF(df2Wrap) {} virtual ~XrdOssWrapDF() {} protected: XrdOssDF &wrapDF; // Object being wrapped }; /******************************************************************************/ /* C l a s s X r d O s s W r a p p e r */ /******************************************************************************/ class XrdOssWrapper : public XrdOss { public: //----------------------------------------------------------------------------- //! Obtain a new director object to be used for future directory requests. //! //! @param tident - The trace identifier. //! //! @return pointer- Pointer to a possibly wrapped XrdOssDF object. //! @return nil - Insufficient memory to allocate an object. //----------------------------------------------------------------------------- virtual XrdOssDF *newDir(const char *tident) {return wrapPI.newDir(tident);} //----------------------------------------------------------------------------- //! Obtain a new file object to be used for a future file requests. //! //! @param tident - The trace identifier. //! //! @return pointer- Pointer to a possibly wrapped XrdOssDF object. //! @return nil - Insufficient memory to allocate an object. //----------------------------------------------------------------------------- virtual XrdOssDF *newFile(const char *tident) {return wrapPI.newFile(tident);} //----------------------------------------------------------------------------- //! Change file mode settings. //! //! @param path - Pointer to the path of the file in question. //! @param mode - The new file mode setting. //! @param envP - Pointer to environmental information. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Chmod(const char * path, mode_t mode, XrdOucEnv *envP=0) {return wrapPI.Chmod(path, mode, envP);} //----------------------------------------------------------------------------- //! Notify storage system that a client has connected. //! //! @param env - Reference to environmental information. //----------------------------------------------------------------------------- virtual void Connect(XrdOucEnv &env) {wrapPI.Connect(env);} //----------------------------------------------------------------------------- //! Create file. //! //! @param tid - Pointer to the trace identifier. //! @param path - Pointer to the path of the file to create. //! @param mode - The new file mode setting. //! @param env - Reference to environmental information. //! @param opts - Create options: //! XRDOSS_mkpath - create dir path if it does not exist. //! XRDOSS_new - the file must not already exist. //! oflags<<8 - open flags shifted 8 bits to the left/ //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Create(const char *tid, const char *path, mode_t mode, XrdOucEnv &env, int opts=0) {return wrapPI.Create(tid, path, mode, env);} //----------------------------------------------------------------------------- //! Notify storage system that a client has disconnected. //! //! @param env - Reference to environmental information. //----------------------------------------------------------------------------- virtual void Disc(XrdOucEnv &env) {wrapPI.Disc(env);} //----------------------------------------------------------------------------- //! Notify storage system of initialization information (deprecated). //! //! @param envP - Pointer to environmental information. //----------------------------------------------------------------------------- virtual void EnvInfo(XrdOucEnv *envP) {wrapPI.EnvInfo(envP);} //----------------------------------------------------------------------------- //! Return storage system features. //! //! @return Storage system features (see XRDOSS_HASxxx flags). //----------------------------------------------------------------------------- virtual uint64_t Features() {return wrapPI.Features();} //----------------------------------------------------------------------------- //! Execute a special storage system operation. //! //! @param cmd - The operation to be performed: //! XRDOSS_FSCTLFA - Perform proxy file attribute operation //! @param alen - Length of data pointed to by args. //! @param args - Data sent with request, zero if alen is zero. //! @param resp - Where the response is to be set, if any. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int FSctl(int cmd, int alen, const char *args, char **resp=0) {return wrapPI.FSctl(cmd, alen, args, resp);} //----------------------------------------------------------------------------- //! Initialize the storage system V1 (deprecated). //! //! @param lp - Pointer to the message logging object. //! @param cfn - Pointer to the configuration file. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Init(XrdSysLogger *lp, const char *cfn) {return wrapPI.Init(lp, cfn);} //----------------------------------------------------------------------------- //! Initialize the storage system V2. //! //! @param lp - Pointer to the message logging object. //! @param cfn - Pointer to the configuration file. //! @param envP - Pointer to environmental information. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Init(XrdSysLogger *lp, const char *cfn, XrdOucEnv *envP) {return wrapPI.Init(lp, cfn, envP);} //----------------------------------------------------------------------------- //! Create a directory. //! //! @param path - Pointer to the path of the directory to be created. //! @param mode - The directory mode setting. //! @param mkpath - When true the path is created if it does not exist. //! @param envP - Pointer to environmental information. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Mkdir(const char *path, mode_t mode, int mkpath=0, XrdOucEnv *envP=0) {return wrapPI.Mkdir(path, mode, mkpath, envP);} //----------------------------------------------------------------------------- //! Relocate/Copy the file at `path' to a new location. //! //! @param tident - -> trace identifier for this operation. //! @param path - -> fully qualified name of the file to relocate. //! @param cgName - -> target space name[:path] //! @param anchor - Processing directions (see XrdOssReloc.cc example). //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Reloc(const char *tident, const char *path, const char *cgName, const char *anchor=0) {return wrapPI.Reloc(tident,path,cgName,anchor);} //----------------------------------------------------------------------------- //! Remove a directory. //! //! @param path - Pointer to the path of the directory to be removed. //! @param Opts - The processing options: //! XRDOSS_Online - only remove online copy //! XRDOSS_isPFN - path is already translated. //! @param envP - Pointer to environmental information. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Remdir(const char *path, int Opts=0, XrdOucEnv *envP=0) {return wrapPI.Remdir(path, Opts, envP);} //----------------------------------------------------------------------------- //! Rename a file or directory. //! //! @param oPath - Pointer to the path to be renamed. //! @param nPath - Pointer to the path oPath is to have. //! @param oEnvP - Environmental information for oPath. //! @param nEnvP - Environmental information for nPath. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Rename(const char *oPath, const char *nPath, XrdOucEnv *oEnvP=0, XrdOucEnv *nEnvP=0) {return wrapPI.Rename(oPath, nPath, oEnvP, nEnvP);} //----------------------------------------------------------------------------- //! Return state information on a file or directory. //! //! @param path - Pointer to the path in question. //! @param buff - Pointer to the structure where info it to be returned. //! @param opts - Options: //! XRDOSS_preop - this is a stat prior to open. //! XRDOSS_resonly - only look for resident files. //! XRDOSS_updtatm - update file access time. //! @param envP - Pointer to environmental information. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Stat(const char *path, struct stat *buff, int opts=0, XrdOucEnv *envP=0) {return wrapPI.Stat(path, buff, opts, envP);} //----------------------------------------------------------------------------- //! Return statistics. //! //! @param buff - Pointer to the buffer to hold statistics. //! @param blen - Length of the buffer. //! //! @return The number of bytes placed in the buffer excluding null byte. //----------------------------------------------------------------------------- virtual int Stats(char *buff, int blen) {return wrapPI.Stats(buff, blen);} //----------------------------------------------------------------------------- //! Return filesystem physical space information associated with a path. //! //! @param path - Path in the partition in question. //! @param buff - Pointer to the buffer to hold the information. //! @param blen - Length of the buffer. This is updated with the actual //! number of bytes placed in the buffer as in snprintf(). //! @param envP - Pointer to environmental information. //! //! @return " " //! where: is "0" if XRDEXP_NOTRW specified, otherwise "1" //! is free space in megabytes. //! is percentage utilization (i.e. allocated space) //! is "1' if XRDEXP_STAGE specified, otherwise "0" //! Upon failure -errno or -osserr (see XrdOssError.hh) returned. //----------------------------------------------------------------------------- virtual int StatFS(const char *path, char *buff, int &blen, XrdOucEnv *envP=0) {return wrapPI.StatFS(path, buff, blen, envP);} //----------------------------------------------------------------------------- //! Return filesystem physical space information associated with a space name. //! //! @param env - Ref to environmental information. If the environment //! has the key oss.cgroup defined, the associated value is //! used as the space name and the path is ignored. //! @param path - Path in the name space in question. The space name //! associated with gthe path is used unless overridden. //! @param buff - Pointer to the buffer to hold the information. //! @param blen - Length of the buffer. This is updated with the actual //! number of bytes placed in the buffer as in snprintf(). //! //! @return "oss.cgroup=&oss.space=&oss.free= //! &oss.maxf=&oss.used= //! &oss.quota=" in buff upon success. //! Upon failure -errno or -osserr (see XrdOssError.hh) returned. //----------------------------------------------------------------------------- virtual int StatLS(XrdOucEnv &env, const char *path, char *buff, int &blen) {return wrapPI.StatLS(env, path, buff, blen);} //----------------------------------------------------------------------------- //! Return state information on a resident physical file or directory. //! //! @param path - Pointer to the path in question. //! @param buff - Pointer to the structure where info it to be returned. //! @param opts - Options: //! PF_dInfo - provide bdevID in st_rdev and partID in st_dev //! based on path. If path is nil then the contents //! of the of buff is used as the input source. //! PF_dNums - provide number of bdev's in st_rdev and the //! number of partitions in st_dev. The path //! argument is ignored. This superceeds PF_dInfo. //! PF_dStat - provide file state flags in st_rdev as shown //! below. Path may not be nil. This supercedes //! PF_dInfo and PF_dNums. //! PF_isLFN - Do N2N translation on path (default is none). //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int StatPF(const char *path, struct stat *buff, int opts) {return wrapPI.StatPF(path, buff, opts);} virtual int StatPF(const char *path, struct stat *buff) {return wrapPI.StatPF(path, buff);} //----------------------------------------------------------------------------- //! Return space information for a space name. //! //! @param vsP - Pointer to the XrdOssVSInfo object to hold results. //! It should be fully initialized (i.e. a new copy). //! @param sname - Pointer to the space name. If the name starts with a //! plus (e.g. "+public"), partition information is //! returned, should it exist. If nil, space information for //! all spaces is returned. See, XrdOssVS.hh for more info. //! @param updt - When true, a space update occurrs prior to a query. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int StatVS(XrdOssVSInfo *vsP, const char *sname=0, int updt=0) {return wrapPI.StatVS(vsP, sname, updt);} //----------------------------------------------------------------------------- //! Return logical extended attributes associated with a path. //! //! @param path - Path in whose information is wanted. //! @param buff - Pointer to the buffer to hold the information. //! @param blen - Length of the buffer. This is updated with the actual //! number of bytes placed in the buffer as in snprintf(). //! @param envP - Pointer to environmental information. //! //! @return "oss.cgroup=&oss.type={'f'|'d'|'o'}&oss.used= //! &oss.mt=&oss.ct=&oss.at=&oss.u=*&oss.g=* //! &oss.fs={'w'|'r'}" //! Upon failure -errno or -osserr (see XrdOssError.hh) returned. //----------------------------------------------------------------------------- virtual int StatXA(const char *path, char *buff, int &blen, XrdOucEnv *envP=0) {return wrapPI.StatXA(path, buff, blen, envP);} //----------------------------------------------------------------------------- //! Return export attributes associated with a path. //! //! @param path - Path in whose information is wanted. //! @param attr - Reference to where the inforamation is to be stored. //! @param envP - Pointer to environmental information. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int StatXP(const char *path, unsigned long long &attr, XrdOucEnv *envP=0) {return wrapPI.StatXP(path, attr, envP);} //----------------------------------------------------------------------------- //! Truncate a file. //! //! @param path - Pointer to the path of the file to be truncated. //! @param fsize - The size that the file is to have. //! @param envP - Pointer to environmental information. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Truncate(const char *path, unsigned long long fsize, XrdOucEnv *envP=0) {return wrapPI.Truncate(path, fsize, envP);} //----------------------------------------------------------------------------- //! Remove a file. //! //! @param path - Pointer to the path of the file to be removed. //! @param Opts - Options: //! XRDOSS_isMIG - this is a migratable path. //! XRDOSS_isPFN - do not apply name2name to path. //! XRDOSS_Online - remove only the online copy. //! @param envP - Pointer to environmental information. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Unlink(const char *path, int Opts=0, XrdOucEnv *envP=0) {return wrapPI.Unlink(path, Opts, envP);} // Default Name-to-Name Methods //----------------------------------------------------------------------------- //! Translate logical name to physical name V1 (deprecated). //! //! @param Path - Path in whose information is wanted. //! @param buff - Pointer to the buffer to hold the new path. //! @param blen - Length of the buffer. //! //! @return 0 upon success or -errno or -osserr (see XrdOssError.hh). //----------------------------------------------------------------------------- virtual int Lfn2Pfn(const char *Path, char *buff, int blen) {return wrapPI.Lfn2Pfn(Path, buff, blen);} //----------------------------------------------------------------------------- //! Translate logical name to physical name V2. //! //! @param Path - Path in whose information is wanted. //! @param buff - Pointer to the buffer to hold the new path. //! @param blen - Length of the buffer. //! @param rc - Place where failure return code is to be returned: //! -errno or -osserr (see XrdOssError.hh). //! //! @return Pointer to the translated path upon success or nil on failure. //----------------------------------------------------------------------------- virtual const char *Lfn2Pfn(const char *Path, char *buff, int blen, int &rc) {return wrapPI.Lfn2Pfn(Path, buff, blen, rc);} //----------------------------------------------------------------------------- //! Constructor and Destructor. //! //! @param ossRef - Reference to the Oss object being wrapped. //! //! @note: The object creator is responsible for deleting the ossRef object. //! The ref to this object is stored here and is accessible. //----------------------------------------------------------------------------- XrdOssWrapper(XrdOss &ossRef) : wrapPI(ossRef) {} virtual ~XrdOssWrapper() {} protected: XrdOss &wrapPI; }; #endif