00001 #ifndef _OSS_SPACE_H
00002 #define _OSS_SPACE_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 class XrdSysError;
00034
00035 class XrdOssSpace
00036 {
00037 public:
00038 friend class XrdOssCache;
00039
00040 enum sType {Serv = 0, Pstg = 1, Purg = 2, Admin = 3,
00041 RsvA = 4, RsvB = 5, RsvC = 6, addT = 7,
00042 Totn = 8};
00043
00044 static const int maxSNlen = 63;
00045 static const int minSNbsz = 64;
00046
00047 static void Adjust(int Gent, off_t Space, sType=Serv);
00048
00049 static void Adjust(const char *GName, off_t Space, sType=Serv);
00050
00051 static const int haveUsage = 1;
00052 static const int haveQuota = 2;
00053
00054 static int Init();
00055
00056 static int Init(const char *aPath,const char *qFile,int isSOL,int us=0);
00057
00058 static int Quotas();
00059
00060 static int Unassign(const char *GName);
00061
00062 static long long Usage(int gent);
00063
00064 struct uEnt {char gName[minSNbsz];
00065 long long Bytes[Totn];
00066 };
00067
00068 static long long Usage(const char *GName, struct uEnt &uVal, int rrd=0);
00069
00070 XrdOssSpace() {}
00071 ~XrdOssSpace() {}
00072
00073 private:
00074
00075 static int Assign(const char *GName, long long &bytesUsed);
00076 static int findEnt(const char *GName);
00077 static int Readjust();
00078 static int Readjust(int);
00079 static int UsageLock(int Dolock=1);
00080
00081 static const int ULen = sizeof(long long);
00082 static const int DataSz = 16384;
00083 static const int maxEnt = DataSz/sizeof(uEnt);
00084
00085 static const char *qFname;
00086 static const char *uFname;
00087 static const char *uUname;
00088 static uEnt uData[maxEnt];
00089 static short uDvec[maxEnt];
00090 static time_t lastMtime;
00091 static time_t lastUtime;
00092 static int fencEnt;
00093 static int freeEnt;
00094 static int aFD;
00095 static int uSync;
00096 static int uAdj;
00097 static int Solitary;
00098 };
00099 #endif