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