00001 #ifndef __FRMPURGE__
00002 #define __FRMPURGE__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include <time.h>
00014 #include <sys/types.h>
00015
00016 #include "XrdFrmUtil/XrdFrmTSort.hh"
00017 #include "XrdOss/XrdOssSpace.hh"
00018
00019 class XrdFrmFileset;
00020 class XrdOucPolProg;
00021 class XrdOucStream;
00022 class XrdOucTList;
00023
00024 class XrdFrmPurge
00025 {
00026 public:
00027
00028 static void Display();
00029
00030 static int Init(XrdOucTList *sP=0, long long minV=-1, int hVal=-1);
00031
00032 static XrdFrmPurge *Policy(const char *sname) {return Find(sname);}
00033 static XrdFrmPurge *Policy(const char *sname, long long minV, long long maxV,
00034 int hVal, int xVal);
00035
00036 static void Purge();
00037
00038 XrdFrmPurge(const char *snp, XrdFrmPurge *spp=0);
00039 ~XrdFrmPurge() {Clear();}
00040
00041 private:
00042
00043
00044
00045 static void Add(XrdFrmFileset *fsp);
00046 XrdFrmFileset*Advance();
00047 void Clear();
00048 void Defer(XrdFrmFileset *sP, time_t xTime);
00049 const char *Eligible(XrdFrmFileset *sP, time_t &xTime, int hTime=0);
00050 static XrdFrmPurge *Find(const char *snp);
00051 static int LowOnSpace();
00052 int PurgeFile();
00053 static void Scan();
00054 static void Stats(int Final);
00055 void Track(XrdFrmFileset *sP);
00056 const char *XPolOK(XrdFrmFileset *sP);
00057 static XrdOucProg *PolProg;
00058 static XrdOucStream *PolStream;
00059
00060
00061
00062 static time_t lastReset;
00063 static time_t nextReset;
00064
00065 static XrdFrmPurge *First;
00066 static XrdFrmPurge *Default;
00067
00068 static int Left2Do;
00069
00070
00071
00072 long long freeSpace;
00073 long long fconMaxsp;
00074 long long usedSpace;
00075 long long pmaxSpace;
00076 long long totlSpace;
00077 long long contSpace;
00078 long long purgBytes;
00079 long long minFSpace;
00080 long long maxFSpace;
00081 char *spaceTotl;
00082 char *spaceTotP;
00083 int spaceTLen;
00084 int spaceTLep;
00085 int Hold;
00086 int Hold2x;
00087 int Ext;
00088 int numFiles;
00089 int prgFiles;
00090 int Enabled;
00091 int Stop;
00092 int SNlen;
00093
00094 XrdFrmPurge *Next;
00095 XrdFrmTSort FSTab;
00096 char SName[XrdOssSpace::minSNbsz];
00097
00098 static const int DeferQsz = 16;
00099 XrdFrmFileset *DeferQ[DeferQsz];
00100 time_t DeferT[DeferQsz];
00101 };
00102 #endif