XRootD
XrdCmsConfig.hh
Go to the documentation of this file.
1 #ifndef _CMS_CONFIG_H_
2 #define _CMS_CONFIG_H_
3 /******************************************************************************/
4 /* */
5 /* X r d C m s C o n f i g . h h */
6 /* */
7 /* (c) 2011 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* All Rights Reserved */
9 /* Produced by Andrew Hanushevsky for Stanford University under contract */
10 /* DE-AC02-76-SFO0515 with the Department of Energy */
11 /* */
12 /* This file is part of the XRootD software suite. */
13 /* */
14 /* XRootD is free software: you can redistribute it and/or modify it under */
15 /* the terms of the GNU Lesser General Public License as published by the */
16 /* Free Software Foundation, either version 3 of the License, or (at your */
17 /* option) any later version. */
18 /* */
19 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
20 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
21 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
22 /* License for more details. */
23 /* */
24 /* You should have received a copy of the GNU Lesser General Public License */
25 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
26 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
27 /* */
28 /* The copyright holder's institutional names and contributor's names may not */
29 /* be used to endorse or promote products derived from this software without */
30 /* specific prior written permission of the institution or contributor. */
31 /******************************************************************************/
32 
33 #include <cstdlib>
34 
35 #include "Xrd/XrdJob.hh"
36 #include "XrdCms/XrdCmsPList.hh"
37 #include "XrdCms/XrdCmsTypes.hh"
38 #include "XrdOuc/XrdOucPList.hh"
39 #include "XrdOuc/XrdOucTList.hh"
40 
41 class XrdInet;
42 class XrdProtocol_Config;
43 class XrdScheduler;
44 class XrdNetSecurity;
45 class XrdNetSocket;
46 class XrdOss;
47 class XrdSysError;
48 class XrdOucEnv;
49 class XrdOucName2Name;
50 class XrdOucProg;
51 class XrdOucStream;
52 class XrdCmsAdmin;
53 
54 struct XrdVersionInfo;
55 
56 class XrdCmsConfig : public XrdJob
57 {
58 public:
59 
61 int Configure1(int argc, char **argv, char *cfn);
62 int Configure2();
63 int ConfigXeq(char *var, XrdOucStream &CFile, XrdSysError *eDest);
64 void DoIt();
65 int GenLocalPath(const char *oldp, char *newp);
66 int asManager() {return isManager;}
67 int asMetaMan() {return isManager && isMeta;}
68 int asPeer() {return isPeer;}
69 int asProxy() {return isProxy;}
70 int asServer() {return isServer;}
71 int asSolo() {return isSolo;}
72 
73 int LUPDelay; // Maximum delay at look-up
74 int LUPHold; // Maximum hold at look-up (in millisconds)
75 int DELDelay; // Maximum delay for deleting an offline server
76 int DRPDelay; // Maximum delay for dropping an offline server
77 int PSDelay; // Maximum delay time before peer is selected
78 int RWDelay; // R/W lookup delay handling (0 | 1 | 2)
79 int QryDelay; // Query Response Deadline
80 int QryMinum; // Query Response Deadline Minimum Available
81 int SRVDelay; // Minimum delay at startup
82 int SUPCount; // Minimum server count
83 int SUPLevel; // Minimum server count as floating percentage
84 int SUPDelay; // Maximum delay when server count falls below min
85 int SUSDelay; // Maximum delay when suspended
86 int MaxLoad; // Maximum load
87 int MaxDelay; // Maximum load delay
88 int MaxRetries; // Maximum number of non-DFS select retries
89 int MsgTTL; // Maximum msg lifetime
90 int RefReset; // Min seconds before a global ref count reset
91 int RefTurn; // Min references before a global ref count reset
92 int AskPerf; // Seconds between perf queries
93 int AskPing; // Number of ping requests per AskPerf window
94 int PingTick; // Ping clock value
95 int LogPerf; // AskPerf intervals before logging perf
96 
97 int PortTCP; // TCP Port to listen on
98 int PortSUP; // TCP Port to listen on (supervisor)
99 XrdInet *NetTCP; // -> Network Object
100 
101 int P_cpu; // % CPU Capacity in load factor
102 int P_dsk; // % DSK Capacity in load factor
103 int P_fuzz; // % Capacity to fuzz when comparing
104 int P_gsdf; // % Global share default (0 -> no default)
105 int P_gshr; // % Global share of requests allowed
106 int P_io; // % I/O Capacity in load factor
107 int P_load; // % MSC Capacity in load factor
108 int P_mem; // % MEM Capacity in load factor
109 int P_pag; // % PAG Capacity in load factor
110 
111 char DoMWChk; // When true (default) perform multiple write check
112 char DoHnTry; // When true (default) use hostnames for try redirs
113 char nbSQ; // Non-blocking send queue handling option
114 char MultiSrc; // Allow retries via 'tried=' and 'cms.sadd' cgi
115 
116 int DiskMin; // Minimum MB needed of space in a partition
117 int DiskHWM; // Minimum MB needed of space to requalify
118 short DiskMinP; // Minimum MB needed of space in a partition as %
119 short DiskHWMP; // Minimum MB needed of space to requalify as %
120 int DiskLinger; // Manager Only
121 int DiskAsk; // Seconds between disk space reclaculations
122 int DiskWT; // Seconds to defer client while waiting for space
123 bool DiskSS; // This is a staging server
124 bool DiskOK; // This configuration has data
125 
126 bool forceRO; // Manager will force incoming paths to be r/o
127 
128 char rsvd[3];
129 
130 char sched_RR; // 1 -> Simply do round robin scheduling
131 char sched_Pack; // 1 -> Pick with affinity (>1 same but wait for resps)
132 char sched_AffPC; // Affinity path component count (-255 <= n <= 255)
133 char sched_Level; // 1 -> Use load-based level for "pack" selection
134 char sched_Force; // 1 -> Client cannot select mode
135 char sched_LoadR; // 1 -> Use randomized load-based weighting for selection
136 int doWait; // 1 -> Wait for a data end-point
137 
138 int adsPort; // Alternate server port
139 int adsMon; // Alternate server monitoring
140 char *adsProt; // Alternate server protocol
141 
142 char *mrRdrHost; // Maxretries redirect target
145 char *msRdrHost; // Nomultisrc redirect target
148 
149 XrdVersionInfo *myVInfo; // xrootd version used in compilation
150 
151 XrdOucName2Name *xeq_N2N; // Server or Manager (non-null if library loaded)
152 XrdOucName2Name *lcl_N2N; // Server Only
153 
154 char *ConfigFN;
155 char *ossLib; // -> oss library
156 char *ossParms; // -> oss library parameters
157 char *prfLib; // ->perf library
158 char *prfParms; // ->perf library parameters
159 char *VNID_Lib; // Server Only
160 char *VNID_Parms; // Server Only
161 char *N2N_Lib; // Server Only
162 char *N2N_Parms; // Server Only
163 char *LocalRoot; // Server Only
164 char *RemotRoot; // Manager
165 char *myPaths; // Exported paths
166 short RepStats; // Statistics to report (see RepStat_xxx below)
167 char TimeZone; // Time zone we are in (|0x80 -> east of UTC)
168 char myRoleID;
169 char myRType[4];
170 char *myRole;
171 const char *myProg;
172 const char *myName;
173 const char *myDomain;
174 const char *myInsName;
175 const char *myInstance;
176 const char *mySID;
177 const char *myVNID;
178 const char *mySite;
179  char *envCGI;
180  char *cidTag;
181 const char *ifList;
182 XrdOucTList *ManList; // From manager directive
183 XrdOucTList *NanList; // From manager directive (managers only)
184 XrdOucTList *SanList; // From subcluster directive (managers only)
185 
186 XrdOss *ossFS; // The filsesystem interface
187 XrdOucProg *ProgCH; // Server only chmod
188 XrdOucProg *ProgMD; // Server only mkdir
189 XrdOucProg *ProgMP; // Server only mkpath
190 XrdOucProg *ProgMV; // Server only mv
191 XrdOucProg *ProgRD; // Server only rmdir
192 XrdOucProg *ProgRM; // Server only rm
193 XrdOucProg *ProgTR; // Server only trunc
194 
195 unsigned long long DirFlags;
202 
203  XrdCmsConfig() : XrdJob("cmsd startup") {ConfigDefaults();}
205 
206 // RepStats value via 'cms.repstats" directive
207 //
208 static const int RepStat_frq = 0x0001; // Fast Response Queue
209 static const int RepStat_shr = 0x0002; // Share
210 static const int RepStat_All = 0xffff; // All
211 
212 private:
213 
214 void ConfigDefaults(void);
215 int ConfigN2N(void);
216 int ConfigOSS(void);
217 int ConfigProc(int getrole=0);
218 int isExec(XrdSysError *eDest, const char *ptype, char *prog);
219 int Manifest();
220 int MergeP(void);
221 int setupManager(void);
222 int setupServer(void);
223 char *setupSid();
224 void Usage(int rc);
225 int xapath(XrdSysError *edest, XrdOucStream &CFile);
226 int xallow(XrdSysError *edest, XrdOucStream &CFile);
227 int xaltds(XrdSysError *edest, XrdOucStream &CFile);
228 int Fsysadd(XrdSysError *edest, int chk, char *fn);
229 int xblk(XrdSysError *edest, XrdOucStream &CFile, bool iswl=false);
230 int xcid(XrdSysError *edest, XrdOucStream &CFile);
231 int xdelay(XrdSysError *edest, XrdOucStream &CFile);
232 int xdefs(XrdSysError *edest, XrdOucStream &CFile);
233 int xdfs(XrdSysError *edest, XrdOucStream &CFile);
234 int xexpo(XrdSysError *edest, XrdOucStream &CFile);
235 int xfsxq(XrdSysError *edest, XrdOucStream &CFile);
236 int xfxhld(XrdSysError *edest, XrdOucStream &CFile);
237 int xlclrt(XrdSysError *edest, XrdOucStream &CFile);
238 int xmang(XrdSysError *edest, XrdOucStream &CFile);
239 int xmode(XrdSysError *edest, XrdOucStream &CFile);
240 int xnbsq(XrdSysError *edest, XrdOucStream &CFile);
241 int xperf(XrdSysError *edest, XrdOucStream &CFile);
242 int xping(XrdSysError *edest, XrdOucStream &CFile);
243 int xprep(XrdSysError *edest, XrdOucStream &CFile);
244 int xprepm(XrdSysError *edest, XrdOucStream &CFile);
245 int xreps(XrdSysError *edest, XrdOucStream &CFile);
246 int xrmtrt(XrdSysError *edest, XrdOucStream &CFile);
247 int xrole(XrdSysError *edest, XrdOucStream &CFile);
248 int xsched(XrdSysError *edest, XrdOucStream &CFile);
249 int xschedm(char *val, XrdSysError *eDest, XrdOucStream &CFile);
250 int xschedp(char *val, XrdSysError *eDest, XrdOucStream &CFile);
251 int xschedx(char *val, XrdSysError *eDest, XrdOucStream &CFile);
252 bool xschedy(char *val, XrdSysError *eDest, char *&host, int &hlen, int &port);
253 int xsecl(XrdSysError *edest, XrdOucStream &CFile);
254 int xspace(XrdSysError *edest, XrdOucStream &CFile);
255 int xsubc(XrdSysError *edest, XrdOucStream &CFile);
256 int xsupp(XrdSysError *edest, XrdOucStream &CFile);
257 int xtrace(XrdSysError *edest, XrdOucStream &CFile);
258 int xvnid(XrdSysError *edest, XrdOucStream &CFile);
259 
260 XrdInet *NetTCPr; // Network for supervisors
261 XrdOucEnv *xrdEnv;
262 char *AdminPath;
263 int AdminMode;
264 char **inArgv;
265 int inArgc;
266 char *SecLib;
267 char *blkList;
268 int blkChk;
269 int isManager;
270 int isMeta;
271 int isPeer;
272 int isProxy;
273 int isServer;
274 int isSolo;
275 char *perfpgm;
276 int perfint;
277 int cachelife;
278 int emptylife;
279 int pendplife;
280 int FSlim;
281 };
282 namespace XrdCms
283 {
284 extern XrdCmsAdmin Admin;
285 extern XrdCmsConfig Config;
286 extern XrdScheduler *Sched;
287 }
288 #endif
static XrdSysError eDest(0,"crypto_")
static const int RepStat_shr
static const int RepStat_frq
XrdOucProg * ProgMP
int GenLocalPath(const char *oldp, char *newp)
const char * myDomain
XrdNetSocket * RedirSock
XrdNetSocket * AdminSock
XrdOucProg * ProgRM
XrdCmsPList_Anchor PathList
const char * myInsName
XrdInet * NetTCP
Definition: XrdCmsConfig.hh:99
XrdOss * ossFS
XrdOucTList * SanList
const char * mySite
static const int RepStat_All
char * RemotRoot
char * VNID_Parms
unsigned long long DirFlags
const char * myName
char myRType[4]
XrdOucTList * NanList
char * N2N_Parms
XrdNetSecurity * Police
XrdOucPListAnchor PexpList
XrdNetSocket * AnoteSock
XrdVersionInfo * myVInfo
char * mrRdrHost
XrdOucProg * ProgRD
XrdOucProg * ProgCH
const char * ifList
char * msRdrHost
const char * myInstance
XrdOucProg * ProgMV
char * LocalRoot
XrdOucProg * ProgMD
int Configure1(int argc, char **argv, char *cfn)
int ConfigXeq(char *var, XrdOucStream &CFile, XrdSysError *eDest)
XrdOucTList * ManList
const char * mySID
XrdOucName2Name * xeq_N2N
const char * myProg
XrdOucName2Name * lcl_N2N
int Configure0(XrdProtocol_Config *pi)
XrdOucProg * ProgTR
const char * myVNID
Definition: XrdJob.hh:43
XrdCmsAdmin Admin
XrdScheduler * Sched
XrdCmsConfig Config