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 char rsvd[5];
127 
128 char sched_RR; // 1 -> Simply do round robin scheduling
129 char sched_Pack; // 1 -> Pick with affinity (>1 same but wait for resps)
130 char sched_AffPC; // Affinity path component count (-255 <= n <= 255)
131 char sched_Level; // 1 -> Use load-based level for "pack" selection
132 char sched_Force; // 1 -> Client cannot select mode
133 char sched_LoadR; // 1 -> Use randomized load-based weighting for selection
134 int doWait; // 1 -> Wait for a data end-point
135 
136 int adsPort; // Alternate server port
137 int adsMon; // Alternate server monitoring
138 char *adsProt; // Alternate server protocol
139 
140 char *mrRdrHost; // Maxretries redirect target
143 char *msRdrHost; // Nomultisrc redirect target
146 
147 XrdVersionInfo *myVInfo; // xrootd version used in compilation
148 
149 XrdOucName2Name *xeq_N2N; // Server or Manager (non-null if library loaded)
150 XrdOucName2Name *lcl_N2N; // Server Only
151 
152 char *ConfigFN;
153 char *ossLib; // -> oss library
154 char *ossParms; // -> oss library parameters
155 char *prfLib; // ->perf library
156 char *prfParms; // ->perf library parameters
157 char *VNID_Lib; // Server Only
158 char *VNID_Parms; // Server Only
159 char *N2N_Lib; // Server Only
160 char *N2N_Parms; // Server Only
161 char *LocalRoot; // Server Only
162 char *RemotRoot; // Manager
163 char *myPaths; // Exported paths
164 short RepStats; // Statistics to report (see RepStat_xxx below)
165 char TimeZone; // Time zone we are in (|0x80 -> east of UTC)
166 char myRoleID;
167 char myRType[4];
168 char *myRole;
169 const char *myProg;
170 const char *myName;
171 const char *myDomain;
172 const char *myInsName;
173 const char *myInstance;
174 const char *mySID;
175 const char *myVNID;
176 const char *mySite;
177  char *envCGI;
178  char *cidTag;
179 const char *ifList;
180 XrdOucTList *ManList; // From manager directive
181 XrdOucTList *NanList; // From manager directive (managers only)
182 XrdOucTList *SanList; // From subcluster directive (managers only)
183 
184 XrdOss *ossFS; // The filsesystem interface
185 XrdOucProg *ProgCH; // Server only chmod
186 XrdOucProg *ProgMD; // Server only mkdir
187 XrdOucProg *ProgMP; // Server only mkpath
188 XrdOucProg *ProgMV; // Server only mv
189 XrdOucProg *ProgRD; // Server only rmdir
190 XrdOucProg *ProgRM; // Server only rm
191 XrdOucProg *ProgTR; // Server only trunc
192 
193 unsigned long long DirFlags;
200 
201  XrdCmsConfig() : XrdJob("cmsd startup") {ConfigDefaults();}
203 
204 // RepStats value via 'cms.repstats" directive
205 //
206 static const int RepStat_frq = 0x0001; // Fast Response Queue
207 static const int RepStat_shr = 0x0002; // Share
208 static const int RepStat_All = 0xffff; // All
209 
210 private:
211 
212 void ConfigDefaults(void);
213 int ConfigN2N(void);
214 int ConfigOSS(void);
215 int ConfigProc(int getrole=0);
216 int isExec(XrdSysError *eDest, const char *ptype, char *prog);
217 int Manifest();
218 int MergeP(void);
219 int setupManager(void);
220 int setupServer(void);
221 char *setupSid();
222 void Usage(int rc);
223 int xapath(XrdSysError *edest, XrdOucStream &CFile);
224 int xallow(XrdSysError *edest, XrdOucStream &CFile);
225 int xaltds(XrdSysError *edest, XrdOucStream &CFile);
226 int Fsysadd(XrdSysError *edest, int chk, char *fn);
227 int xblk(XrdSysError *edest, XrdOucStream &CFile, bool iswl=false);
228 int xcid(XrdSysError *edest, XrdOucStream &CFile);
229 int xdelay(XrdSysError *edest, XrdOucStream &CFile);
230 int xdefs(XrdSysError *edest, XrdOucStream &CFile);
231 int xdfs(XrdSysError *edest, XrdOucStream &CFile);
232 int xexpo(XrdSysError *edest, XrdOucStream &CFile);
233 int xfsxq(XrdSysError *edest, XrdOucStream &CFile);
234 int xfxhld(XrdSysError *edest, XrdOucStream &CFile);
235 int xlclrt(XrdSysError *edest, XrdOucStream &CFile);
236 int xmang(XrdSysError *edest, XrdOucStream &CFile);
237 int xnbsq(XrdSysError *edest, XrdOucStream &CFile);
238 int xperf(XrdSysError *edest, XrdOucStream &CFile);
239 int xping(XrdSysError *edest, XrdOucStream &CFile);
240 int xprep(XrdSysError *edest, XrdOucStream &CFile);
241 int xprepm(XrdSysError *edest, XrdOucStream &CFile);
242 int xreps(XrdSysError *edest, XrdOucStream &CFile);
243 int xrmtrt(XrdSysError *edest, XrdOucStream &CFile);
244 int xrole(XrdSysError *edest, XrdOucStream &CFile);
245 int xsched(XrdSysError *edest, XrdOucStream &CFile);
246 int xschedm(char *val, XrdSysError *eDest, XrdOucStream &CFile);
247 int xschedp(char *val, XrdSysError *eDest, XrdOucStream &CFile);
248 int xschedx(char *val, XrdSysError *eDest, XrdOucStream &CFile);
249 bool xschedy(char *val, XrdSysError *eDest, char *&host, int &hlen, int &port);
250 int xsecl(XrdSysError *edest, XrdOucStream &CFile);
251 int xspace(XrdSysError *edest, XrdOucStream &CFile);
252 int xsubc(XrdSysError *edest, XrdOucStream &CFile);
253 int xsupp(XrdSysError *edest, XrdOucStream &CFile);
254 int xtrace(XrdSysError *edest, XrdOucStream &CFile);
255 int xvnid(XrdSysError *edest, XrdOucStream &CFile);
256 
257 XrdInet *NetTCPr; // Network for supervisors
258 XrdOucEnv *xrdEnv;
259 char *AdminPath;
260 int AdminMode;
261 char **inArgv;
262 int inArgc;
263 char *SecLib;
264 char *blkList;
265 int blkChk;
266 int isManager;
267 int isMeta;
268 int isPeer;
269 int isProxy;
270 int isServer;
271 int isSolo;
272 char *perfpgm;
273 int perfint;
274 int cachelife;
275 int emptylife;
276 int pendplife;
277 int FSlim;
278 };
279 namespace XrdCms
280 {
281 extern XrdCmsAdmin Admin;
282 extern XrdCmsConfig Config;
283 extern XrdScheduler *Sched;
284 }
285 #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