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 <stdlib.h>
34 #include <sys/socket.h>
35 
36 #include "Xrd/XrdJob.hh"
37 #include "XrdCms/XrdCmsPList.hh"
38 #include "XrdCms/XrdCmsTypes.hh"
39 #include "XrdOuc/XrdOucPList.hh"
40 #include "XrdOuc/XrdOucTList.hh"
41 
42 class XrdInet;
43 class XrdScheduler;
44 class XrdNetSecurity;
45 class XrdNetSocket;
46 class XrdOss;
47 class XrdSysError;
48 class XrdOucName2Name;
49 class XrdOucProg;
50 class XrdOucStream;
51 class XrdCmsAdmin;
52 class XrdCmsXmi;
53 
54 struct XrdVersionInfo;
55 
56 class XrdCmsConfig : public XrdJob
57 {
58 public:
59 
60 int Configure1(int argc, char **argv, char *cfn);
61 int Configure2();
62 int ConfigXeq(char *var, XrdOucStream &CFile, XrdSysError *eDest);
63 void DoIt();
64 int GenLocalPath(const char *oldp, char *newp);
65 int asManager() {return isManager;}
66 int asMetaMan() {return isManager && isMeta;}
67 int asPeer() {return isPeer;}
68 int asProxy() {return isProxy;}
69 int asServer() {return isServer;}
70 int asSolo() {return isSolo;}
71 
72 int LUPDelay; // Maximum delay at look-up
73 int LUPHold; // Maximum hold at look-up (in millisconds)
74 int DRPDelay; // Maximum delay for dropping an offline server
75 int PSDelay; // Maximum delay time before peer is selected
76 int RWDelay; // R/W lookup delay handling (0 | 1 | 2)
77 int QryDelay; // Query Response Deadline
78 int QryMinum; // Query Response Deadline Minimum Available
79 int SRVDelay; // Minimum delay at startup
80 int SUPCount; // Minimum server count
81 int SUPLevel; // Minimum server count as floating percentage
82 int SUPDelay; // Maximum delay when server count falls below min
83 int SUSDelay; // Maximum delay when suspended
84 int MaxLoad; // Maximum load
85 int MaxDelay; // Maximum load delay
86 int MsgTTL; // Maximum msg lifetime
87 int RefReset; // Min seconds before a global ref count reset
88 int RefTurn; // Min references before a global ref count reset
89 int AskPerf; // Seconds between perf queries
90 int AskPing; // Number of ping requests per AskPerf window
91 int LogPerf; // AskPerf intervals before logging perf
92 
93 int PortTCP; // TCP Port to listen on
94 XrdInet *NetTCP; // -> Network Object
95 
96 int P_cpu; // % CPU Capacity in load factor
97 int P_dsk; // % DSK Capacity in load factor
98 int P_fuzz; // % Capacity to fuzz when comparing
99 int P_gsdf; // % Global share default (0 -> no default)
100 int P_gshr; // % Global share of requests allowed
101 int P_io; // % I/O Capacity in load factor
102 int P_load; // % MSC Capacity in load factor
103 int P_mem; // % MEM Capacity in load factor
104 int P_pag; // % PAG Capacity in load factor
105 
106 int DiskMin; // Minimum MB needed of space in a partition
107 int DiskHWM; // Minimum MB needed of space to requalify
108 short DiskMinP; // Minimum MB needed of space in a partition as %
109 short DiskHWMP; // Minimum MB needed of space to requalify as %
110 int DiskLinger; // Manager Only
111 int DiskAsk; // Seconds between disk space reclaculations
112 int DiskWT; // Seconds to defer client while waiting for space
113 int DiskSS; // This is a staging server
114 int DiskOK; // This configuration has data
115 
116 int sched_RR; // 1 -> Simply do round robin scheduling
117 int doWait; // 1 -> Wait for a data end-point
118 
119 int adsPort; // Alternate server port
120 int adsMon; // Alternate server monitoring
121 char *adsProt; // Alternate server protocol
122 
123 XrdVersionInfo *myVInfo; // xrootd version used in compilation
124 
125 XrdOucName2Name *xeq_N2N; // Server or Manager (non-null if library loaded)
126 XrdOucName2Name *lcl_N2N; // Server Only
127 
128 char *ossLib; // -> oss library
129 char *ossParms; // -> oss library parameters
130 char *N2N_Lib; // Server Only
131 char *N2N_Parms; // Server Only
132 char *LocalRoot; // Server Only
133 char *RemotRoot; // Manager
134 char *myPaths; // Exported paths
135 short RepStats; // Statistics to report (see RepStat_xxx below)
136 char TimeZone; // Time zone we are in (|0x80 -> east of UTC)
137 char myRoleID;
138 char myRType[4];
139 char *myRole;
140 const char *myProg;
141 const char *myName;
142 const char *myDomain;
143 const char *myInsName;
144 const char *myInstance;
145 const char *mySID;
146 XrdOucTList *ManList; // From manager directive
147 XrdOucTList *NanList; // From manager directive (managers only)
148 
149 XrdOss *ossFS; // The filsesystem interface
150 XrdOucProg *ProgCH; // Server only chmod
151 XrdOucProg *ProgMD; // Server only mkdir
152 XrdOucProg *ProgMP; // Server only mkpath
153 XrdOucProg *ProgMV; // Server only mv
154 XrdOucProg *ProgRD; // Server only rmdir
155 XrdOucProg *ProgRM; // Server only rm
156 XrdOucProg *ProgTR; // Server only trunc
157 
158 unsigned long long DirFlags;
165 struct sockaddr myAddr;
166 
167  XrdCmsConfig() : XrdJob("cmsd startup") {ConfigDefaults();}
169 
170 // RepStats value via 'cms.repstats" directive
171 //
172 static const int RepStat_frq = 0x0001; // Fast Response Queue
173 static const int RepStat_shr = 0x0002; // Share
174 static const int RepStat_All = 0xffff; // All
175 
176 private:
177 
178 void ConfigDefaults(void);
179 int ConfigN2N(void);
180 int ConfigOSS(void);
181 int ConfigProc(int getrole=0);
182 int isExec(XrdSysError *eDest, const char *ptype, char *prog);
183 int MergeP(void);
184 int PidFile(void);
185 int setupManager(void);
186 int setupServer(void);
187 char *setupSid();
188 int setupXmi(void);
189 void Usage(int rc);
190 int xapath(XrdSysError *edest, XrdOucStream &CFile);
191 int xallow(XrdSysError *edest, XrdOucStream &CFile);
192 int xaltds(XrdSysError *edest, XrdOucStream &CFile);
193 int Fsysadd(XrdSysError *edest, int chk, char *fn);
194 int xdelay(XrdSysError *edest, XrdOucStream &CFile);
195 int xdefs(XrdSysError *edest, XrdOucStream &CFile);
196 int xdfs(XrdSysError *edest, XrdOucStream &CFile);
197 int xexpo(XrdSysError *edest, XrdOucStream &CFile);
198 int xfsxq(XrdSysError *edest, XrdOucStream &CFile);
199 int xfxhld(XrdSysError *edest, XrdOucStream &CFile);
200 int xlclrt(XrdSysError *edest, XrdOucStream &CFile);
201 int xmang(XrdSysError *edest, XrdOucStream &CFile);
202 int xnml(XrdSysError *edest, XrdOucStream &CFile);
203 int xolib(XrdSysError *edest, XrdOucStream &CFile);
204 int xperf(XrdSysError *edest, XrdOucStream &CFile);
205 int xpidf(XrdSysError *edest, XrdOucStream &CFile);
206 int xping(XrdSysError *edest, XrdOucStream &CFile);
207 int xprep(XrdSysError *edest, XrdOucStream &CFile);
208 int xprepm(XrdSysError *edest, XrdOucStream &CFile);
209 int xreps(XrdSysError *edest, XrdOucStream &CFile);
210 int xrmtrt(XrdSysError *edest, XrdOucStream &CFile);
211 int xrole(XrdSysError *edest, XrdOucStream &CFile);
212 int xsched(XrdSysError *edest, XrdOucStream &CFile);
213 int xsecl(XrdSysError *edest, XrdOucStream &CFile);
214 int xspace(XrdSysError *edest, XrdOucStream &CFile);
215 int xtrace(XrdSysError *edest, XrdOucStream &CFile);
216 int xxmi(XrdSysError *edest, XrdOucStream &CFile);
217 
218 XrdInet *NetTCPr; // Network for supervisors
219 char *AdminPath;
221 char *pidPath;
222 char *ConfigFN;
223 char **inArgv;
224 int inArgc;
225 char *SecLib;
226 char *XmiPath;
227 char *XmiParms;
229 int isMeta;
230 int isPeer;
233 int isSolo;
234 char *perfpgm;
238 int FSlim;
239 };
240 namespace XrdCms
241 {
242 extern XrdCmsAdmin Admin;
243 extern XrdCmsConfig Config;
245 extern XrdCmsXmi *Xmi_Chmod;
246 extern XrdCmsXmi *Xmi_Load;
247 extern XrdCmsXmi *Xmi_Mkdir;
248 extern XrdCmsXmi *Xmi_Mkpath;
249 extern XrdCmsXmi *Xmi_Prep;
250 extern XrdCmsXmi *Xmi_Rename;
251 extern XrdCmsXmi *Xmi_Remdir;
252 extern XrdCmsXmi *Xmi_Remove;
253 extern XrdCmsXmi *Xmi_Select;
254 extern XrdCmsXmi *Xmi_Space;
255 extern XrdCmsXmi *Xmi_Stat;
256 }
257 #endif