39 #include <sys/param.h>
40 #include <sys/resource.h>
42 #include <sys/types.h>
44 #include "XrdVersion.hh"
119 #define Duplicate(x,y) if (y) free(y); y = strdup(x)
121 #define TS_Xeq(x,m) if (!strcmp(x,var)) return m(Config, Eroute);
123 #define TS_String(x,m) if (!strcmp(x,var)) {Duplicate(val,m); return 0;}
125 #define TS_List(x,m,v) if (!strcmp(x,var)) \
126 {m.Insert(new XrdOucPList(val, v); return 0;}
128 #define TS_Char(x,m) if (!strcmp(x,var)) {m = val[0]; return 0;}
130 #define TS_Add(x,m,v,s) if (!strcmp(x,var)) {m |= (v|s); return 0;}
131 #define TS_Ade(x,m,v,s) if (!strcmp(x,var)) {m |= (v|s); Config.Echo(); return 0;}
132 #define TS_Rem(x,m,v,s) if (!strcmp(x,var)) {m = (m & ~v) | s; return 0;}
134 #define TS_Set(x,m,v) if (!strcmp(x,var)) {m = v; Config.Echo(); return 0;}
136 #define xrdmax(a,b) (a < b ? b : a)
208 prPBits = (
long long)sysconf(_SC_PAGESIZE);
242 static const int maxFD = 1048576;
251 Eroute.
Say(
"++++++ Storage system initialization started.");
257 ConfigFN = (configfn && *configfn ? strdup(configfn) : 0);
261 if (getrlimit(RLIMIT_NOFILE, &rlim))
262 {Eroute.
Emsg(
"Config", errno,
"get fd limit");
263 rlim.rlim_cur = maxFD;
265 else {
if (rlim.rlim_max == RLIM_INFINITY)
266 {rlim.rlim_cur = maxFD;
269 if (rlim.rlim_cur != rlim.rlim_max)
270 {rlim.rlim_cur = rlim.rlim_max;
275 {
if (setrlimit(RLIMIT_NOFILE, &rlim))
276 Eroute.
Emsg(
"Config", errno,
"set fd limit");
278 }
else {
FDFence =
static_cast<int>(rlim.rlim_cur)>>1;
308 Solitary = ((val = getenv(
"XRDREDIRECT")) && !strcmp(val,
"Q"));
310 {
const char *m1 = (
Solitary ?
"standalone " : 0);
311 const char *m2 = (
pfcMode ?
"pfc " : 0);
312 if (m1 || m2) Eroute.
Say(
"++++++ Configuring ", m1, m2,
"mode . . .");
345 if (NoGo) Eroute.
Emsg(
"Config",
"space initialization failed");
355 if (!(val = getenv(
"XRDOSSCSCAN")) || strcmp(val,
"off"))
357 (
void *)&
cscanint, 0,
"space scan")))
358 Eroute.
Emsg(
"Config", retc,
"create space scan thread");
376 val = (NoGo ? (
char *)
"failed." : (
char *)
"completed.");
377 Eroute.
Say(
"------ Storage system initialization ", val);
385 #define XrdOssConfig_Val(base, opt) \
386 (Have ## base ? " oss." #opt " " : ""), \
387 (Have ## base ? base : ""), \
388 (Have ## base ? "\n" : "")
390 #define XrdOssConfig_Vop(base, opt, optchk0, opt1, opt2, optchk1, opt3, opt4) \
391 (Have ## base ? " oss." #opt " " : ""), \
392 (Have ## base ? (optchk0 ? opt1 : opt2) : ""), \
393 (Have ## base ? (optchk1 ? opt3 : opt4) : ""), \
394 (Have ## base ? base : ""), \
395 (Have ## base ? "\n" : "")
399 char buff[4096], *cloc;
409 int HaveN2N_Lib = (
N2N_Lib != 0);
414 snprintf(buff,
sizeof(buff),
"Config effective %s oss configuration:\n"
415 " oss.alloc %lld %d %d\n"
416 " oss.spacescan %d\n"
417 " oss.fdlimit %d %d\n"
418 " oss.maxsize %lld\n"
426 " oss.xfr %d deny %d keep %d",
454 {Eroute.
Say(
" oss.space ", fp->
Name(),
470 const unsigned long long conFlags =
477 unsigned long long oflag, pflag;
496 {oflag = pflag = fp->
Flag();
502 if (oflag != pflag) fp->
Set(pflag);
522 unsigned long long flags = 0;
534 {flags |= fp->
Flag();
547 #if !defined(_POSIX_MAPPED_FILES)
549 {Eroute.
Say(
"Config warning: memory mapped files not supported; "
550 "feature disabled.");
559 #elif !defined(_POSIX_MEMLOCK)
561 {Eroute.
Say(
"Config warning: memory locked files not supported; "
562 "feature disabled.");
618 {Eroute.
Say(
"Config warning: config file not specified; defaults assumed.");
625 {Eroute.
Emsg(
"Config", errno,
"open config file",
ConfigFN);
629 static const char *cvec[] = {
"*** oss plugin config:", 0 };
634 while((var =
Config.GetMyFirstWord()))
635 {
if (!strncmp(var,
"oss.", 4))
637 else if (!strcmp(var,
"all.export")
643 if ((retc =
Config.LastError()))
644 NoGo = Eroute.
Emsg(
"Config", retc,
"read config file",
ConfigFN);
678 bool zAssign =
false;
681 else {zAssign =
true; what =
"assign space ";}
682 const char *grp = fp->
Name();
684 while(fsg) {
if (!strcmp(fsg->
group,grp))
break; fsg = fsg->
next;}
685 if (!fsg) Eroute.
Say(
"Config warning: unable to ", what, grp,
686 " to ", fp->
Path(),
"; space not defined.");
697 struct stat statbuff;
698 char Pfn[MAXPATHLEN+1+8], *Slash;
706 while(
stat(Pfn, &statbuff))
707 {
if (!(Slash = rindex(Pfn,
'/')) || Slash == Pfn)
return;
721 unsigned long long &flags,
int noMSS)
743 Eroute.
Say(
"Config warning: 'all.export ",
Path,
744 " nocheck mig r/w' allows file inconsistentcy!");
755 unsigned long long flags;
756 int noMSS, needRSS = 0, NoGo = 0;
762 noMSS = ((tp = getenv(
"XRDREDIRECT"))
763 && (!strcmp(tp,
"R") || !strcmp(tp,
"M"))) |
Solitary;
790 if (!noMSS && !
RSSCmd && What)
791 {Eroute.
Emsg(
"Config", fp->
Path(), What,
792 "export attribute but rsscmd not specified.");
794 }
else if (What) needRSS = 1;
798 fp->
Set(flags); fp = fp->
Next();
813 {Eroute.
Say(
"Config warning: 'stagecmd' ignored; no stageable paths present.");
820 {Eroute.
Say(
"Config warning: 'rsscmd' ignored; no path exported with "
821 "check, dread, or rcreate.");
829 Eroute.
Say(
"++++++ Remote Storage System interface initialization started.");
841 {
const int AMode = S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH;
846 getenv(
"XRDADMINPATH"), AMode);
853 if ((tp = getenv(
"XRDOFSEVENTS")))
854 {
char sebuff[MAXPATHLEN+8];
862 tp = (NoGo ? (
char *)
"failed." : (
char *)
"completed.");
863 Eroute.
Say(
"------ Remote Storage System interface initialization ", tp);
875 int numt, retc, NoGo = 0;
880 while(*tp && *tp ==
' ') tp++;
882 do {tp++;}
while(*tp ==
' ');
889 if ((sp = index(
StageCmd,
' '))) *sp =
'\0';
907 Eroute.
Emsg(
"Config", retc,
"create staging thread");
935 const char *stName2 =
"?XrdOssStatInfoInit2";
974 StatsDev(StatsDev *dP, dev_t dn) : Next(dP), st_dev(dn) {}
979 StatsDev *dP1st = 0, *dP, *dPp;
981 char LPath[MAXPATHLEN+1], PPath[MAXPATHLEN+1], *cP;
990 {strcpy(LPath, fP->
Path());
992 if (
stat(PPath, &
Stat) && (cP = rindex(LPath,
'/')))
997 while(dP && dP->st_dev !=
Stat.st_dev) dP = dP->Next;
1002 lenDP += strlen(LPath) + strlen(PPath);
numDP++;
1003 dP1st =
new StatsDev(dP1st,
Stat.st_dev);
1004 }
while ((fP = fP->
Next()));
1016 while(dP) {dPp = dP; dP = dP->Next;
delete dPp;}
1024 char *Slash, pP[MAXPATHLEN+1];
1028 while((Slash = rindex(lP+1,
'/')))
1036 if (Slash) *Slash =
'/';
1045 char myVar[80], buff[2048], *val;
1070 if ((nosubs = !strcmp(var,
"stagemsg"))) myEnv =
Config.SetEnv(0);
1075 strlcpy(myVar, var,
sizeof(myVar));
1081 if (!
Config.GetRest(buff,
sizeof(buff)))
1082 {Eroute.
Emsg(
"Config",
"arguments too long for", var);
1083 if (nosubs)
Config.SetEnv(myEnv);
1090 if (nosubs)
Config.SetEnv(myEnv);
1095 {Eroute.
Emsg(
"Config",
"no value for directive", var);
1112 Eroute.
Say(
"Config warning: ignoring unknown directive '",var,
"'.");
1144 if (!(val =
Config.GetWord()))
1145 {Eroute.
Emsg(
"Config",
"alloc minfree not specified");
return 1;}
1146 if (strcmp(val,
"*") &&
1149 if ((val =
Config.GetWord()))
1150 {
if (strcmp(val,
"*") &&
1151 XrdOuca2x::a2i(Eroute,
"alloc headroom",val,&hdrm,0,100))
return 1;
1153 if ((val =
Config.GetWord()))
1154 {
if (strcmp(val,
"*") &&
1155 XrdOuca2x::a2i(Eroute,
"alloc fuzz", val, &fuzz, 0, 100))
return 1;
1188 {
if (isXA) Eroute.
Say(
"Config warning: 'oss.cache' is deprecated; "
1189 "use 'oss.space' instead!");
1190 else {Eroute.
Say(
"Config failure: non-xa spaces are no longer "
1214 if (!(val =
Config.GetWord()))
1215 {Eroute.
Emsg(
"Config",
"cachescan not specified");
return 1;}
1261 int fence = 0, FDHalf =
FDLimit>>1;
1263 if (!(val =
Config.GetWord()))
1264 {Eroute.
Emsg(
"Config",
"fdlimit fence not specified");
return 1;}
1266 if (!strcmp(val,
"*"))
FDFence = FDHalf;
1267 else {
if (
XrdOuca2x::a2i(Eroute,
"fdlimit fence",val,&fence,0))
return 1;
1268 FDFence = (fence < FDHalf ? fence : FDHalf);
1271 while(
Config.GetWord()) {}
1295 if (!(val =
Config.GetWord()))
1296 {Eroute.
Emsg(
"Config",
"maxsize value not specified");
return 1;}
1297 if (
XrdOuca2x::a2sz(Eroute,
"maxsize", val, &msz, 1024*1024))
return 1;
1326 int i, j, V_check=-1, V_preld = -1, V_on=-1;
1327 long long V_max = 0;
1329 static struct mmapopts {
const char *opname;
int otyp;
1330 const char *opmsg;} mmopts[] =
1333 {
"preload", 1,
"memfile preload"},
1334 {
"check", 2,
"memfile check"},
1335 {
"max", 3,
"memfile max"}};
1336 int numopts =
sizeof(mmopts)/
sizeof(
struct mmapopts);
1338 if (!(val =
Config.GetWord()))
1339 {Eroute.
Emsg(
"Config",
"memfile option not specified");
return 1;}
1342 {
for (i = 0; i < numopts; i++)
1343 if (!strcmp(val, mmopts[i].opname))
break;
1345 Eroute.
Say(
"Config warning: ignoring invalid memfile option '",val,
"'.");
1346 else {
if (mmopts[i].otyp > 1 && !(val =
Config.GetWord()))
1347 {Eroute.
Emsg(
"Config",
"memfile",mmopts[i].opname,
1348 "value not specified");
1351 switch(mmopts[i].otyp)
1352 {
case 1: V_preld = 1;
1354 case 2:
if (!strcmp(
"xattr",val)
1355 || !strcmp(
"lock", val)
1356 || !strcmp(
"map", val)
1357 || !strcmp(
"keep", val)) V_check=1;
1358 else {Eroute.
Emsg(
"Config",
1359 "mmap check argument not xattr");
1363 case 3: j = strlen(val);
1364 if (val[j-1] ==
'%')
1367 val, &j, 1, 1000))
return 1;
1370 mmopts[i].opmsg, val, &V_max,
1371 10*1024*1024))
return 1;
1373 default: V_on = 0;
break;
1402 char *val, parms[1040];
1406 if (!(val =
Config.GetWord()) || !val[0])
1407 {Eroute.
Emsg(
"Config",
"namelib not specified");
return 1;}
1416 if (!
Config.GetRest(parms,
sizeof(parms)))
1417 {Eroute.
Emsg(
"Config",
"namelib parameters too long");
return 1;}
1419 N2N_Parms = (*parms ? strdup(parms) : 0);
1448 if (*(pP->
Path()) ==
'/')
return 0;
1452 if (*(pP->
Path()) ==
'*')
1459 Eroute.
Emsg(
"Config",
"Unsupported export -", pP->
Path());
1489 static const long long m16 = 16777216LL;
1491 long long lim = 1048576;
1492 int depth, qeq = 0, qsz = 128;
1494 if (!(val =
Config.GetWord()))
1495 {Eroute.
Emsg(
"Config",
"preread depth not specified");
return 1;}
1497 if (!strcmp(val,
"on")) depth = 3;
1498 else if (
XrdOuca2x::a2i(Eroute,
"preread depth",val,&depth,0, 1024))
1501 while((val =
Config.GetWord()))
1502 {
if (!strcmp(val,
"limit"))
1503 {
if (!(val =
Config.GetWord()))
1504 {Eroute.
Emsg(
"Config",
"preread limit not specified");
1510 else if (!strcmp(val,
"qsize"))
1511 {
if (!(val =
Config.GetWord()))
1512 {Eroute.
Emsg(
"Config",
"preread qsize not specified");
1518 {Eroute.
Emsg(
"Config",
"preread qsize must be >= depth");
1522 else {Eroute.
Emsg(
"Config",
"invalid preread option -",val);
return 1;}
1525 if (lim <
prPSize || !qsz) depth = 0;
1527 {qsz = qsz/(depth/2+1);
1528 if (qsz < depth) qsz = depth;
1561 bool isAsgn, isStar;
1565 if (!(val =
Config.GetWord()))
1566 {Eroute.
Emsg(
"Config",
"space name not specified");
return 1;}
1568 {Eroute.
Emsg(
"Config",
"excessively long space name - ",val);
return 1;}
1573 if (!(val =
Config.GetWord()) || !(*val))
1574 {Eroute.
Emsg(
"Config",
"space path not specified");
return 1;}
1578 if (((isAsgn = !strcmp(
"assign",val)) || ! strcmp(
"default",val)) && !isCD)
1584 if ((isStar = val[k] ==
'*')) val[k--] = 0;
1585 else while(k > 0 && val[k] ==
'/') val[k--] = 0;
1587 if (k >= MAXPATHLEN || val[0] !=
'/' || (k < 2 && !isStar))
1588 {Eroute.
Emsg(
"Config",
"invalid space path - ", val);
return 1;}
1593 do {k = fn.
replace(
"/./",
"/");}
while(k);
1594 do {k = fn.
replace(
"//",
"/");}
while(k);
1600 {
if ((val =
Config.GetWord()))
1601 {
if (strcmp(
"xa", val))
1602 {Eroute.
Emsg(
"Config",
"invalid cache option - ",val);
return 1;}
1604 }
else {*isCD = 0; sInfo.
isXA =
false;}
1606 if ((val =
Config.GetWord()) && !strcmp(
"chkmount", val))
1607 {
if (!(val =
Config.GetWord()))
1608 {Eroute.
Emsg(
"Config",
"chkmount ID not specified");
return 1;}
1610 {Eroute.
Emsg(
"Config",
"excessively long mount name - ",val);
1615 if ((val =
Config.GetWord()))
1616 {
if (!strcmp(
"nofail", val)) sInfo.
noFail =
true;
1617 else {Eroute.
Emsg(
"Config",
"invalid space option - ",val);
1637 int dFD, rc, snum = 0;
1638 bool chkPfx, failed =
false;
1640 if (basepath.endswith(
'/')) chkPfx =
false;
1641 else {
int pos = basepath.rfind(
'/');
1642 pfx = &basepath[pos+1];
1643 basepath.keep(0, pos+1);
1647 if ((dFD=
open(basepath.c_str(),O_DIRECTORY)) < 0 || !(dirP=fdopendir(dFD)))
1648 {Eroute.
Emsg(
"Config",errno,
"open space directory",fn.
c_str());
return 1;}
1652 {
if (!strcmp(dp->d_name,
".") || !strcmp(dp->d_name,
"..")
1653 || (chkPfx && strncmp(dp->d_name,pfx.c_str(),pfx.length())))
continue;
1655 if (fstatat(dFD, dp->d_name, &
Stat, AT_SYMLINK_NOFOLLOW))
1656 {basepath += dp->d_name;
1660 if ((
Stat.st_mode & S_IFMT) == S_IFDIR)
1661 {fn = basepath; fn += dp->d_name; fn +=
'/';
1671 Eroute.
Emsg(
"Config", errno,
"process space directory", fn.
c_str());
1673 Eroute.
Say(
"Config warning: no space directories found in ",
1677 return rc != 0 || failed;
1683 const char *grp,
bool isAsgn)
1691 if (!path || !path[0])
1692 {Eroute.
Emsg(
"Config",
"space path not specified");
return 1;}
1701 }
while((path =
Config.GetWord()));
1723 mFile += rindex(mPath.
c_str(),
'/')+1;
1724 mPath +=
'/'; mPath += mFile;
1727 snprintf(buff,
sizeof(buff),
"%s@%s; ",
1729 Eroute.
Say((sInfo.
noFail ?
"Config warning:" :
"Config failure:"),
1730 " Unable to verify mount point ", buff,
XrdSysE2T(errno));
1731 return (sInfo.
noFail ? 1 : 0);
1741 snprintf(buff,
sizeof(buff),
"create %s space at", sInfo.
sName.
c_str());
1743 if (fsp)
delete fsp;
1770 char *val, buff[2048], *bp = buff;
1771 int vlen, blen =
sizeof(buff)-1, isAsync = 0, isCreate = 0;
1775 if ((val =
Config.GetWord()))
1776 if ((isAsync = !strcmp(val,
"async")) || !strcmp(val,
"sync"))
1782 if ((isCreate = !strcmp(val,
"creates"))) val =
Config.GetWord();
1786 if (!val) {Eroute.
Emsg(
"Config",
"stagecmd not specified");
return 1;}
1790 do {
if ((vlen = strlen(val)) >= blen)
1791 {Eroute.
Emsg(
"Config",
"stagecmd arguments too long");
break;}
1792 *bp =
' '; bp++; strcpy(bp, val); bp += vlen; blen -= vlen;
1793 }
while((val =
Config.GetWord()));
1796 *bp =
'\0'; val = buff+1;
1828 char *val, parms[1040];
1832 if (!(val =
Config.GetWord()) || !val[0])
1833 {Eroute.
Emsg(
"Config",
"statlib not specified");
return 1;}
1838 do{
if (!strcmp(val,
"-2"))
STT_V2 = 1;
1839 else if (!strcmp(val,
"arevents") || !strcmp(val,
"-arevents"))
STT_DoARE=1;
1840 else if (!strcmp(val,
"non2n") || !strcmp(val,
"-non2n"))
STT_DoN2N=0;
1841 else if (!strcmp(val,
"preopen") || !strcmp(val,
"-preopen"))
STT_PreOp=1;
1843 }
while((val =
Config.GetWord()) && val[0]);
1847 if (!val || !(*val))
1848 {Eroute.
Emsg(
"Config",
"statlib not specified");
return 1;}
1857 if (!
Config.GetRest(parms,
sizeof(parms)))
1858 {Eroute.
Emsg(
"Config",
"statlib parameters too long");
return 1;}
1860 STT_Parms = (*parms ? strdup(parms) : 0);
1881 static struct traceopts {
const char *opname;
int opval;} tropts[] =
1888 int i, neg, trval = 0, numopts =
sizeof(tropts)/
sizeof(
struct traceopts);
1890 if (!(val =
Config.GetWord()))
1891 {Eroute.
Emsg(
"Config",
"trace option not specified");
return 1;}
1893 {
if (!strcmp(val,
"off")) trval = 0;
1894 else {
if ((neg = (val[0] ==
'-' && val[1]))) val++;
1895 for (i = 0; i < numopts; i++)
1896 {
if (!strcmp(val, tropts[i].opname))
1897 {
if (neg) trval &= ~tropts[i].opval;
1898 else trval |= tropts[i].opval;
1903 Eroute.
Say(
"Config warning: ignoring invalid trace option '",val,
"'.");
1935 if (!(val =
Config.GetWord()))
1936 {Eroute.
Emsg(
"Config",
"usage option not specified");
return 1;}
1939 {
if (!strcmp(
"nolog", val))
1941 else if (!strcmp(
"log" , val))
1943 if (!(val =
Config.GetWord()))
1944 {Eroute.
Emsg(
"Config",
"usage log path not specified");
1948 {Eroute.
Emsg(
"Config",
"usage log path not absolute");
1952 if (!(val =
Config.GetWord()) || strcmp(
"sync", val))
1954 if (!(val =
Config.GetWord()))
1955 {Eroute.
Emsg(
"Config",
"log sync value not specified");
1962 else if (!strcmp(
"noquotafile",val))
1964 else if (!strcmp(
"quotafile",val))
1966 if (!(val =
Config.GetWord()))
1967 {Eroute.
Emsg(
"Config",
"quota file not specified");
1970 QFile = strdup(val);
1972 else {Eroute.
Emsg(
"Config",
"invalid usage option -",val);
return 1;}
2006 static const int maxfdln = 256;
2007 const char *wantParm = 0;
2010 long long speed = 9*1024*1024;
2012 int htime = 3*60*60;
2016 while((val =
Config.GetWord()))
2017 {
if (!strcmp(
"deny", val))
2018 {wantParm =
"xfr deny";
2019 if ((val =
Config.GetWord()))
2025 else if (!strcmp(
"fdir", val))
2026 {wantParm =
"xfr fdir";
2027 if ((val =
Config.GetWord()))
2031 {Eroute.
Emsg(
"Config",
"xfr fdir path too long");
2038 else if (!strcmp(
"keep", val))
2039 {wantParm =
"xfr keep";
2040 if ((val =
Config.GetWord()))
2046 else if (!strcmp(
"up", val)) {upon = 1; wantParm = 0;}
2053 if (!val) {
if (!wantParm)
return 0;
2054 else {Eroute.
Emsg(
"Config", wantParm,
"value not specified");
2059 if (strcmp(val,
"*") &&
XrdOuca2x::a2i(Eroute,
"xfr threads",val,&thrds,1))
2062 if ((val =
Config.GetWord()))
2063 {
if (strcmp(val,
"*") &&
2066 if ((val =
Config.GetWord()))
2067 {
if (strcmp(val,
"*") &&
2070 if ((val =
Config.GetWord()))
2071 if (strcmp(val,
"*") &&
2095 else rwmode =
" r/w";
2105 ss += (flags &
XRDEXP_MIG ?
" mig" :
" nomig");
2109 }
else ss +=
" cache";
2115 ss += (flags &
XRDEXP_MLOK ?
" mlock" :
" nomlock");
2118 Eroute.
Say(pfx, pname, rwmode, ss.c_str());
void * XrdOssxfr(void *carg)
#define XrdOssConfig_Vop(base, opt, optchk0, opt1, opt2, optchk1, opt3, opt4)
const char * XrdOssErrorText[]
#define XrdOssConfig_Val(base, opt)
void * XrdOssCacheScan(void *carg)
XrdOucPListAnchor * XrdOssRPList
XrdOssStatInfo_t(* XrdOssStatInfoInit_t)(XrdOss *native_oss, XrdSysLogger *Logger, const char *config_fn, const char *parms)
The typedef that describes the XRdOssStatInfoInit external.
XrdOssStatInfo2_t(* XrdOssStatInfoInit2_t)(XrdOss *native_oss, XrdSysLogger *Logger, const char *config_fn, const char *parms, XrdOucEnv *envP)
int stat(const char *path, struct stat *buf)
struct dirent * readdir(DIR *dirp)
int open(const char *path, int oflag,...)
const char * XrdSysE2T(int errcode)
int Init(int opX, const char *aPath, int aMode, const char *qPath=0)
static int Add(const char *Path)
static XrdOssCache_Group * fsgroups
static int Init(const char *UDir, const char *Qfile, int isSOL, int usync=0)
static void * Scan(int cscanint)
static void List(const char *lname, XrdSysError &Eroute)
static void MapDevs(bool dBug=false)
static void Set(int V_off, int V_preld, int V_check)
static void Display(XrdSysError &Eroute)
static const int maxSNlen
void Config_Display(XrdSysError &)
int xstg(XrdOucStream &Config, XrdSysError &Eroute)
int ConfigXeq(char *, XrdOucStream &, XrdSysError &)
int Configure(const char *, XrdSysError &, XrdOucEnv *envP)
int xtrace(XrdOucStream &Config, XrdSysError &Eroute)
int xstl(XrdOucStream &Config, XrdSysError &Eroute)
void ConfigSpace(XrdSysError &Eroute)
int ConfigStage(XrdSysError &Eroute)
int xusage(XrdOucStream &Config, XrdSysError &Eroute)
int xspace(XrdOucStream &Config, XrdSysError &Eroute, int *isCD=0)
void List_Path(const char *, const char *, unsigned long long, XrdSysError &)
int xmemf(XrdOucStream &Config, XrdSysError &Eroute)
void * Stage_In(void *carg)
void ConfigMio(XrdSysError &Eroute)
void ConfigStats(XrdSysError &Eroute)
int xcachescan(XrdOucStream &Config, XrdSysError &Eroute)
int xfdlimit(XrdOucStream &Config, XrdSysError &Eroute)
int ConfigN2N(XrdSysError &Eroute, XrdOucEnv *envP)
XrdOucName2Name * the_N2N
int GenLocalPath(const char *, char *)
XrdOucName2Name * lcl_N2N
int xspaceBuild(OssSpaceConfig &sInfo, XrdSysError &Eroute)
int xprerd(XrdOucStream &Config, XrdSysError &Eroute)
int ConfigStatLib(XrdSysError &Eroute, XrdOucEnv *envP)
int xpath(XrdOucStream &Config, XrdSysError &Eroute)
XrdVersionInfo * myVersion
int xcache(XrdOucStream &Config, XrdSysError &Eroute)
void ConfigSpath(XrdSysError &Eroute, const char *Pn, unsigned long long &Fv, int noMSS)
int Stat(const char *, struct stat *, int opts=0, XrdOucEnv *Env=0)
int ConfigStageC(XrdSysError &Eroute)
int xxfr(XrdOucStream &Config, XrdSysError &Eroute)
unsigned long long DirFlags
int ConfigProc(XrdSysError &Eroute)
void ConfigCache(XrdSysError &Eroute, bool pass2=false)
int xmaxsz(XrdOucStream &Config, XrdSysError &Eroute)
int xdefault(XrdOucStream &Config, XrdSysError &Eroute)
int xnml(XrdOucStream &Config, XrdSysError &Eroute)
XrdOucName2Name * rmt_N2N
int xalloc(XrdOucStream &Config, XrdSysError &Eroute)
char * Get(const char *varname)
void PutPtr(const char *varname, void *value)
static unsigned long long ParseDefs(XrdOucStream &Config, XrdSysError &Eroute, unsigned long long Flags)
static XrdOucPList * ParsePath(XrdOucStream &Config, XrdSysError &Eroute, XrdOucPListAnchor &Export, unsigned long long Defopts)
int Parse(const char *oname, char *msg)
XrdOucName2Name * Load(const char *libName, XrdVersionInfo &urVer, XrdOucEnv *envP=0)
void Default(unsigned long long x)
void Insert(XrdOucPList *newitem)
XrdOucPList * Match(const char *pathname)
void Defstar(unsigned long long x)
unsigned long long Flag()
void * Resolve(const char *symbl, int mcnt=1)
int Setup(const char *prog, XrdSysError *errP=0, int(*Proc)(XrdOucStream *, char **, int)=0)
const char * c_str() const
int erasefromend(int sz=0)
int replace(const char *s1, const char *s2, int from=0, int to=-1)
static const char * InstName(int TranOpt=0)
static int a2i(XrdSysError &, const char *emsg, const char *item, int *val, int minv=-1, int maxv=-1)
static int a2sz(XrdSysError &, const char *emsg, const char *item, long long *val, long long minv=-1, long long maxv=-1)
static int a2tm(XrdSysError &, const char *emsg, const char *item, int *val, int minv=-1, int maxv=-1)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
static void addTable(XrdSysError_Table *etp)
void Say(const char *text1, const char *text2=0, const char *txt3=0, const char *text4=0, const char *text5=0, const char *txt6=0)
XrdSysLogger * logger(XrdSysLogger *lp=0)
static int Run(pthread_t *, void *(*proc)(void *), void *arg, int opts=0, const char *desc=0)
XrdVERSIONINFODEF(myVersion, cmsclient, XrdVNUMBER, XrdVERSION)
const XrdOucString & sPath
const XrdOucString & mName
const XrdOucString & sName