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