xrootd
XrdCmsConfig.hh
Go to the documentation of this file.
00001 #ifndef _CMS_CONFIG_H_
00002 #define _CMS_CONFIG_H_
00003 /******************************************************************************/
00004 /*                                                                            */
00005 /*                       X r d C m s C o n f i g . h h                        */
00006 /*                                                                            */
00007 /* (c) 2011 by the Board of Trustees of the Leland Stanford, Jr., University  */
00008 /*                            All Rights Reserved                             */
00009 /*   Produced by Andrew Hanushevsky for Stanford University under contract    */
00010 /*              DE-AC02-76-SFO0515 with the Department of Energy              */
00011 /******************************************************************************/
00012 
00013 #include <stdlib.h>
00014 #include <sys/socket.h>
00015 
00016 #include "Xrd/XrdJob.hh"
00017 #include "XrdCms/XrdCmsPList.hh"
00018 #include "XrdCms/XrdCmsTypes.hh"
00019 #include "XrdOuc/XrdOucPList.hh"
00020 #include "XrdOuc/XrdOucTList.hh"
00021   
00022 class XrdInet;
00023 class XrdScheduler;
00024 class XrdNetSecurity;
00025 class XrdNetSocket;
00026 class XrdOss;
00027 class XrdSysError;
00028 class XrdOucName2Name;
00029 class XrdOucProg;
00030 class XrdOucStream;
00031 class XrdCmsAdmin;
00032 class XrdCmsXmi;
00033 
00034 class XrdCmsConfig : public XrdJob
00035 {
00036 public:
00037 
00038 int   Configure1(int argc, char **argv, char *cfn);
00039 int   Configure2();
00040 int   ConfigXeq(char *var, XrdOucStream &CFile, XrdSysError *eDest);
00041 void  DoIt();
00042 int   GenLocalPath(const char *oldp, char *newp);
00043 int   asManager() {return isManager;}
00044 int   asMetaMan() {return isManager && isMeta;}
00045 int   asPeer()    {return isPeer;}
00046 int   asProxy()   {return isProxy;}
00047 int   asServer()  {return isServer;}
00048 int   asSolo()    {return isSolo;}
00049 
00050 int         LUPDelay;     // Maximum delay at look-up
00051 int         LUPHold;      // Maximum hold  at look-up (in millisconds)
00052 int         DRPDelay;     // Maximum delay for dropping an offline server
00053 int         PSDelay;      // Maximum delay time before peer is selected
00054 int         RWDelay;      // R/W lookup delay handling (0 | 1 | 2)
00055 int         QryDelay;     // Query Response Deadline
00056 int         QryMinum;     // Query Response Deadline Minimum Available
00057 int         SRVDelay;     // Minimum delay at startup
00058 int         SUPCount;     // Minimum server count
00059 int         SUPLevel;     // Minimum server count as floating percentage
00060 int         SUPDelay;     // Maximum delay when server count falls below min
00061 int         SUSDelay;     // Maximum delay when suspended
00062 int         MaxLoad;      // Maximum load
00063 int         MaxDelay;     // Maximum load delay
00064 int         MsgTTL;       // Maximum msg lifetime
00065 int         RefReset;     // Min seconds    before a global ref count reset
00066 int         RefTurn;      // Min references before a global ref count reset
00067 int         AskPerf;      // Seconds between perf queries
00068 int         AskPing;      // Number of ping requests per AskPerf window
00069 int         LogPerf;      // AskPerf intervals before logging perf
00070 
00071 int         PortTCP;      // TCP Port to  listen on
00072 XrdInet    *NetTCP;       // -> Network Object
00073 
00074 int         P_cpu;        // % CPU Capacity in load factor
00075 int         P_dsk;        // % DSK Capacity in load factor
00076 int         P_fuzz;       // %     Capacity to fuzz when comparing
00077 int         P_gsdf;       // %     Global share default (0 -> no default)
00078 int         P_gshr;       // %     Global share of requests allowed
00079 int         P_io;         // % I/O Capacity in load factor
00080 int         P_load;       // % MSC Capacity in load factor
00081 int         P_mem;        // % MEM Capacity in load factor
00082 int         P_pag;        // % PAG Capacity in load factor
00083 
00084 int         DiskMin;      // Minimum MB needed of space in a partition
00085 int         DiskHWM;      // Minimum MB needed of space to requalify
00086 short       DiskMinP;     // Minimum MB needed of space in a partition as %
00087 short       DiskHWMP;     // Minimum MB needed of space to requalify   as %
00088 int         DiskLinger;   // Manager Only
00089 int         DiskAsk;      // Seconds between disk space reclaculations
00090 int         DiskWT;       // Seconds to defer client while waiting for space
00091 int         DiskSS;       // This is a staging server
00092 int         DiskOK;       // This configuration has data
00093 
00094 int         sched_RR;     // 1 -> Simply do round robin scheduling
00095 int         doWait;       // 1 -> Wait for a data end-point
00096 
00097 XrdOucName2Name *xeq_N2N; // Server or Manager (non-null if library loaded)
00098 XrdOucName2Name *lcl_N2N; // Server Only
00099 
00100 char        *ossLib;      // -> oss library
00101 char        *ossParms;    // -> oss library parameters
00102 char        *N2N_Lib;     // Server Only
00103 char        *N2N_Parms;   // Server Only
00104 char        *LocalRoot;   // Server Only
00105 char        *RemotRoot;   // Manager
00106 char        *myPaths;     // Exported paths
00107 short        RepStats;    // Statistics to report (see RepStat_xxx below)
00108 char         Rsvc;
00109 char         myRoleID;
00110 char         myRType[4];
00111 char        *myRole;
00112 const char  *myProg;
00113 const char  *myName;
00114 const char  *myDomain;
00115 const char  *myInsName;
00116 const char  *myInstance;
00117 const char  *mySID;
00118 XrdOucTList *ManList;     // From manager directive
00119 XrdOucTList *NanList;     // From manager directive (managers only)
00120 
00121 XrdOss      *ossFS;       // The filsesystem interface
00122 XrdOucProg  *ProgCH;      // Server only chmod
00123 XrdOucProg  *ProgMD;      // Server only mkdir
00124 XrdOucProg  *ProgMP;      // Server only mkpath
00125 XrdOucProg  *ProgMV;      // Server only mv
00126 XrdOucProg  *ProgRD;      // Server only rmdir
00127 XrdOucProg  *ProgRM;      // Server only rm
00128 XrdOucProg  *ProgTR;      // Server only trunc
00129 
00130 unsigned long long DirFlags;
00131 XrdCmsPList_Anchor PathList;
00132 XrdOucPListAnchor  PexpList;
00133 XrdNetSocket      *AdminSock;
00134 XrdNetSocket      *AnoteSock;
00135 XrdNetSocket      *RedirSock;
00136 XrdNetSecurity    *Police;
00137 struct sockaddr    myAddr;
00138 
00139       XrdCmsConfig() : XrdJob("cmsd startup") {ConfigDefaults();}
00140      ~XrdCmsConfig() {}
00141 
00142 // RepStats value via 'cms.repstats" directive
00143 //
00144 static const int RepStat_frq    = 0x0001; // Fast Response Queue
00145 static const int RepStat_shr    = 0x0002; // Share
00146 static const int RepStat_All    = 0xffff; // All
00147 
00148 private:
00149 
00150 void ConfigDefaults(void);
00151 int  ConfigN2N(void);
00152 int  ConfigOSS(void);
00153 int  ConfigProc(int getrole=0);
00154 int  isExec(XrdSysError *eDest, const char *ptype, char *prog);
00155 int  MergeP(void);
00156 int  PidFile(void);
00157 int  setupManager(void);
00158 int  setupServer(void);
00159 char *setupSid();
00160 int  setupXmi(void);
00161 void Usage(int rc);
00162 int  xapath(XrdSysError *edest, XrdOucStream &CFile);
00163 int  xallow(XrdSysError *edest, XrdOucStream &CFile);
00164 int  Fsysadd(XrdSysError *edest, int chk, char *fn);
00165 int  xdelay(XrdSysError *edest, XrdOucStream &CFile);
00166 int  xdefs(XrdSysError *edest, XrdOucStream &CFile);
00167 int  xdfs(XrdSysError *edest, XrdOucStream &CFile);
00168 int  xexpo(XrdSysError *edest, XrdOucStream &CFile);
00169 int  xfsxq(XrdSysError *edest, XrdOucStream &CFile);
00170 int  xfxhld(XrdSysError *edest, XrdOucStream &CFile);
00171 int  xlclrt(XrdSysError *edest, XrdOucStream &CFile);
00172 int  xmang(XrdSysError *edest, XrdOucStream &CFile);
00173 int  xnml(XrdSysError *edest, XrdOucStream &CFile);
00174 int  xolib(XrdSysError *edest, XrdOucStream &CFile);
00175 int  xperf(XrdSysError *edest, XrdOucStream &CFile);
00176 int  xpidf(XrdSysError *edest, XrdOucStream &CFile);
00177 int  xping(XrdSysError *edest, XrdOucStream &CFile);
00178 int  xprep(XrdSysError *edest, XrdOucStream &CFile);
00179 int  xprepm(XrdSysError *edest, XrdOucStream &CFile);
00180 int  xreps(XrdSysError *edest, XrdOucStream &CFile);
00181 int  xrmtrt(XrdSysError *edest, XrdOucStream &CFile);
00182 int  xrole(XrdSysError *edest, XrdOucStream &CFile);
00183 int  xsched(XrdSysError *edest, XrdOucStream &CFile);
00184 int  xsecl(XrdSysError *edest, XrdOucStream &CFile);
00185 int  xspace(XrdSysError *edest, XrdOucStream &CFile);
00186 int  xtrace(XrdSysError *edest, XrdOucStream &CFile);
00187 int  xxmi(XrdSysError *edest, XrdOucStream &CFile);
00188 
00189 XrdInet          *NetTCPr;     // Network for supervisors
00190 char             *AdminPath;
00191 int               AdminMode;
00192 char             *pidPath;
00193 char             *ConfigFN;
00194 char            **inArgv;
00195 int               inArgc;
00196 char             *SecLib;
00197 char             *XmiPath;
00198 char             *XmiParms;
00199 int               isManager;
00200 int               isMeta;
00201 int               isPeer;
00202 int               isProxy;
00203 int               isServer;
00204 int               isSolo;
00205 char             *perfpgm;
00206 int               perfint;
00207 int               cachelife;
00208 int               pendplife;
00209 int               FSlim;
00210 };
00211 namespace XrdCms
00212 {
00213 extern XrdCmsAdmin   Admin;
00214 extern XrdCmsConfig  Config;
00215 extern XrdScheduler *Sched;
00216 extern XrdCmsXmi    *Xmi_Chmod;
00217 extern XrdCmsXmi    *Xmi_Load;
00218 extern XrdCmsXmi    *Xmi_Mkdir;
00219 extern XrdCmsXmi    *Xmi_Mkpath;
00220 extern XrdCmsXmi    *Xmi_Prep;
00221 extern XrdCmsXmi    *Xmi_Rename;
00222 extern XrdCmsXmi    *Xmi_Remdir;
00223 extern XrdCmsXmi    *Xmi_Remove;
00224 extern XrdCmsXmi    *Xmi_Select;
00225 extern XrdCmsXmi    *Xmi_Space;
00226 extern XrdCmsXmi    *Xmi_Stat;
00227 }
00228 #endif