xrootd
|
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 asPeer() {return isPeer;} 00045 int asProxy() {return isProxy;} 00046 int asServer() {return isServer;} 00047 int asSolo() {return isSolo;} 00048 00049 int LUPDelay; // Maximum delay at look-up 00050 int LUPHold; // Maximum hold at look-up (in millisconds) 00051 int DRPDelay; // Maximum delay for dropping an offline server 00052 int PSDelay; // Maximum delay time before peer is selected 00053 int RWDelay; // R/W lookup delay handling (0 | 1 | 2) 00054 int QryDelay; // Query Response Deadline 00055 int SRVDelay; // Minimum delay at startup 00056 int SUPCount; // Minimum server count 00057 int SUPLevel; // Minimum server count as floating percentage 00058 int SUPDelay; // Maximum delay when server count falls below min 00059 int SUSDelay; // Maximum delay when suspended 00060 int MaxLoad; // Maximum load 00061 int MaxDelay; // Maximum load delay 00062 int MsgTTL; // Maximum msg lifetime 00063 int RefReset; // Min seconds before a global ref count reset 00064 int RefTurn; // Min references before a global ref count reset 00065 int AskPerf; // Seconds between perf queries 00066 int AskPing; // Number of ping requests per AskPerf window 00067 int LogPerf; // AskPerf intervals before logging perf 00068 00069 int PortTCP; // TCP Port to listen on 00070 XrdInet *NetTCP; // -> Network Object 00071 00072 int P_cpu; // % CPU Capacity in load factor 00073 int P_dsk; // % DSK Capacity in load factor 00074 int P_fuzz; // % Capacity to fuzz when comparing 00075 int P_io; // % I/O Capacity in load factor 00076 int P_load; // % MSC Capacity in load factor 00077 int P_mem; // % MEM Capacity in load factor 00078 int P_pag; // % PAG Capacity in load factor 00079 00080 int DiskMin; // Minimum MB needed of space in a partition 00081 int DiskHWM; // Minimum MB needed of space to requalify 00082 short DiskMinP; // Minimum MB needed of space in a partition as % 00083 short DiskHWMP; // Minimum MB needed of space to requalify as % 00084 int DiskLinger; // Manager Only 00085 int DiskAsk; // Seconds between disk space reclaculations 00086 int DiskWT; // Seconds to defer client while waiting for space 00087 int DiskSS; // This is a staging server 00088 int DiskOK; // This configuration has data 00089 00090 int sched_RR; // 1 -> Simply do round robin scheduling 00091 int doWait; // 1 -> Wait for a data end-point 00092 00093 XrdOucName2Name *xeq_N2N; // Server or Manager (non-null if library loaded) 00094 XrdOucName2Name *lcl_N2N; // Server Only 00095 00096 char *ossLib; // -> oss library 00097 char *ossParms; // -> oss library parameters 00098 char *N2N_Lib; // Server Only 00099 char *N2N_Parms; // Server Only 00100 char *LocalRoot; // Server Only 00101 char *RemotRoot; // Manager 00102 char *myPaths; // Exported paths 00103 const char *myProg; 00104 const char *myName; 00105 const char *myDomain; 00106 const char *myInsName; 00107 const char *myInstance; 00108 const char *mySID; 00109 XrdOucTList *ManList; // From manager directive 00110 XrdOucTList *NanList; // From manager directive (managers only) 00111 00112 XrdOss *ossFS; // The filsesystem interface 00113 XrdOucProg *ProgCH; // Server only chmod 00114 XrdOucProg *ProgMD; // Server only mkdir 00115 XrdOucProg *ProgMP; // Server only mkpath 00116 XrdOucProg *ProgMV; // Server only mv 00117 XrdOucProg *ProgRD; // Server only rmdir 00118 XrdOucProg *ProgRM; // Server only rm 00119 XrdOucProg *ProgTR; // Server only trunc 00120 00121 unsigned long long DirFlags; 00122 XrdCmsPList_Anchor PathList; 00123 XrdOucPListAnchor PexpList; 00124 XrdNetSocket *AdminSock; 00125 XrdNetSocket *AnoteSock; 00126 XrdNetSocket *RedirSock; 00127 XrdNetSecurity *Police; 00128 struct sockaddr myAddr; 00129 00130 XrdCmsConfig() : XrdJob("cmsd startup") {ConfigDefaults();} 00131 ~XrdCmsConfig() {} 00132 00133 private: 00134 00135 void ConfigDefaults(void); 00136 int ConfigN2N(void); 00137 int ConfigOSS(void); 00138 int ConfigProc(int getrole=0); 00139 int isExec(XrdSysError *eDest, const char *ptype, char *prog); 00140 int MergeP(void); 00141 int PidFile(void); 00142 int setupManager(void); 00143 int setupServer(void); 00144 char *setupSid(); 00145 int setupXmi(void); 00146 void Usage(int rc); 00147 int xapath(XrdSysError *edest, XrdOucStream &CFile); 00148 int xallow(XrdSysError *edest, XrdOucStream &CFile); 00149 int Fsysadd(XrdSysError *edest, int chk, char *fn); 00150 int xdelay(XrdSysError *edest, XrdOucStream &CFile); 00151 int xdefs(XrdSysError *edest, XrdOucStream &CFile); 00152 int xdfs(XrdSysError *edest, XrdOucStream &CFile); 00153 int xexpo(XrdSysError *edest, XrdOucStream &CFile); 00154 int xfsxq(XrdSysError *edest, XrdOucStream &CFile); 00155 int xfxhld(XrdSysError *edest, XrdOucStream &CFile); 00156 int xlclrt(XrdSysError *edest, XrdOucStream &CFile); 00157 int xmang(XrdSysError *edest, XrdOucStream &CFile); 00158 int xnml(XrdSysError *edest, XrdOucStream &CFile); 00159 int xolib(XrdSysError *edest, XrdOucStream &CFile); 00160 int xperf(XrdSysError *edest, XrdOucStream &CFile); 00161 int xpidf(XrdSysError *edest, XrdOucStream &CFile); 00162 int xping(XrdSysError *edest, XrdOucStream &CFile); 00163 int xprep(XrdSysError *edest, XrdOucStream &CFile); 00164 int xprepm(XrdSysError *edest, XrdOucStream &CFile); 00165 int xrmtrt(XrdSysError *edest, XrdOucStream &CFile); 00166 int xrole(XrdSysError *edest, XrdOucStream &CFile); 00167 int xsched(XrdSysError *edest, XrdOucStream &CFile); 00168 int xsecl(XrdSysError *edest, XrdOucStream &CFile); 00169 int xspace(XrdSysError *edest, XrdOucStream &CFile); 00170 int xtrace(XrdSysError *edest, XrdOucStream &CFile); 00171 int xxmi(XrdSysError *edest, XrdOucStream &CFile); 00172 00173 XrdInet *NetTCPr; // Network for supervisors 00174 char *AdminPath; 00175 int AdminMode; 00176 char *pidPath; 00177 char *ConfigFN; 00178 char **inArgv; 00179 int inArgc; 00180 char *SecLib; 00181 char *XmiPath; 00182 char *XmiParms; 00183 int isManager; 00184 int isMeta; 00185 int isPeer; 00186 int isProxy; 00187 int isServer; 00188 int isSolo; 00189 char *myRole; 00190 char *perfpgm; 00191 int perfint; 00192 int cachelife; 00193 int pendplife; 00194 int FSlim; 00195 }; 00196 namespace XrdCms 00197 { 00198 extern XrdCmsAdmin Admin; 00199 extern XrdCmsConfig Config; 00200 extern XrdScheduler *Sched; 00201 extern XrdCmsXmi *Xmi_Chmod; 00202 extern XrdCmsXmi *Xmi_Load; 00203 extern XrdCmsXmi *Xmi_Mkdir; 00204 extern XrdCmsXmi *Xmi_Mkpath; 00205 extern XrdCmsXmi *Xmi_Prep; 00206 extern XrdCmsXmi *Xmi_Rename; 00207 extern XrdCmsXmi *Xmi_Remdir; 00208 extern XrdCmsXmi *Xmi_Remove; 00209 extern XrdCmsXmi *Xmi_Select; 00210 extern XrdCmsXmi *Xmi_Space; 00211 extern XrdCmsXmi *Xmi_Stat; 00212 } 00213 #endif