00001 #ifndef __FRMADMIN__HH
00002 #define __FRMADMIN__HH
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include <stdlib.h>
00014 #include <sys/types.h>
00015
00016 #include "XrdOuc/XrdOucNSWalk.hh"
00017
00018 class XrdFrmFileset;
00019 class XrdFrmProxy;
00020 class XrdOucArgs;
00021 class XrdOucTList;
00022
00023 class XrdFrmAdmin
00024 {
00025 public:
00026
00027 int Audit();
00028
00029 int Copy();
00030
00031 int Create();
00032
00033 int Find();
00034
00035 int Help();
00036
00037 int MakeLF();
00038
00039 int Mark();
00040
00041 int Mmap();
00042
00043 int Pin();
00044
00045 int Query();
00046
00047 int Quit() {exit(finalRC); return 0;}
00048
00049 int Reloc();
00050
00051 int Remove();
00052
00053 int Rename();
00054
00055 void setArgs(int argc, char **argv);
00056
00057 void setArgs(char *argv);
00058
00059 int xeqArgs(char *Cmd);
00060
00061 XrdFrmAdmin() : frmProxy(0), frmProxz(0), finalRC(0) {}
00062 ~XrdFrmAdmin() {}
00063
00064 private:
00065 int AuditNameNB(XrdFrmFileset *sP);
00066 int AuditNameNF(XrdFrmFileset *sP);
00067 int AuditNameNL(XrdFrmFileset *sP);
00068 int AuditNames();
00069 int AuditNameXA(XrdFrmFileset *sP);
00070 int AuditNameXB(XrdFrmFileset *sP);
00071 int AuditNameXL(XrdFrmFileset *sP, int dorm);
00072 int AuditRemove(XrdFrmFileset *sP);
00073 int AuditSpace();
00074 int AuditSpaceAX(const char *Path);
00075 int AuditSpaceAXDB(const char *Path);
00076 int AuditSpaceAXDC(const char *Path, XrdOucNSWalk::NSEnt *nP);
00077 int AuditSpaceAXDL(int dorm, const char *Path, const char *Dest);
00078 int AuditSpaceXA(const char *Space, const char *Path);
00079 int AuditSpaceXA(XrdFrmFileset *sP);
00080 int AuditSpaceXB(const char *Space, const char *Path);
00081 int AuditSpaceXANB(XrdFrmFileset *sP);
00082 int AuditUsage();
00083 int AuditUsage(char *Space);
00084 int AuditUsageAX(const char *Path);
00085 int AuditUsageXA(const char *Path, const char *Space);
00086 int isXA(XrdOucNSWalk::NSEnt *nP);
00087
00088 int FindFail(XrdOucArgs &Spec);
00089 int FindMmap(XrdOucArgs &Spec);
00090 int FindNolk(XrdOucArgs &Spec);
00091 int FindPins(XrdOucArgs &Spec);
00092 int FindPins(XrdFrmFileset *sP);
00093 int FindUnmi(XrdOucArgs &Spec);
00094
00095 void ConfigProxy();
00096
00097 void Emsg(const char *tx1, const char *tx2=0, const char *tx3=0,
00098 const char *tx4=0, const char *tx5=0);
00099 void Emsg(int Enum, const char *tx2=0, const char *tx3=0,
00100 const char *tx4=0, const char *tx5=0);
00101 void Msg(const char *tx1, const char *tx2=0, const char *tx3=0,
00102 const char *tx4=0, const char *tx5=0);
00103
00104 int Parse(const char *What, XrdOucArgs &Spec, const char **Reqs);
00105 int ParseKeep(const char *What, const char *kTime);
00106 int ParseOwner(const char *What, char *Uname);
00107 XrdOucTList *ParseSpace(char *Space, char **Path);
00108
00109 char ckAttr(int What, const char *Lfn, char *Pfn, int Pfnsz);
00110 int mkLock(const char *Lfn);
00111 int mkFile(int What, const char *Path, const char *Data=0, int Dlen=0);
00112 int mkMark(const char *Lfn);
00113 int mkMmap(const char *Lfn);
00114 int mkPin(const char *Lfn);
00115 char mkStat(int What, const char *Lfn, char *Pfn, int Pfnsz);
00116
00117
00118
00119 static const int isPFN= 0x0001;
00120 static const int mkLF = 0x0002;
00121 static const int mkMF = 0x0004;
00122 static const int mkPF = 0x0008;
00123
00124 int QueryPfn(XrdOucArgs &Spec);
00125 int QueryRfn(XrdOucArgs &Spec);
00126 int QuerySpace(XrdOucArgs &Spec);
00127 int QuerySpace(const char *Pfn, char *Lnk=0, int Lsz=0);
00128 int QueryUsage(XrdOucArgs &Spec);
00129 int QueryXfrQ(XrdOucArgs &Spec);
00130
00131 int Reloc(char *srcLfn, char *Space);
00132 int RelocCP(const char *srcpfn, const char *trgpfn, off_t srcSz);
00133 int RelocWR(const char *outFn, int oFD, char *Buff, size_t BLen, off_t Boff);
00134
00135 int Unlink(const char *Path);
00136 int UnlinkDir(const char *Path, const char *lclPath);
00137 int UnlinkDir(XrdOucNSWalk::NSEnt *&nP, XrdOucNSWalk::NSEnt *&dP);
00138 int UnlinkFile(const char *lclPath);
00139
00140 int VerifyAll(char *path);
00141 char VerifyMP(const char *func, const char *path);
00142
00143
00144
00145 int Convert();
00146 int ConvTest(int doNames, int doSpaces);
00147 int New2Old(int doNames, int doSpaces);
00148 int Old2New(int doNames, int doSpaces);
00149 int o2nFiles(XrdFrmFileset *sP, int &numOld);
00150 int o2nSpace(XrdFrmFileset *sP, const char *Space);
00151 XrdOucTList *x2xPaths();
00152 int x2xRemove(const char *Type, const char *Path, int cvt=0);
00153 XrdOucTList *x2xSpaces();
00154
00155 static const char *AuditHelp;
00156 static const char *FindHelp;
00157 static const char *HelpHelp;
00158 static const char *MakeLFHelp;
00159 static const char *MarkHelp;
00160 static const char *MmapHelp;
00161 static const char *PinHelp;
00162 static const char *QueryHelp;
00163 static const char *RelocHelp;
00164 static const char *RemoveHelp;
00165
00166
00167
00168 XrdFrmProxy *frmProxy;
00169 int frmProxz;
00170
00171
00172
00173 char **ArgV;
00174 char *ArgS;
00175 int ArgC;
00176
00177
00178
00179 long long numBytes;
00180 long long numBLost;
00181 int numDirs;
00182 int numFiles;
00183 int numProb;
00184 int numFix;
00185 int finalRC;
00186
00187
00188
00189 struct {char All;
00190 char Echo;
00191 char Erase;
00192 char Fix;
00193 char Force;
00194 char Keep;
00195 char ktAlways;
00196 char ktIdle;
00197 char Local;
00198 char MPType;
00199 char Recurse;
00200 char *Args[2];
00201 uid_t Uid;
00202 gid_t Gid;
00203 time_t KeepTime;
00204 } Opt;
00205 };
00206 namespace XrdFrm
00207 {
00208 extern XrdFrmAdmin Admin;
00209 }
00210 #endif