00001 #ifndef __FRMPURGE__
00002 #define __FRMPURGE__
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 #include <time.h>
00034 #include <sys/types.h>
00035
00036 #include "XrdFrm/XrdFrmTSort.hh"
00037 #include "XrdOss/XrdOssSpace.hh"
00038
00039 class XrdFrmFileset;
00040 class XrdOucPolProg;
00041 class XrdOucStream;
00042 class XrdOucTList;
00043
00044 class XrdFrmPurge
00045 {
00046 public:
00047
00048 static void Display();
00049
00050 static int Init(XrdOucTList *sP=0, long long minV=-1, int hVal=-1);
00051
00052 static XrdFrmPurge *Policy(const char *sname) {return Find(sname);}
00053 static XrdFrmPurge *Policy(const char *sname, long long minV, long long maxV,
00054 int hVal, int xVal);
00055
00056 static void Purge();
00057
00058 XrdFrmPurge(const char *snp, XrdFrmPurge *spp=0);
00059 ~XrdFrmPurge() {Clear();}
00060
00061 private:
00062
00063
00064
00065 static void Add(XrdFrmFileset *fsp);
00066 XrdFrmFileset*Advance();
00067 void Clear();
00068 void Defer(XrdFrmFileset *sP, time_t xTime);
00069 const char *Eligible(XrdFrmFileset *sP, time_t &xTime, int hTime=0);
00070 static XrdFrmPurge *Find(const char *snp);
00071 static int LowOnSpace();
00072 int PurgeFile();
00073 int PurgeFile(XrdFrmFileset *fP, const char *pFN);
00074 static void Scan();
00075 static void Stats(int Final);
00076 void Track(XrdFrmFileset *sP);
00077 const char *XPolOK(XrdFrmFileset *sP);
00078 static XrdOucProg *PolProg;
00079 static XrdOucStream *PolStream;
00080
00081
00082
00083 static time_t lastReset;
00084 static time_t nextReset;
00085
00086 static XrdFrmPurge *First;
00087 static XrdFrmPurge *Default;
00088
00089 static int Left2Do;
00090
00091
00092
00093 long long freeSpace;
00094 long long fconMaxsp;
00095 long long usedSpace;
00096 long long pmaxSpace;
00097 long long totlSpace;
00098 long long contSpace;
00099 long long purgBytes;
00100 long long minFSpace;
00101 long long maxFSpace;
00102 char *spaceTotl;
00103 char *spaceTotP;
00104 int spaceTLen;
00105 int spaceTLep;
00106 int Hold;
00107 int Hold2x;
00108 int Ext;
00109 int numFiles;
00110 int prgFiles;
00111 int Enabled;
00112 int Stop;
00113 int SNlen;
00114
00115 XrdFrmPurge *Next;
00116 XrdFrmTSort FSTab;
00117 char SName[XrdOssSpace::minSNbsz];
00118
00119 static const int DeferQsz = 16;
00120 XrdFrmFileset *DeferQ[DeferQsz];
00121 time_t DeferT[DeferQsz];
00122 };
00123 #endif