00001 #ifndef _XRDOSS_H
00002 #define _XRDOSS_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include <dirent.h>
00014 #include <errno.h>
00015 #include <strings.h>
00016 #include <sys/stat.h>
00017 #include <sys/types.h>
00018 #include <string.h>
00019
00020 class XrdOucEnv;
00021 class XrdSysLogger;
00022 class XrdSfsAio;
00023
00024 #ifndef XrdOssOK
00025 #define XrdOssOK 0
00026 #endif
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 class XrdOssDF
00038 {
00039 public:
00040
00041 virtual int Opendir(const char *) {return -ENOTDIR;}
00042 virtual int Readdir(char *buff, int blen) {return -ENOTDIR;}
00043
00044
00045 virtual int Fchmod(mode_t mode) {return -EISDIR;}
00046 virtual int Fstat(struct stat *) {return -EISDIR;}
00047 virtual int Fsync() {return -EISDIR;}
00048 virtual int Fsync(XrdSfsAio *aiop) {return -EISDIR;}
00049 virtual int Ftruncate(unsigned long long) {return -EISDIR;}
00050 virtual int getFD() {return -1;}
00051 virtual off_t getMmap(void **addr) {return 0;}
00052 virtual int isCompressed(char *cxidp=0) {return -EISDIR;}
00053 virtual int Open(const char *, int, mode_t, XrdOucEnv &) {return -EISDIR;}
00054 virtual ssize_t Read(off_t, size_t) {return (ssize_t)-EISDIR;}
00055 virtual ssize_t Read(void *, off_t, size_t) {return (ssize_t)-EISDIR;}
00056 virtual int Read(XrdSfsAio *aoip) {return (ssize_t)-EISDIR;}
00057 virtual ssize_t ReadRaw( void *, off_t, size_t) {return (ssize_t)-EISDIR;}
00058 virtual ssize_t Write(const void *, off_t, size_t) {return (ssize_t)-EISDIR;}
00059 virtual int Write(XrdSfsAio *aiop) {return (ssize_t)-EISDIR;}
00060
00061
00062 virtual int Close(long long *retsz=0)=0;
00063 inline int Handle() {return fd;}
00064
00065 XrdOssDF() {fd = -1;}
00066 virtual ~XrdOssDF() {}
00067
00068 protected:
00069
00070 int fd;
00071 };
00072
00073
00074
00075
00076
00077
00078
00079 #define XRDOSS_mkpath 0x01
00080 #define XRDOSS_new 0x02
00081 #define XRDOSS_Online 0x04
00082 #define XRDOSS_isPFN 0x10
00083 #define XRDOSS_isMIG 0x20
00084 #define XRDOSS_setnoxa 0x40
00085
00086
00087
00088 #define XRDOSS_resonly 0x01
00089 #define XRDOSS_updtatm 0x02
00090
00091
00092
00093 class XrdOssVSInfo
00094 {
00095 public:
00096 long long Total;
00097 long long Free;
00098 long long Large;
00099 long long LFree;
00100 long long Usage;
00101 long long Quota;
00102 int Extents;
00103 int Reserved;
00104
00105 XrdOssVSInfo() : Total(0),Free(0),Large(0),LFree(0),Usage(-1),
00106 Quota(-1),Extents(0),Reserved(0) {}
00107 ~XrdOssVSInfo() {}
00108 };
00109
00110 class XrdOss
00111 {
00112 public:
00113 virtual XrdOssDF *newDir(const char *tident)=0;
00114 virtual XrdOssDF *newFile(const char *tident)=0;
00115
00116 virtual int Chmod(const char *, mode_t mode)=0;
00117 virtual int Create(const char *, const char *, mode_t, XrdOucEnv &,
00118 int opts=0)=0;
00119 virtual int Init(XrdSysLogger *, const char *)=0;
00120 virtual int Mkdir(const char *, mode_t mode, int mkpath=0)=0;
00121 virtual int Reloc(const char *, const char *, const char *, const char *x=0)
00122 {return -ENOTSUP;}
00123 virtual int Remdir(const char *, int Opts=0)=0;
00124 virtual int Rename(const char *, const char *)=0;
00125 virtual int Stat(const char *, struct stat *, int opts=0)=0;
00126 virtual int StatFS(const char *path, char *buff, int &blen)
00127 {return -ENOTSUP;}
00128 virtual int StatLS(XrdOucEnv &env, const char *cgrp, char *buff, int &blen)
00129 {return -ENOTSUP;}
00130 virtual int StatXA(const char *path, char *buff, int &blen)
00131 {return -ENOTSUP;}
00132 virtual int StatXP(const char *path, unsigned long long &attr)
00133 {return -ENOTSUP;}
00134 virtual int Truncate(const char *, unsigned long long)=0;
00135 virtual int Unlink(const char *, int Opts=0)=0;
00136
00137 virtual int Stats(char *bp, int bl) {return 0;}
00138
00139 virtual int StatVS(XrdOssVSInfo *sP, const char *sname=0, int updt=0)
00140 {return -ENOTSUP;}
00141
00142 virtual int Lfn2Pfn(const char *Path, char *buff, int blen)
00143 {if ((int)strlen(Path) >= blen) return -ENAMETOOLONG;
00144 strcpy(buff, Path); return 0;
00145 }
00146
00147 XrdOss() {}
00148 virtual ~XrdOss() {}
00149 };
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163 extern "C"
00164 {
00165 XrdOss *XrdOssGetStorageSystem(XrdOss *native_oss,
00166 XrdSysLogger *Logger,
00167 const char *config_fn,
00168 const char *parms);
00169 }
00170 #endif