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