#ifndef __FRMADMIN__HH
#define __FRMADMIN__HH
/******************************************************************************/
/* */
/* X r d F r m A d m i n . h h */
/* */
/* (c) 2009 by the Board of Trustees of the Leland Stanford, Jr., University */
/* All Rights Reserved */
/* Produced by Andrew Hanushevsky for Stanford University under contract */
/* DE-AC02-76-SFO0515 with the Department of Energy */
/* */
/* This file is part of the XRootD software suite. */
/* */
/* XRootD is free software: you can redistribute it and/or modify it under */
/* the terms of the GNU Lesser General Public License as published by the */
/* Free Software Foundation, either version 3 of the License, or (at your */
/* option) any later version. */
/* */
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
/* COPYING (GPL license). If not, see . */
/* */
/* The copyright holder's institutional names and contributor's names may not */
/* be used to endorse or promote products derived from this software without */
/* specific prior written permission of the institution or contributor. */
/******************************************************************************/
#include
#include
#include "XrdCks/XrdCksData.hh"
#include "XrdOuc/XrdOucNSWalk.hh"
class XrdFrcProxy;
class XrdFrmFileset;
class XrdOucArgs;
class XrdOucTList;
class XrdFrmAdmin
{
public:
int Audit();
int Chksum();
int Copy();
int Create();
int Find();
int Help();
int MakeLF();
int Mark();
int Mmap();
int Mv();
int Pin();
int Query();
int Quit() {exit(finalRC); return 0;}
int Reloc();
int Remove();
int Rename();
void setArgs(int argc, char **argv);
void setArgs(char *argv);
int xeqArgs(char *Cmd);
XrdFrmAdmin() : frmProxy(0), frmProxz(0), finalRC(0) {}
~XrdFrmAdmin() {}
private:
int AuditNameNB(XrdFrmFileset *sP);
int AuditNameNF(XrdFrmFileset *sP);
int AuditNameNL(XrdFrmFileset *sP);
int AuditNames();
int AuditNameXA(XrdFrmFileset *sP);
int AuditNameXB(XrdFrmFileset *sP); // runOld
int AuditNameXL(XrdFrmFileset *sP, int dorm); // runOld
int AuditRemove(XrdFrmFileset *sP);
int AuditSpace();
int AuditSpaceAX(const char *Path);
int AuditSpaceAXDB(const char *Path);
int AuditSpaceAXDC(const char *Path, XrdOucNSWalk::NSEnt *nP);
int AuditSpaceAXDL(int dorm, const char *Path, const char *Dest);
int AuditSpaceXA(const char *Space, const char *Path);
int AuditSpaceXA(XrdFrmFileset *sP);
int AuditSpaceXB(const char *Space, const char *Path); // runOld
int AuditSpaceXANB(XrdFrmFileset *sP); // runOld
int AuditUsage();
int AuditUsage(char *Space);
int AuditUsageAX(const char *Path);
int AuditUsageXA(const char *Path, const char *Space);
int isXA(XrdOucNSWalk::NSEnt *nP);
int ChksumList( const char *Lfn, const char *Pfn);
void ChksumPrint(const char *Lfn, int rc);
int FindFail(XrdOucArgs &Spec);
int FindMmap(XrdOucArgs &Spec);
int FindNocs(XrdOucArgs &Spec);
int FindNolk(XrdOucArgs &Spec);
int FindPins(XrdOucArgs &Spec);
int FindPins(XrdFrmFileset *sP);
int FindUnmi(XrdOucArgs &Spec);
int Abbrev(const char *Spec, const char *Word, int minLen);
void ConfigProxy();
void Emsg(const char *tx1, const char *tx2=0, const char *tx3=0,
const char *tx4=0, const char *tx5=0);
void Emsg(int Enum, const char *tx2=0, const char *tx3=0,
const char *tx4=0, const char *tx5=0);
void Msg(const char *tx1, const char *tx2=0, const char *tx3=0,
const char *tx4=0, const char *tx5=0);
int Parse(const char *What, XrdOucArgs &Spec, const char **Reqs);
int ParseKeep(const char *What, const char *kTime);
int ParseOwner(const char *What, char *Uname);
XrdOucTList *ParseSpace(char *Space, char **Path);
int ParseType(const char *What, char *Type);
char ckAttr(int What, const char *Lfn, char *Pfn, int Pfnsz);
int mkLock(const char *Lfn);
int mkFile(int What, const char *Path, const char *Data=0, int Dlen=0);
int mkMark(const char *Lfn);
int mkMmap(const char *Lfn);
int mkPin(const char *Lfn);
char mkStat(int What, const char *Lfn, char *Pfn, int Pfnsz);
// For mkFile and mkStat the following options may be passed via What
//
static const int isPFN= 0x0001; // Filename is actual physical name
static const int mkLF = 0x0002; // Make lock file or copy attribute
static const int mkMF = 0x0004; // Make mmap file or mmap attribute
static const int mkPF = 0x0008; // Make pin file or pin attribute
int QueryPfn(XrdOucArgs &Spec);
int QueryRfn(XrdOucArgs &Spec);
int QuerySpace(XrdOucArgs &Spec);
int QuerySpace(const char *Pfn, char *Lnk=0, int Lsz=0);
int QueryUsage(XrdOucArgs &Spec);
int QueryXfrQ(XrdOucArgs &Spec);
int Reloc(char *srcLfn, char *Space);
int RelocCP(const char *srcpfn, const char *trgpfn, off_t srcSz);
int RelocWR(const char *outFn, int oFD, char *Buff, size_t BLen, off_t Boff);
int Unlink(const char *Path);
int UnlinkDir(const char *Path, const char *lclPath);
int UnlinkDir(XrdOucNSWalk::NSEnt *&nP, XrdOucNSWalk::NSEnt *&dP);
int UnlinkFile(const char *lclPath);
int VerifyAll(char *path);
char VerifyMP(const char *func, const char *path);
// The following are for runOld conversion purposes and will be removed
//
int Convert();
int ConvTest(int doNames, int doSpaces);
int New2Old(int doNames, int doSpaces);
int Old2New(int doNames, int doSpaces);
int o2nFiles(XrdFrmFileset *sP, int &numOld);
int o2nSpace(XrdFrmFileset *sP, const char *Space);
XrdOucTList *x2xPaths();
int x2xRemove(const char *Type, const char *Path, int cvt=0);
XrdOucTList *x2xSpaces();
static const char *AuditHelp;
static const char *ChksumHelp;
static const char *FindHelp;
static const char *HelpHelp;
static const char *MakeLFHelp;
static const char *MarkHelp;
static const char *MmapHelp;
static const char *MvHelp;
static const char *PinHelp;
static const char *QueryHelp;
static const char *RelocHelp;
static const char *RemoveHelp;
// Frm agent/proxy control
//
XrdFrcProxy *frmProxy;
int frmProxz;
// Command control
//
char **ArgV;
char *ArgS;
int ArgC;
// The following are common variables for audit functions
//
long long numBytes;
long long numBLost;
int numDirs;
int numFiles;
int numProb;
int numFix;
int finalRC;
// Checksum control area
//
XrdCksData CksData;
// Options from the command
//
struct {char All;
char Echo;
char Erase;
char Fix;
char Force;
char Keep;
char ktAlways;
char ktIdle;
char Local;
char MPType;
char Recurse;
char Verbose;
char *Args[2];
uid_t Uid;
gid_t Gid;
time_t KeepTime;
} Opt;
};
namespace XrdFrm
{
extern XrdFrmAdmin Admin;
}
#endif