#ifndef _CMS_CONFIG_H_
#define _CMS_CONFIG_H_
/******************************************************************************/
/* */
/* X r d C m s C o n f i g . h h */
/* */
/* (c) 2011 by the Board of Trustees of the Leland Stanford, Jr., University */
/* All Rights Reserved */
/* Produced by Andrew Hanushevsky for Stanford University under contract */
/* DE-AC02-76-SFO0515 with the Department of Energy */
/* */
/* This file is part of the XRootD software suite. */
/* */
/* XRootD is free software: you can redistribute it and/or modify it under */
/* the terms of the GNU Lesser General Public License as published by the */
/* Free Software Foundation, either version 3 of the License, or (at your */
/* option) any later version. */
/* */
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
/* COPYING (GPL license). If not, see . */
/* */
/* The copyright holder's institutional names and contributor's names may not */
/* be used to endorse or promote products derived from this software without */
/* specific prior written permission of the institution or contributor. */
/******************************************************************************/
#include
#include "Xrd/XrdJob.hh"
#include "XrdCms/XrdCmsPList.hh"
#include "XrdCms/XrdCmsTypes.hh"
#include "XrdOuc/XrdOucPList.hh"
#include "XrdOuc/XrdOucTList.hh"
class XrdInet;
class XrdScheduler;
class XrdNetSecurity;
class XrdNetSocket;
class XrdOss;
class XrdSysError;
class XrdOucName2Name;
class XrdOucProg;
class XrdOucStream;
class XrdCmsAdmin;
struct XrdVersionInfo;
class XrdCmsConfig : public XrdJob
{
public:
int Configure1(int argc, char **argv, char *cfn);
int Configure2();
int ConfigXeq(char *var, XrdOucStream &CFile, XrdSysError *eDest);
void DoIt();
int GenLocalPath(const char *oldp, char *newp);
int asManager() {return isManager;}
int asMetaMan() {return isManager && isMeta;}
int asPeer() {return isPeer;}
int asProxy() {return isProxy;}
int asServer() {return isServer;}
int asSolo() {return isSolo;}
int LUPDelay; // Maximum delay at look-up
int LUPHold; // Maximum hold at look-up (in millisconds)
int DELDelay; // Maximum delay for deleting an offline server
int DRPDelay; // Maximum delay for dropping an offline server
int PSDelay; // Maximum delay time before peer is selected
int RWDelay; // R/W lookup delay handling (0 | 1 | 2)
int QryDelay; // Query Response Deadline
int QryMinum; // Query Response Deadline Minimum Available
int SRVDelay; // Minimum delay at startup
int SUPCount; // Minimum server count
int SUPLevel; // Minimum server count as floating percentage
int SUPDelay; // Maximum delay when server count falls below min
int SUSDelay; // Maximum delay when suspended
int MaxLoad; // Maximum load
int MaxDelay; // Maximum load delay
int MsgTTL; // Maximum msg lifetime
int RefReset; // Min seconds before a global ref count reset
int RefTurn; // Min references before a global ref count reset
int AskPerf; // Seconds between perf queries
int AskPing; // Number of ping requests per AskPerf window
int PingTick; // Ping clock value
int LogPerf; // AskPerf intervals before logging perf
int PortTCP; // TCP Port to listen on
int PortSUP; // TCP Port to listen on (supervisor)
XrdInet *NetTCP; // -> Network Object
int P_cpu; // % CPU Capacity in load factor
int P_dsk; // % DSK Capacity in load factor
int P_fuzz; // % Capacity to fuzz when comparing
int P_gsdf; // % Global share default (0 -> no default)
int P_gshr; // % Global share of requests allowed
int P_io; // % I/O Capacity in load factor
int P_load; // % MSC Capacity in load factor
int P_mem; // % MEM Capacity in load factor
int P_pag; // % PAG Capacity in load factor
char DoMWChk; // When true (default) perform multiple write check
char DoHnTry; // When true (default) use hostnames for try redirs
char nbSQ; // Non-blocking send queue handling option
char Rsvd; // Reserved for alignment
int DiskMin; // Minimum MB needed of space in a partition
int DiskHWM; // Minimum MB needed of space to requalify
short DiskMinP; // Minimum MB needed of space in a partition as %
short DiskHWMP; // Minimum MB needed of space to requalify as %
int DiskLinger; // Manager Only
int DiskAsk; // Seconds between disk space reclaculations
int DiskWT; // Seconds to defer client while waiting for space
int DiskSS; // This is a staging server
int DiskOK; // This configuration has data
char sched_RR; // 1 -> Simply do round robin scheduling
char sched_Pack; // 1 -> Pick oldest node (>1 same but wait for resps)
char sched_Level; // 1 -> Use load-based level for "pack" selection
char sched_Force; // 1 -> Client cannot select mode
int doWait; // 1 -> Wait for a data end-point
int adsPort; // Alternate server port
int adsMon; // Alternate server monitoring
char *adsProt; // Alternate server protocol
XrdVersionInfo *myVInfo; // xrootd version used in compilation
XrdOucName2Name *xeq_N2N; // Server or Manager (non-null if library loaded)
XrdOucName2Name *lcl_N2N; // Server Only
char *ossLib; // -> oss library
char *ossParms; // -> oss library parameters
char *VNID_Lib; // Server Only
char *VNID_Parms; // Server Only
char *N2N_Lib; // Server Only
char *N2N_Parms; // Server Only
char *LocalRoot; // Server Only
char *RemotRoot; // Manager
char *myPaths; // Exported paths
short RepStats; // Statistics to report (see RepStat_xxx below)
char TimeZone; // Time zone we are in (|0x80 -> east of UTC)
char myRoleID;
char myRType[4];
char *myRole;
const char *myProg;
const char *myName;
const char *myDomain;
const char *myInsName;
const char *myInstance;
const char *mySID;
const char *myVNID;
const char *mySite;
char *envCGI;
char *cidTag;
const char *ifList;
XrdOucTList *ManList; // From manager directive
XrdOucTList *NanList; // From manager directive (managers only)
XrdOucTList *SanList; // From subcluster directive (managers only)
XrdOss *ossFS; // The filsesystem interface
XrdOucProg *ProgCH; // Server only chmod
XrdOucProg *ProgMD; // Server only mkdir
XrdOucProg *ProgMP; // Server only mkpath
XrdOucProg *ProgMV; // Server only mv
XrdOucProg *ProgRD; // Server only rmdir
XrdOucProg *ProgRM; // Server only rm
XrdOucProg *ProgTR; // Server only trunc
unsigned long long DirFlags;
XrdCmsPList_Anchor PathList;
XrdOucPListAnchor PexpList;
XrdNetSocket *AdminSock;
XrdNetSocket *AnoteSock;
XrdNetSocket *RedirSock;
XrdNetSecurity *Police;
XrdCmsConfig() : XrdJob("cmsd startup") {ConfigDefaults();}
~XrdCmsConfig() {}
// RepStats value via 'cms.repstats" directive
//
static const int RepStat_frq = 0x0001; // Fast Response Queue
static const int RepStat_shr = 0x0002; // Share
static const int RepStat_All = 0xffff; // All
private:
void ConfigDefaults(void);
int ConfigN2N(void);
int ConfigOSS(void);
int ConfigProc(int getrole=0);
int isExec(XrdSysError *eDest, const char *ptype, char *prog);
int MergeP(void);
int PidFile(void);
int setupManager(void);
int setupServer(void);
char *setupSid();
void Usage(int rc);
int xapath(XrdSysError *edest, XrdOucStream &CFile);
int xallow(XrdSysError *edest, XrdOucStream &CFile);
int xaltds(XrdSysError *edest, XrdOucStream &CFile);
int Fsysadd(XrdSysError *edest, int chk, char *fn);
int xblk(XrdSysError *edest, XrdOucStream &CFile, bool iswl=false);
int xcid(XrdSysError *edest, XrdOucStream &CFile);
int xdelay(XrdSysError *edest, XrdOucStream &CFile);
int xdefs(XrdSysError *edest, XrdOucStream &CFile);
int xdfs(XrdSysError *edest, XrdOucStream &CFile);
int xexpo(XrdSysError *edest, XrdOucStream &CFile);
int xfsxq(XrdSysError *edest, XrdOucStream &CFile);
int xfxhld(XrdSysError *edest, XrdOucStream &CFile);
int xlclrt(XrdSysError *edest, XrdOucStream &CFile);
int xmang(XrdSysError *edest, XrdOucStream &CFile);
int xnbsq(XrdSysError *edest, XrdOucStream &CFile);
int xnml(XrdSysError *edest, XrdOucStream &CFile);
int xolib(XrdSysError *edest, XrdOucStream &CFile);
int xperf(XrdSysError *edest, XrdOucStream &CFile);
int xpidf(XrdSysError *edest, XrdOucStream &CFile);
int xping(XrdSysError *edest, XrdOucStream &CFile);
int xprep(XrdSysError *edest, XrdOucStream &CFile);
int xprepm(XrdSysError *edest, XrdOucStream &CFile);
int xreps(XrdSysError *edest, XrdOucStream &CFile);
int xrmtrt(XrdSysError *edest, XrdOucStream &CFile);
int xrole(XrdSysError *edest, XrdOucStream &CFile);
int xsched(XrdSysError *edest, XrdOucStream &CFile);
int xschedm(char *val, XrdSysError *eDest, XrdOucStream &CFile);
int xsecl(XrdSysError *edest, XrdOucStream &CFile);
int xspace(XrdSysError *edest, XrdOucStream &CFile);
int xsubc(XrdSysError *edest, XrdOucStream &CFile);
int xsupp(XrdSysError *edest, XrdOucStream &CFile);
int xtrace(XrdSysError *edest, XrdOucStream &CFile);
int xvnid(XrdSysError *edest, XrdOucStream &CFile);
XrdInet *NetTCPr; // Network for supervisors
char *AdminPath;
int AdminMode;
char *pidPath;
char *ConfigFN;
char **inArgv;
int inArgc;
char *SecLib;
char *blkList;
int blkChk;
int isManager;
int isMeta;
int isPeer;
int isProxy;
int isServer;
int isSolo;
char *perfpgm;
int perfint;
int cachelife;
int emptylife;
int pendplife;
int FSlim;
};
namespace XrdCms
{
extern XrdCmsAdmin Admin;
extern XrdCmsConfig Config;
extern XrdScheduler *Sched;
}
#endif