22 #include "RConfigure.h"
35 #include <sys/types.h>
48 #if (defined(__FreeBSD__) && (__FreeBSD__ < 4)) || \
49 (defined(__APPLE__) && (!defined(MAC_OS_X_VERSION_10_3) || \
50 (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_3)))
52 #define lockf(fd, op, sz) flock((fd), (op))
54 #define F_LOCK (LOCK_EX | LOCK_NB)
57 #define F_ULOCK LOCK_UN
88 #include "compiledata.h"
130 static const char *__crashreporter_info__ = 0;
131 asm(
".desc ___crashreporter_info__, 0x10");
164 Printf(
"Received SIGTERM: terminating");
165 fServ->HandleTermination();
185 fServ->HandleUrgentData();
208 fServ->HandleSigPipe();
229 fServ->HandleSocketInput();
256 Error(
"TProofServLogHandler",
"executing command in pipe");
260 Error(
"TProofServLogHandler",
261 "undefined command (%p) or socket (%p)", (
int *)cmd, s);
279 Error(
"TProofServLogHandler",
"undefined file (%p) or socket (%p)", f, s);
292 fgCmdRtn = WIFEXITED(rc) ? WEXITSTATUS(rc) : -1;
309 while (fgets(line,
sizeof(line),
fFile)) {
310 if ((plf = strchr(line,
'\n')))
352 const char *pfx,
Bool_t on)
360 Error(
"TProofServLogHandlerGuard",
"invalid handler");
364 Error(
"TProofServLogHandlerGuard",
"undefined command");
372 const char *pfx,
Bool_t on)
380 Error(
"TProofServLogHandlerGuard",
"invalid handler");
384 Error(
"TProofServLogHandlerGuard",
"undefined file");
418 printf(
"TShutdownTimer::Notify: checking activity on the input socket\n");
428 printf(
"TShutdownTimer::Notify: input socket: %p: did not show any activity"
429 " during the last %d mins: aborting\n", xs,
fTimeout);
435 printf(
"TShutdownTimer::Notify: input socket: %p: show activity"
436 " %ld secs ago\n", xs, dt / 60000);
466 spid.
Form(
"%d", pid);
487 }
while (pid < 0 && errno == EINTR);
490 pid = _cwait(&status, (intptr_t)p->
GetVal(), 0);
492 if (pid > 0 && pid == p->
GetVal()) {
516 Info (
"Notify",
"session idle for more then %lld secs: terminating",
Long64_t(
fTime)/1000);
522 Warning(
"Notify",
"problems updating session status (errno: %d)", -uss_rc);
526 msg.
Form(
"\n//\n// PROOF session at %s (%s) terminated because idle for more than %lld secs\n"
527 "// Please IGNORE any error message possibly displayed below\n//",
530 msg.
Form(
"\n//\n// PROOF session at %s (%s) terminated because idle for more than %lld secs\n//",
538 Warning(
"Notify",
"fProofServ undefined!");
565 Printf(
"proofserv: command line testing: OK");
577 if (fgVirtMemMax < 0 && gSystem->Getenv(
"PROOF_VIRTMEMMAX")) {
579 if (mmx < kMaxLong && mmx > 0)
583 if (fgVirtMemMax < 0 && gSystem->Getenv(
"ROOTPROOFASHARD")) {
585 if (mmx < kMaxLong && mmx > 0)
590 if (fgResMemMax < 0 && gSystem->Getenv(
"PROOF_RESMEMMAX")) {
592 if (mmx < kMaxLong && mmx > 0)
600 Warning(
"TProofServ",
"requested memory fraction threshold to stop processing"
601 " (MemStop) out of range [0,1] - ignoring");
605 Warning(
"TProofServ",
"requested memory fraction threshold for warning and finer monitoring"
606 " (MemHWM) out of range [0,MemStop] - ignoring");
613 if ((
gEnv->
GetValue(
"Proof.GdbHook",0) == 3 && !test) ||
620 if (argc && *argc >= 4)
621 if (!strcmp(argv[3],
"test"))
625 if (argc && *argc < 2) {
626 Error(
"TProofServ",
"Must have at least 1 arguments (see proofd).");
738 Warning(
"TProofServ",
"bad formatted log file size limit ignored: '%s'", logmx.
Data());
758 char c = (slog[0] ==
'M' || slog[0] ==
'm') ?
'm' :
'a';
759 c = (slog[0] ==
'W' || slog[0] ==
'w') ?
'w' : c;
766 Warning(
"TProofServ",
"request for syslog logging ineffective!");
781 if (enableSchemaEvolution) {
784 Info(
"TProofServ",
"automatic schema evolution in TMessage explicitly disabled");
797 if (opensock.
Length() <= 0)
801 Fatal(
"CreateServer",
"Invalid socket descriptor number (%d)", sock);
825 Info(
"CreateServer",
"Service %s ConfDir %s IsMaster %d\n",
912 TString master =
"proof://__master__";
922 Error(
"CreateServer",
"no plugin manager found");
931 Error(
"CreateServer",
"no plugin found for TProof with a"
940 Error(
"CreateServer",
"plugin for TProof could not be loaded");
952 Error(
"CreateServer",
"plugin for TProof could not be executed");
975 msg.
Form(
"Warning: client version is too old: automatic schema evolution is ineffective.\n"
976 " This may generate compatibility problems between streamed objects.\n"
977 " The advise is to move to ROOT >= 5.21/02 .");
989 Info(
"CreateServer",
" idle timer started (%d secs)", idle_to);
991 Info(
"CreateServer",
" idle timer not started (no idle timeout requested)");
1037 motdname +=
"/etc/proof/noproof";
1039 if ((motd = fopen(motdname,
"r"))) {
1042 while ((c = getc(motd)) != EOF)
1054 Long_t id, flags, modtime, lasttime = 0;
1059 if (time(0) - lasttime > (time_t)86400)
1068 motdname +=
"/etc/proof/motd";
1071 if (modtime > lasttime || show) {
1072 if ((motd = fopen(motdname,
"r"))) {
1075 while ((c = getc(motd)) != EOF)
1085 Int_t fd = creat(last, 0600);
1086 if (fd >= 0)
close(fd);
1100 Error(
"Get",
"problems sending request");
1118 Error(
"Get",
"command %d cannot be executed while processing", what);
1119 }
else if (xrc == -2) {
1120 Error(
"Get",
"unknown command %d ! Protocol error?", what);
1138 Info(
"RestartComputeTime",
"compute time restarted after %f secs (%d entries)",
1167 Error(
"GetNextPacket",
"no progress status object");
1184 req << cacheSize << learnent;
1189 req << totalEntries;
1195 PDB(kLoop, 2) status->Print();
1196 Info(
"GetNextPacket",
"cacheSize: %lld, learnent: %d", cacheSize, learnent);
1204 << bytesRead << totalEntries;
1212 Error(
"GetNextPacket",
"Send() failed, returned %d", rc);
1220 Warning(
"GetNextPacket",
"problems saving partial results");
1231 Error(
"GetNextPacket",
"Recv() failed, returned %d", rc);
1247 PDB(kLoop, 2)
Info(
"GetNextPacket",
"'%s' '%s' '%s' %lld %lld",
1248 e->GetFileName(), e->GetDirectory(),
1249 e->GetObjName(), e->GetFirst(),e->GetNum());
1251 PDB(kLoop, 2)
Info(
"GetNextPacket",
"Done");
1261 PDB(kLoop, 2)
Info(
"GetNextPacket:kPROOF_STOPPROCESS",
"received");
1267 Error(
"GetNextPacket",
"command %d cannot be executed while processing", what);
1268 }
else if (xrc == -2) {
1269 Error(
"GetNextPacket",
"unknown command %d ! Protocol error?", what);
1288 Bool_t xtest = (argc && *argc > 3 && !strcmp(argv[3],
"test")) ?
kTRUE :
kFALSE;
1291 if (xtest && !(isatty(0) == 0 || isatty(1) == 0)) {
1292 Printf(
"proofserv: command line testing: OK");
1296 if (!argc || (argc && *argc <= 1)) {
1297 Fatal(
"GetOptions",
"Must be started from proofd with arguments");
1301 if (!strcmp(argv[1],
"proofserv")) {
1304 }
else if (!strcmp(argv[1],
"proofslave")) {
1308 Fatal(
"GetOptions",
"Must be started as 'proofserv' or 'proofslave'");
1316 Fatal(
"GetOptions",
"ROOTCONFDIR shell variable not set");
1347 Error(
"HandleSocketInput",
"retrieving message from input socket");
1368 emsg.
Form(
"HandleSocketInput: command %d cannot be executed while processing", what);
1369 }
else if (rc == -3) {
1370 emsg.
Form(
"HandleSocketInput: message %d undefined! Protocol error?", what);
1372 emsg.
Form(
"HandleSocketInput: unknown command %d! Protocol error?", what);
1375 }
else if (rc == 2) {
1379 Info(
"HandleSocketInput",
"message of type %d enqueued; sz: %d",
1389 Info(
"HandleSocketInput",
"processing enqueued message of type %d; left: %d",
1399 }
catch (std::bad_alloc &) {
1401 exmsg.
Form(
"caught exception 'bad_alloc' (memory leak?) %s %lld",
1403 }
catch (std::exception &exc) {
1405 exmsg.
Form(
"caught standard exception '%s' %s %lld",
1409 exmsg.
Form(
"caught exception throwing %d %s %lld",
1411 }
catch (
const char *str) {
1413 exmsg.
Form(
"caught exception throwing '%s' %s %lld",
1417 exmsg.
Form(
"caught exception <unknown> %s %lld",
1424 Error(
"HandleSocketInput",
"%s", exmsg.
Data());
1435 exmsg.
Form(
"high-memory footprint detected during Process(...) - terminating");
1436 Error(
"HandleSocketInput",
"%s", exmsg.
Data());
1451 if (rc == 0 && ngwrks == 0 && !masterOnly && !dynamicStartup) {
1452 SendAsynMessage(
" *** No workers left: cannot continue! Terminating ... *** ");
1479 if (!mess)
return -3;
1483 Info(
"HandleSocketInput",
"processing message type %d from '%s'",
1488 Int_t rc = 0, lirc = 0;
1506 Info(
"HandleSocketInput:kMESS_CINT",
"processing: %s...", str);
1525 if (pslb) slb = str;
1557 sscanf(str,
"%d %u", &
fLogLevel, &mask);
1562 Info(
"HandleSocketInput:kPROOF_LOGLEVEL",
"debug level set to %d (mask: 0x%x)",
1593 Warning(
"HandleSocketInput:kPROOF_STATUS",
1594 "kPROOF_STATUS message is obsolete");
1596 Warning(
"HandleSocketInput:kPROOF_STATUS",
"problem sending of request");
1613 Info(
"HandleSocketInput:kPROOF_STOP",
"request for worker %s", ord.Data());
1617 Info(
"HandleSocketInput:kPROOF_STOP",
"got request to terminate");
1630 PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_STOPPROCESS",
"enter");
1637 Info(
"HandleSocketInput:kPROOF_STOPPROCESS",
1638 "recursive mode: enter %d, %ld", aborted, timeout);
1652 PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_PROCESS",
"enter");
1662 PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_SENDOUTPUT",
1663 "worker was asked to send output to master");
1666 Error(
"HandleSocketInput:kPROOF_SENDOUTPUT",
"problems sending output list");
1711 Info(
"HandleSocketInput:kPROOF_MAXQUERIES",
"Enter");
1723 Info(
"HandleSocketInput:kPROOF_CLEANUPSESSION",
"Enter");
1727 Printf(
"Session %s cleaned up", stag.Data());
1729 Printf(
"Could not cleanup session %s", stag.Data());
1739 {
PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_GETENTRIES",
"Enter");
1747 (*mess) >> isTree >> filename >> dir >> objname;
1748 PDB(kGlobal, 2)
Info(
"HandleSocketInput:kPROOF_GETENTRIES",
1749 "Report size of object %s (%s) in dir %s in file %s",
1750 objname.Data(), isTree ?
"T" :
"O",
1753 PDB(kGlobal, 2)
Info(
"HandleSocketInput:kPROOF_GETENTRIES",
1754 "Found %lld %s", entries, isTree ?
"entries" :
"objects");
1759 answ << entries << objname;
1762 PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_GETENTRIES",
"Done");
1786 sscanf(str,
"%1023s %d %ld %d", name, &bin, &size, &fw);
1788 sscanf(str,
"%1023s %d %ld", name, &bin, &size);
1808 if (copytocache && size > 0 &&
1817 Info(
"HandleSocketInput",
"forwarding file: %s", fnam.
Data());
1818 if (
fProof->
SendFile(fnam, opt, (copytocache ?
"cache" :
"")) < 0) {
1819 Error(
"HandleSocketInput",
"forwarding file: %s", fnam.
Data());
1833 (*mess) >> start >> end;
1835 Info(
"HandleSocketInput:kPROOF_LOGFILE",
1836 "Logfile request - byte range: %d - %d", start, end);
1867 PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_CACHE",
"enter");
1880 Warning(
"HandleSocketInput:kPROOF_WORKERLISTS",
1881 "Action meaning-less on worker nodes: protocol error?");
1892 PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_GETSLAVEINFO",
"Enter");
1905 Error(
"HandleSocketInput:kPROOF_GETSLAVEINFO",
1906 "adding a list of worker nodes returned: %d", ret);
1909 Error(
"HandleSocketInput:kPROOF_GETSLAVEINFO",
1910 "getting list of worker nodes returned: %d", retVal);
1930 answ << (
TList *)info;
1936 PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_GETSLAVEINFO",
"Done");
1947 PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_GETTREEHEADER",
"Enter");
1954 Error(
"HandleSocketInput:kPROOF_GETTREEHEADER",
"could not create TProofPlayer instance!");
1957 PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_GETTREEHEADER",
"Done");
1967 {
PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_GETOUTPUTLIST",
"Enter");
1968 TList* outputList = 0;
1972 outputList =
new TList();
1974 outputList =
new TList();
1979 while ( (o =
next()) ) {
1989 PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_GETOUTPUTLIST",
"Done");
1996 Info(
"HandleSocketInput:kPROOF_VALIDATE_DSET",
"Enter");
2002 else dset->Validate();
2009 Info(
"HandleSocketInput:kPROOF_VALIDATE_DSET",
"Done");
2019 PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_DATA_READY",
"Enter");
2022 Long64_t totalbytes = 0, bytesready = 0;
2024 answ << dataready << totalbytes << bytesready;
2026 Error(
"HandleSocketInput:kPROOF_DATA_READY",
2027 "This message should not be sent to slaves");
2031 PDB(kGlobal, 1)
Info(
"HandleSocketInput:kPROOF_DATA_READY",
"Done");
2047 Error(
"HandleSocketInput",
"old client: no or incompatible dataset support");
2072 Info(
"HandleSocketInput:kPROOF_REALTIMELOG",
2073 "setting real-time logging %s", (on ?
"ON" :
"OFF"));
2096 Error(
"HandleSocketInput",
"no queries enqueued");
2109 Error(
"HandleSocketInput",
"adding a list of worker nodes returned: %d", ret);
2122 Error(
"HandleSocketInput",
"error getting list of worker nodes");
2124 Warning(
"HandleSocketInput",
"query was re-queued!");
2126 Error(
"HandleSocketInput",
"unexpected answer: %d", retVal);
2147 " idle or undefined player - ignoring");
2173 smsg.
Form(
"Echo response from %s:%s: %s",
2184 Error(
"HandleSocketInput",
"Can't redirect output");
2199 smsg.
Form(
"*** Echo response from %s:%s ***\n",
2205 while (( line = (
TObjString *)nextLine() )) {
2206 smsg.
Append( line->String() );
2222 Error(
"HandleSocketInput",
"unknown command %d", what);
2247 Int_t mergedWorkers = 0;
2249 PDB(kSubmerger, 1)
Info(
"AcceptResults",
"enter");
2257 Int_t numworkers = 0;
2262 Info(
"AcceptResults",
"interrupt!");
2270 if (sw && sw != (
TSocket *)(-1)) {
2274 Info(
"AcceptResults",
"connection from a worker accepted on merger %s ",
2277 if (++numworkers >= connections)
2281 Info(
"AcceptResults",
"spurious signal found of merging socket");
2284 if (s->
Recv(mess) < 0) {
2285 Error(
"AcceptResults",
"problems receiving message");
2289 Info(
"AcceptResults",
"message received: %d ", (mess ? mess->
What() : 0));
2291 Error(
"AcceptResults",
"message received: %p ", mess);
2300 PDB(kSubmerger, 2)
Info(
"AcceptResults",
" type %d ", type);
2304 Info(
"AcceptResults",
2305 "a new worker has been mergerd. Total merged workers: %d",
2311 PDB(kSubmerger, 2)
Info(
"AcceptResults",
"removing %p (has been merged)", o);
2314 PDB(kSubmerger, 2)
Info(
"AcceptResults",
"%p not merged yet", o);
2322 for (
Int_t i =0; i< size; ++i){
2324 PDB(kSubmerger, 2)
Info(
"AcceptResults",
"closing socket");
2331 PDB(kSubmerger, 2)
Info(
"AcceptResults",
"exit: %d", result);
2341 Int_t n, nch, wasted = 0;
2343 const Int_t kBufSize = 1024;
2344 char waste[kBufSize];
2350 Info(
"HandleUrgentData",
"handling oob...");
2371 if (nch > kBufSize) nch = kBufSize;
2374 Error(
"HandleUrgentData",
"error receiving waste");
2379 Error(
"HandleUrgentData",
"error receiving OOB");
2385 Info(
"HandleUrgentData",
"got OOB byte: %d\n", oob_byte);
2392 Info(
"HandleUrgentData",
"*** Hard Interrupt");
2409 Error(
"HandleUrgentData",
"error sending OOB");
2420 if (nch > kBufSize) nch = kBufSize;
2423 Error(
"HandleUrgentData",
"error receiving waste (2)");
2433 Info(
"HandleUrgentData",
"Soft Interrupt");
2440 Error(
"HandleUrgentData",
"soft interrupt flushed stream");
2451 Info(
"HandleUrgentData",
"Shutdown Interrupt");
2462 Error(
"HandleUrgentData",
"unexpected OOB byte");
2482 Info(
"HandleSigPipe",
"keepAlive probe failed");
2491 Info(
"HandleSigPipe",
"keepAlive probe failed");
2534 if ((freopen(logfile, mode, stdout)) == 0)
2535 SysError(
"RedirectOutput",
"could not freopen stdout (%s)", logfile);
2537 if ((dup2(fileno(stdout), fileno(stderr))) < 0)
2538 SysError(
"RedirectOutput",
"could not redirect stderr");
2540 if ((
fLogFile = fopen(logfile,
"r")) == 0)
2541 SysError(
"RedirectOutput",
"could not open logfile '%s'", logfile);
2545 Warning(
"RedirectOutput",
"no way to tell master (or client) where"
2546 " to upload packages");
2561 dd.
Replace(0, ic,
"proofserv");
2585 if (size <= 0)
return 0;
2588 Int_t fd =
open(file, O_CREAT | O_TRUNC | O_WRONLY, 0600);
2590 SysError(
"ReceiveFile",
"error opening file %s", file);
2594 const Int_t kMAXBUF = 16384;
2595 char buf[kMAXBUF], cpy[kMAXBUF];
2600 while (filesize < size) {
2601 left =
Int_t(size - filesize);
2613 Int_t k = 0, i = 0, j = 0;
2620 cpy[j++] = buf[i++];
2624 w =
write(fd, q, r);
2626 w =
write(fd, p, r);
2630 SysError(
"ReceiveFile",
"error writing to file %s", file);
2638 Error(
"ReceiveFile",
"error during receiving file %s", file);
2646 if (chmod(file, 0644) != 0)
2647 Warning(
"ReceiveFile",
"error setting mode 0644 on file %s", file);
2686 off_t ltot=0, lnow=0;
2691 ltot = lseek(fileno(stdout), (off_t) 0, SEEK_END);
2694 if (ltot >= 0 && lnow >= 0) {
2697 if (end <= start || end > ltot)
2699 left = (
Int_t)(end - start);
2704 left = (
Int_t)(ltot - lnow);
2711 SysError(
"SendLogFile",
"error sending kPROOF_LOGFILE");
2715 const Int_t kMAXBUF = 32768;
2717 Int_t wanted = (left > kMAXBUF) ? kMAXBUF : left;
2725 SysError(
"SendLogFile",
"error reading log file");
2729 if (end == ltot && len == wanted)
2733 SysError(
"SendLogFile",
"error sending log file");
2739 wanted = (left > kMAXBUF) ? kMAXBUF : left;
2741 }
while (len > 0 && left > 0);
2745 if (adhoc && lnow >=0 )
2752 mess << status << (
Int_t) 1;
2755 SysError(
"SendLogFile",
"error sending kPROOF_LOGDONE");
2759 PDB(kGlobal, 1)
Info(
"SendLogFile",
"kPROOF_LOGDONE sent");
2776 mess << bytesread << realtime << cputime <<
workdir;
2787 Int_t nparallel = 0;
2790 Info(
"SendParallel",
"Will invoke AskParallel()");
2793 Info(
"SendParallel",
"Will invoke GetParallel()");
2800 mess << nparallel << async;
2830 Info(
"UnloadPackage",
2831 "package %s successfully unloaded", package);
2837 Warning(
"UnloadPackage",
"unable to remove symlink to %s", package);
2850 while (
TPair *pck = dynamic_cast<TPair *>(nextpackage()))
2855 Info(
"UnloadPackages",
2856 "packages successfully unloaded");
2870 snprintf(str, 512,
"**** Welcome to the PROOF server @ %s ****",
gSystem->
HostName());
2872 snprintf(str, 512,
"**** PROOF slave server @ %s started ****",
gSystem->
HostName());
2876 Error(
"Setup",
"failed to send proof server startup message");
2884 Error(
"Setup",
"failed to receive remote proof protocol");
2888 Error(
"Setup",
"failed to send local proof protocol");
2896 Error(
"Setup",
"OldAuthSetup: failed to setup authentication");
2915 Error(
"Setup",
"failed to receive ordinal and config info");
2923 if (fWorkDir.IsNull())
2944 if (tmpWorkDir !=
"")
2948 Info(
"Setup",
"invalid config file %s (missing or unreadable",
2978 if (host.Index(
".") !=
kNPOS)
2979 host.Remove(host.Index(
"."));
2996 Error(
"Setup",
"common setup failed");
3027 bindir = ROOTBINDIR;
3030 if (!bindir.IsNull()) bindir +=
"/bin";
3035 if (paths.
Length() > 0) {
3039 else if (paths.
Contains(
"<compiler>"))
3048 if (!bindir.IsNull()) bindir +=
":";
3050 }
else if (icomp == -1) {
3051 if (!path.IsNull()) path +=
":";
3059 else if (paths.
Contains(
"<sysbin>"))
3063 if (!bindir.IsNull()) bindir +=
":";
3064 bindir +=
"/bin:/usr/bin:/usr/local/bin";
3065 }
else if (isysb == -1) {
3066 if (!path.IsNull()) path +=
":";
3067 path +=
"/bin:/usr/bin:/usr/local/bin";
3072 if (!bindir.IsNull()) bindir +=
":";
3073 path.Insert(0, bindir);
3080 Error(
"SetupCommon",
"can not change to PROOF directory %s",
3089 Error(
"SetupCommon",
"can not change to PROOF directory %s",
3138 Warning(
"SetupCommon",
"problems creating path '%s' (errno: %d)",
3147 if (!dataDirOpts.IsNull()) {
3150 if ((
IsMaster() && !dataDirOpts.Contains(
"M")) ||
3155 if (dataDirOpts.Contains(
"g")) m = 0775;
3156 if (dataDirOpts.Contains(
"a") || dataDirOpts.Contains(
"o")) m = 0777;
3158 Info(
"SetupCommon",
"requested mode for data directories is '%o'", m);
3165 if (subp.
IsNull())
continue;
3170 Warning(
"SetupCommon",
"problems setting mode '%o' on path '%s' (errno: %d)",
3177 Warning(
"SetupCommon",
"problems stat-ing path '%s' (errno: %d; datadir: %s)",
3187 if (globpack.
Length() > 0) {
3191 while (globpack.
Tokenize(ldir, from,
":")) {
3193 Warning(
"SetupCommon",
"directory for global packages %s does not"
3194 " exist or is not readable", ldir.
Data());
3198 key.
Form(
"G%d", ng++);
3205 Info(
"SetupCommon",
"directory for global packages %s added to the list",
3218 Error(
"SetupCommon",
"can not change to working directory '%s'",
3271 while (dsms.
Tokenize(dsm, from,
",")) {
3273 Warning(
"SetupCommon",
"a valid dataset manager already initialized");
3274 Warning(
"SetupCommon",
"support for multiple managers not yet available");
3278 if (
gROOT->GetPluginManager()) {
3280 h =
gROOT->GetPluginManager()->FindHandler(
"TDataSetManager", dsm);
3285 fUser.Data(), dsm.
Data()));
3291 Warning(
"SetupCommon",
"dataset manager plug-in initialization failed");
3292 SendAsynMessage(
"TXProofServ::SetupCommon: dataset manager plug-in initialization failed");
3308 h =
gROOT->GetPluginManager()->FindHandler(
"TDataSetManager",
"file");
3318 Warning(
"SetupCommon",
"default dataset manager plug-in initialization failed");
3324 if (!dsReqCfg.
IsNull()) {
3325 TPMERegexp reReqDir(
"(^| )(dir:)?([^ ]+)( |$)");
3327 if (reReqDir.
Match(dsReqCfg) == 5) {
3329 dsDirFmt.
Form(
"dir:%s perms:open", reReqDir[3].
Data());
3335 "failed init of dataset staging requests repository");
3340 "specify, with [dir:]<path>, a valid path for staging requests");
3343 Warning(
"SetupCommon",
"no repository for staging requests available");
3357 while (quotas.
Tokenize(tok, from,
" ")) {
3365 "parsing 'maxquerykept' :ignoring token %s : not a digit", tok.
Data());
3368 const char *ksz[2] = {
"hwmsz=",
"maxsz="};
3369 for (
Int_t j = 0; j < 2; j++) {
3376 const char *s[3] = {
"k",
"m",
"g"};
3377 Int_t i = 0, k = 1024;
3392 TString ssz(ksz[j], strlen(ksz[j])-1);
3393 Info(
"SetupCommon",
"parsing '%s' : ignoring token %s", ssz.
Data(), tok.
Data());
3403 Warning(
"SetupCommon",
"problems applying fMaxQueries");
3410 if (rtag.Length() > 0)
3422 while (all_vars.Tokenize(name, from,
",")) {
3423 if (!name.IsNull()) {
3445 Info(
"SetupCommon",
"successfully completed");
3465 Info(
"Terminate",
"process memory footprint: %ld/%ld kB virtual, %ld/%ld kB resident ",
3499 Info(
"Terminate",
"data directory '%s' has been removed",
fDataDir.
Data());
3506 while ((fh =
next())) {
3507 TProofServInputHandler *ih =
dynamic_cast<TProofServInputHandler *
>(fh);
3524 if (!path || strlen(path) <= 0)
return kFALSE;
3530 const char *ent = 0;
3532 if (!strcmp(ent,
".") || !strcmp(ent,
".."))
continue;
3533 fpath.
Form(
"%s/%s", path, ent);
3550 Warning(
"UnlinkDataDir",
"data directory '%s' is empty but could not be removed", path);
3581 if (!oldAuthSetupHook) {
3583 TString authlib =
"libRootAuth";
3589 Error(
"OldAuthSetup",
"can't load %s",authlib.
Data());
3593 Error(
"OldAuthSetup",
"can't locate %s",authlib.
Data());
3602 Error(
"OldAuthSetup",
"can't find OldProofServAuthSetup");
3618 TDSet *dset,
const char *selec,
3635 fst, dset, selec, elist);
3653 Int_t startlog = lseek(fileno(stdout), (off_t) 0, SEEK_END);
3657 Info(
"SetQueryRunning",
"starting query: %d", pq->
GetSeqNum());
3663 while ((pck = (
TPair *)nxp())) {
3664 if (parlist.Length() <= 0)
3692 Info(
"HandleArchive",
"Enter");
3696 (*mess) >> queryref >> path;
3698 if (slb) slb->
Form(
"%s %s", queryref.
Data(), path.Data());
3701 if (queryref ==
"Default") {
3703 Info(
"HandleArchive",
3713 if (path.Length() <= 0) {
3715 Info(
"HandleArchive",
3716 "archive paths are not defined - do nothing");
3720 path.Form(
"%s/session-%s-%d.root",
3731 if (!pqr || qry < 0) {
3733 fout +=
"/query-result.root";
3739 TIter nxk(f->GetListOfKeys());
3741 while ((k = (
TKey *)nxk())) {
3742 if (!strcmp(k->GetClassName(),
"TProofQueryResult")) {
3751 Info(
"HandleArchive",
3752 "file cannot be open (%s)",fout.
Data());
3759 PDB(kGlobal, 1)
Info(
"HandleArchive",
3760 "archive path for query #%d: %s",
3767 if (!farc || !(farc->IsOpen())) {
3768 Info(
"HandleArchive",
3769 "archive file cannot be open (%s)",path.Data());
3783 if (qry > -1 &&
fQMgr)
3787 Info(
"HandleArchive",
3788 "results of query %s archived to file %s",
3789 queryref.
Data(), path.Data());
3808 emsg.
Form(
"file collection undefined!");
3819 TUrl *xurl = fiind->GetCurrentUrl();
3851 Info(
"HandleProcess",
"Enter");
3865 (*mess) >> dset >> filename >> input >> opt >> nentries >> first >> evl >> sync;
3876 if ((!hasNoData) && elist)
3887 Error(
"HandleProcess",
"AssertDataSet: %s", emsg.
Data());
3892 }
else if (hasNoData) {
3897 if (!dsn.Contains(
":") || dsn.BeginsWith(
"dataset:")) {
3902 emsg.
Form(
"dataset manager not initialized!");
3907 emsg.
Form(
"requested dataset '%s' does not exists", dsn.Data());
3914 fcmap->
SetName(
"PROOF_FilesToProcess");
3922 Error(
"HandleProcess",
"%s", emsg.
Data());
3938 if (dset) input->
Add(dset);
3939 if (elist) input->
Add(elist);
3943 input->
Clear(
"nodelete");
3948 Warning(
"HandleProcess",
"could not save input data: %s", emsg.
Data());
3974 Error(
"HandleProcess",
"error getting list of worker nodes");
3981 Info(
"HandleProcess",
"query %d enqueued", pq->
GetSeqNum());
3983 Error(
"HandleProcess",
"Adding a list of worker nodes returned: %d",
3992 Error(
"HandleProcess",
"error getting list of worker nodes");
3999 Info(
"HandleProcess",
"query %d enqueued", pq->
GetSeqNum());
4001 Error(
"HandleProcess",
"unknown return value: %d", retVal);
4012 if (!sync || enqueued) {
4020 Info(
"HandleProcess",
4087 Warning(
"HandleProcess",
"could not get input data: %s", emsg.
Data());
4091 Warning(
"HandleProcess",
"could not get query sequential number!");
4095 while ((nord = input->
FindObject(
"PROOF_Ordinal")))
4102 while ((o =
next())) {
4103 PDB(kGlobal, 2)
Info(
"HandleProcess",
"adding: %s", o->
GetName());
4111 while ((obj = nxt())){
4115 Info(
"HandleProcess",
"selector obj for '%s' found", selector_obj->
ClassName());
4131 Info(
"HandleProcess",
"calling fPlayer->Process() with selector object: %s", selector_obj->
ClassName());
4135 Info(
"HandleProcess",
"calling fPlayer->Process() with selector name: %s", filename.
Data());
4147 m << status << abort;
4160 Info(
"TProofServ::Handleprocess",
4161 "worker %s has finished processing with %d objects in output list",
4181 if (!isSubMerging) {
4201 Info(
"HandleProcess",
"controlled mode: worker %s has finished,"
4208 Info(
"HandleProcess",
"submerging disabled because of high-memory case");
4211 PDB(kGlobal, 2)
Info(
"HandleProcess",
"merging mode check: %d", isSubMerging);
4227 Int_t merge_port = 0;
4230 Info(
"HandleProcess",
"possible port for merging connections: %d",
4234 msg_osize << merge_port;
4248 PDB(kGlobal, 2)
Info(
"HandleProcess",
"sending result directly to master");
4250 Warning(
"HandleProcess",
"problems sending output list");
4272 Warning(
"HandleProcess",
"the output list is empty!");
4274 Warning(
"HandleProcess",
"problems sending output list");
4291 while ((obj = nex())) {
4303 TFile *
f =
dynamic_cast<TFile *
>(added->
Last());
4307 while ((o = nxo())) { input->
Remove(o); }
4324 PDB(kGlobal, 1)
Info(
"HandleProcess",
"done");
4335 PDB(kOutput, 2)
Info(
"SendResults",
"enter");
4346 msg.
Form(
"%s: merging output objects ... done ",
4350 msg.
Form(
"%s: objects merged; sending output: %d objs",
fPrefix.
Data(), olsz);
4355 if (sock->
Send(mbuf) < 0)
return -1;
4361 Int_t totsz = 0, objsz = 0;
4363 while ((o = nxo())) {
4367 "message has %d bytes: limit of %lld bytes reached - sending ...",
4380 msg.
Form(
"%s: objects merged; sending obj %d/%d (%d bytes) ",
4384 if (sock->
Send(mbuf) < 0)
return -1;
4391 mbuf << (Int_t) ((ns >= olsz) ? 2 : 1);
4406 msg.
Form(
"%s: objects merged; sending obj %d/%d (%d bytes) ",
4410 if (sock->
Send(mbuf) < 0)
return -1;
4414 msg.
Form(
"%s: grand total: sent %d objects, size: %d bytes ",
4426 msg.
Form(
"%s: merging output objects ... done ",
4430 msg.
Form(
"%s: objects merged; sending output: %d objs",
fPrefix.
Data(), olsz);
4435 if (sock->
Send(mbuf) < 0)
return -1;
4439 Int_t totsz = 0, objsz = 0;
4442 while ((o = nxo())) {
4459 msg.
Form(
"%s: objects merged; sending obj %d/%d (%d bytes) ",
4463 if (sock->
Send(mbuf) < 0)
return -1;
4468 msg.
Form(
"%s: grand total: sent %d objects, size: %d bytes ",
4482 msg.
Form(
"%s: sending output: %d objs, %d bytes",
fPrefix.
Data(), olsz, blen);
4484 if (sock->
Send(mbuf) < 0)
return -1;
4488 PDB(kGlobal, 2)
Info(
"SendResults",
"sending output list");
4490 PDB(kGlobal, 2)
Info(
"SendResults",
"notifying failure or abort");
4495 PDB(kOutput,2)
Info(
"SendResults",
"done");
4537 filename += opt(
id + 1, opt.
Length());
4547 Error(
"ProcessNext",
"no TDset object: cannot continue");
4569 while ((obj = nxt())){
4573 Info(
"ProcessNext",
"found object for selector '%s'", obj->
ClassName());
4580 Error(
"ProcessNext",
"empty waiting queries list!");
4630 PDB(kSubmerger, 2)
Info(
"ProcessNext",
"PROOF_UseMergers set to %d", smg);
4636 if ((o = input->
FindObject(
"PROOF_MergersByHost"))) { input->
Remove(o);
delete o; }
4638 PDB(kSubmerger, 2)
Info(
"ProcessNext",
"submergers setup by host/node");
4647 while ((o =
next())) {
4658 Info(
"ProcessNext",
"calling fPlayer->Process() with selector object: %s", selector_obj->
ClassName());
4662 Info(
"ProcessNext",
"calling fPlayer->Process() with selector name: %s", filename.
Data());
4677 m << status << abort;
4693 Warning(
"ProcessNext",
"problems registering produced datasets: %s", emsg.
Data());
4714 while ((xo = nxo())) {
4724 if (oopt.BeginsWith(
"of:")) {
4736 Info(
"ProcessNext",
"adding info about dataset '%s' in the light query result", dset->
GetName());
4743 Info(
"ProcessNext",
"sending results");
4746 Warning(
"ProcessNext",
"problems sending output list");
4751 Warning(
"ProcessNext",
"the output list is empty!");
4753 Warning(
"ProcessNext",
"problems sending output list");
4763 if (!(pq->
IsDraw()) && pqr) {
4790 ::
Info(
"TProofServ::RegisterDataSets",
4791 "enter: %d objs in the output list", (out ? out->
GetSize() : -1));
4793 if (!in || !out || !dsm) {
4794 ::Error(
"TProofServ::RegisterDataSets",
"invalid inputs: %p, %p, %p", in, out, dsm);
4802 while ((o = nxo())) {
4820 if (regopt.Contains(
":sortidx:")) {
4822 regopt.ReplaceAll(
":sortidx:",
"");
4829 const char *vfmsg = regopt.Contains(
"V") ?
" and verifying" :
"";
4830 msg.
Form(
"Registering%s dataset '%s' ... ", vfmsg, ds->
GetName());
4839 ::Warning(
"TProofServ::RegisterDataSets",
4840 "failure registering or verifying dataset '%s'", ds->
GetName());
4841 msg.
Form(
"Registering%s dataset '%s' ... failed! See log for more details", vfmsg, ds->
GetName());
4843 ::Info(
"TProofServ::RegisterDataSets",
"dataset '%s' successfully registered%s",
4844 ds->
GetName(), (strlen(vfmsg) > 0) ?
" and verified" :
"");
4845 msg.
Form(
"Registering%s dataset '%s' ... OK", vfmsg, ds->
GetName());
4852 ::Info(
"TProofServ::RegisterDataSets",
"printing collection");
4856 ::Warning(
"TProofServ::RegisterDataSets",
"collection '%s' is empty", o->
GetName());
4859 ::Info(
"TProofServ::RegisterDataSets",
"dataset registration not allowed");
4866 while ((o = nxrm())) out->
Remove(o);
4870 while((o = nxtg())) {
4876 PDB(kDataset, 1) ::
Info(
"TProofServ::RegisterDataSets",
"exit");
4887 Info(
"HandleQueryList",
"Enter");
4893 Int_t ntot = 0, npre = 0, ndraw= 0;
4926 Warning(
"HandleQueryList",
"unable to clone TProofQueryResult '%s:%s'",
4927 pqr->GetName(), pqr->GetTitle());
4936 m << npre << ndraw << ql;
4950 Info(
"HandleRemove",
"Enter");
4953 (*mess) >> queryref;
4955 if (slb) *slb = queryref;
4957 if (queryref ==
"cleanupqueue") {
4961 Info(
"HandleRemove",
"%d queries removed from the waiting list", pend);
4966 if (queryref ==
"cleanupdir") {
4972 Info(
"HandleRemove",
"%d directories removed", nd);
4997 Warning(
"HandleRemove",
"query result manager undefined!");
5001 Info(
"HandleRemove",
5002 "query %s could not be removed (unable to lock session)", queryref.Data());
5014 Info(
"HandleRetrieve",
"Enter");
5017 (*mess) >> queryref;
5019 if (slb) *slb = queryref;
5027 fout +=
"/query-result.root";
5033 TIter nxk(f->GetListOfKeys());
5035 while ((k = (
TKey *)nxk())) {
5036 if (!strcmp(k->GetClassName(),
"TProofQueryResult")) {
5044 if ((d = dynamic_cast<TDSet *>(o)))
5053 static const char *clb[4] = {
"bytes",
"KB",
"MB",
"GB" };
5054 while (qsz > 1000. && ilb < 3) {
5063 Info(
"HandleRetrieve",
5064 "query not found in file %s",fout.
Data());
5074 Info(
"HandleRetrieve",
5075 "file cannot be open (%s)",fout.
Data());
5094 (*mess) >> type >> add >> path;
5098 if ((type !=
"lib") && (type !=
"inc")) {
5099 Error(
"HandleLibIncPath",
"unknown action type: %s", type.
Data());
5104 path.ReplaceAll(
",",
" ");
5108 if (path.Length() > 0 && path !=
"-") {
5109 if (!(op = path.Tokenize(
" "))) {
5110 Error(
"HandleLibIncPath",
"decomposing path %s", path.Data());
5117 if (type ==
"lib") {
5138 Info(
"HandleLibIncPath",
5139 "libpath %s does not exist or cannot be read - not added", xlib.
Data());
5162 Info(
"HandleLibIncPath",
5163 "incpath %s does not exist or cannot be read - not added", xinc.
Data());
5174 if (type ==
"lib") {
5227 (*mess) >> filenam >> md5;
5231 if (slb) *slb = filenam;
5244 if (md5local && md5 == (*md5local)) {
5250 Error(
"HandleCheckFile",
"failure executing: %s %s/%s",
5261 Error(
"HandleCheckFile",
"failure executing: %s",
5273 Error(
"HandleCheckFile",
"package %s did not unpack into %s",
5282 Info(
"HandleCheckFile",
5283 "package %s installed on node", filenam.
Data());
5290 Info(
"HandleCheckFile",
5291 "package %s not yet on node", filenam.
Data());
5310 Info(
"HandleCheckFile",
5311 "problems uploading package %s", filenam.
Data());
5328 if (md5local && md5 == (*md5local)) {
5332 Info(
"HandleCheckFile",
5333 "package %s already on node", filenam.
Data());
5336 Info(
"HandleCheckFile",
5337 "problems uploading package %s", filenam.
Data());
5343 Info(
"HandleCheckFile",
5344 "package %s not yet on node", filenam.
Data());
5358 if (md5local && md5 == (*md5local)) {
5362 Info(
"HandleCheckFile",
5363 "package %s already on node", filenam.
Data());
5366 Info(
"HandleCheckFile",
5367 "problems with uploading package %s", filenam.
Data());
5372 Info(
"HandleCheckFile",
5373 "package %s not yet on node", filenam.
Data());
5384 if (md5local && md5 == (*md5local)) {
5387 Info(
"HandleCheckFile",
"file %s already on node", filenam.Data());
5392 Info(
"HandleCheckFile",
"file %s not yet on node", filenam.Data());
5406 Info(
"HandleCache",
"Enter");
5417 const char *k = (
IsMaster()) ?
"Mst" :
"Wrk";
5437 if (slb) slb->
Form(
"%d %d", type, all);
5443 if (file.IsNull() || file ==
"*") {
5451 if (slb) slb->
Form(
"%d %s", type, file.Data());
5459 while ((nm = (
TNamed *)nxd())) {
5460 printf(
"*** Global Package cache %s %s:%s ***\n",
5475 if (slb) slb->
Form(
"%d %d", type, all);
5486 if (slb) slb->
Form(
"%d %d", type, status);
5503 if (slb) slb->
Form(
"%d %s %d", type, package.Data(),
status);
5520 while ((nm = (
TNamed *)nxd())) {
5531 if (pdir.
Length() <= 0) {
5534 noth.
Data(), package.Data()));
5545 "kBuildPackage: problems forwarding package %s to workers", package.Data());
5547 noth.
Data(), package.Data()));
5556 "kBuildPackage: package %s exists and has PROOF-INF directory", package.Data());
5575 FILE *
f = fopen(
"PROOF-INF/proofvers.txt",
"r");
5586 if (!f || !goodver) {
5590 " build: %s:%s): cleaning ... ",
5591 noth.
Data(), package.Data(),
gROOT->GetVersion(),
5608 Error(
"HandleCache",
"kBuildPackage: failure executing: %s", cmd.
Data());
5613 TString md5f = packagedir +
"/" +
package + "/PROOF-INF/md5.txt";
5620 Warning(
"HandleCache",
"kBuildPackage: failure calculating/saving MD5sum for '%s'", par.
Data());
5625 Error(
"HandleCache",
"kBuildPackage: %s not found",
kGUNZIP);
5630 " global package: cannot re-build!!! ",
5631 noth.
Data(), package.Data(),
gROOT->GetVersion(), v.
Data()));
5645 cmd.
Form(
"export ROOTINCLUDEPATH=\"%s\" ; PROOF-INF/BUILD.sh", ipath.Data());
5652 f = fopen(
"PROOF-INF/proofvers.txt",
"w");
5654 fputs(
gROOT->GetVersion(),
f);
5664 Info(
"HandleCache",
"no PROOF-INF/BUILD.sh found for package %s", package.Data());
5679 Info(
"HandleCache",
"package %s successfully built", package.Data());
5681 if (slb) slb->
Form(
"%d %s %d %d", type, package.Data(),
status, chkveropt);
5689 "package %s already loaded", package.Data());
5702 while ((nm = (
TNamed *)nxd())) {
5710 if (pdir.
Length() <= 0) {
5713 noth.
Data(), package.Data()));
5732 TMacro setupmc(
"PROOF-INF/SETUP.C");
5741 " function", noth.
Data(), package.Data()));
5745 if (!setupmc.
Load()) {
5749 noth.
Data(), package.Data()));
5758 noth.
Data(), package.Data()));
5769 " the specified argument will be ignored", noth.
Data()));
5779 if (argsig.BeginsWith(
"TList")) {
5782 }
else if (argsig.BeginsWith(
"const char")) {
5788 if (optls && optls->First()) {
5790 " SETUP expects 'const char *': ignoring",
5791 noth.
Data(), optls->First()->ClassName()));
5804 " cannot continue", noth.
Data()));
5810 " cannot continue", noth.
Data()));
5814 Long_t setuprc = (status == 0) ? 0 : -1;
5817 if (setuprc < 0) status = -1;
5850 if (optls && optls->
GetSize() > 0) {
5860 Info(
"HandleCache",
"package %s successfully loaded", package.Data());
5862 if (slb) slb->
Form(
"%d %s %d", type, package.Data(),
status);
5868 printf(
"*** Enabled packages on master %s on %s\n",
5871 printf(
"*** Enabled packages ***\n");
5873 printf(
"*** Enabled packages on slave %s on %s\n",
5879 printf(
"%s\n", pck->GetName());
5884 if (slb) slb->
Form(
"%d %d", type, all);
5891 if (slb) slb->
Form(
"%d %d", type, all);
5898 if (slb) slb->
Form(
"%d %s", type, file.Data());
5905 if (slb) slb->
Form(
"%d %d", type, all);
5910 if (slb) slb->
Form(
"%d", type);
5916 if (slb) slb->
Form(
"%d %s", type, package.Data());
5923 if (slb) slb->
Form(
"%d %s %d", type, package.Data(), chkveropt);
5930 if (slb) slb->
Form(
"%d %s %d", type, package.Data(),
status);
5943 if (slb) slb->
Form(
"%d %s", type, package.Data());
5949 if (slb) slb->
Form(
"%d %s %d", type, package.Data(),
status);
5957 if (slb) slb->
Form(
"%d %s", type, package.Data());
5972 if (slb) slb->
Form(
"%d", type);
5980 while (pac.Length() > 0) {
5981 if (pac.EndsWith(
".par")) {
5990 msg << type << pack;
5993 if (slb) slb->
Form(
"%d", type);
6014 Info(
"HandleCache",
"loading macro %s ...", pack.
Data());
6029 if (slb) slb->
Form(
"%d %s", type, package.Data());
6033 Error(
"HandleCache",
"unknown type %d", type);
6047 Info(
"HandleWorkerLists",
"Enter");
6049 Int_t type = 0, rc = 0;
6057 if (ord !=
"*" && !ord.BeginsWith(
GetOrdinal()) && ord !=
"restore")
break;
6066 if (nactnew == nactmax) {
6067 PDB(kGlobal, 1)
Info(
"HandleWorkerList",
"all workers (re-)activated");
6070 PDB(kGlobal, 1)
Info(
"HandleWorkerList",
"%d workers could not be (re-)activated", nactmax - nactnew);
6072 }
else if (ord ==
"restore") {
6074 PDB(kGlobal, 1)
Info(
"HandleWorkerList",
"active worker(s) restored");
6076 Error(
"HandleWorkerList",
"some active worker(s) could not be restored; check logs");
6079 if (nactnew == (nact + nwc)) {
6081 PDB(kGlobal, 1)
Info(
"HandleWorkerList",
"worker(s) %s (re-)activated", ord.Data());
6084 Error(
"HandleWorkerList",
"some worker(s) could not be (re-)activated;"
6085 " # of actives: %d --> %d (nwc: %d)",
6086 nact, nactnew, nwc);
6088 rc = (nwc < 0) ? nwc : -1;
6092 PDB(kGlobal, 1)
Info(
"HandleWorkerList",
"all workers are already active");
6095 Warning(
"HandleWorkerList",
"undefined PROOF session: protocol error?");
6100 if (ord !=
"*" && !ord.BeginsWith(
GetOrdinal()) && ord !=
"restore")
break;
6108 PDB(kGlobal, 1)
Info(
"HandleWorkerList",
"all workers deactivated");
6111 PDB(kGlobal, 1)
Info(
"HandleWorkerList",
"%d workers could not be deactivated", nactnew);
6114 if (nactnew == (nact - nwc)) {
6116 PDB(kGlobal, 1)
Info(
"HandleWorkerList",
"worker(s) %s deactivated", ord.Data());
6119 Error(
"HandleWorkerList",
"some worker(s) could not be deactivated:"
6120 " # of actives: %d --> %d (nwc: %d)",
6121 nact, nactnew, nwc);
6123 rc = (nwc < 0) ? nwc : -1;
6127 PDB(kGlobal, 1)
Info(
"HandleWorkerList",
"all workers are already inactive");
6130 Warning(
"HandleWorkerList",
"undefined PROOF session: protocol error?");
6134 Warning(
"HandleWorkerList",
"unknown action type (%d)", type);
6161 "no appropriate master line found in %s",
fConfFile.
Data());
6166 fImage = master->GetImage();
6241 const char *type = 0;
6244 Int_t ipos = (location) ? strlen(location) : 0;
6250 if (level >=
kInfo) {
6252 char *ps = location ? (
char *) strrchr(location,
'|') : (
char *)0;
6254 ipos = (int)(ps - (
char *)location);
6270 type =
"*** Break ***";
6288 if (!location || ipos == 0 ||
6301 type, ipos, location, msg);
6311 if (__crashreporter_info__)
6312 delete [] __crashreporter_info__;
6313 __crashreporter_info__ =
StrDup(buf);
6365 Printf(
" +++ Latest processing times: %f s (CPU: %f s)",
6398 Int_t priority = 100;
6404 sql.
Form(
"SELECT priority WHERE group='%s' FROM proofpriority",
fGroup.
Data());
6410 Error(
"GetPriority",
"failed to connect to SQL server %s as %s %s",
6417 Error(
"GetPriority",
"query into proofpriority failed");
6425 Error(
"GetPriority",
"first row is header is NULL");
6449 Info(
"SendAsynMessage",
"%s", (msg ? msg :
"(null)"));
6468 off_t lend = lseek(fileno(stdout), (off_t)0, SEEK_END);
6469 if (lend >= 0) lseek(
fLogFileDes, lend, SEEK_SET);
6486 if (truncsz < 100) {
6487 emsg.
Form(
"+++ WARNING +++: %s: requested truncate size too small"
6493 while (ftruncate(fileno(stdout), truncsz) != 0 &&
6498 Error(
"TruncateLogFile",
"truncating to %lld bytes; file size is %lld bytes (errno: %d)",
6500 emsg.
Form(
"+++ WARNING +++: %s: problems truncating log file to %lld bytes; file size is %lld bytes"
6504 Info(
"TruncateLogFile",
"file truncated to %lld bytes (80%% of %lld); file size was %lld bytes ",
6506 emsg.
Form(
"+++ WARNING +++: %s: log file truncated to %lld bytes (80%% of %lld)",
6512 emsg.
Form(
"+++ WARNING +++: %s: could not stat log file descriptor"
6525 Error(
"HandleException",
"caugth exception triggered by signal '%d' %s %lld",
6529 emsg.
Form(
"%s: caught exception triggered by signal '%d' %s %lld",
6543 Info(
"HandleDataSets",
"enter");
6547 Warning(
"HandleDataSets",
"no data manager is available to fullfil the request");
6552 TString dsUser, dsGroup, dsName, dsTree, uri, opt;
6568 if (slb) slb->
Form(
"%d %s", type, uri.Data());
6580 if (slb) slb->
Form(
"%d %s %s", type, uri.Data(), opt.Data());
6585 Error(
"HandleDataSets",
"can not save an empty list.");
6593 Info(
"HandleDataSets",
"dataset registration not allowed");
6594 if (slb) slb->
Form(
"%d notallowed", type);
6605 Error(
"HandleDataSets",
6606 "no dataset staging request repository available");
6612 while (reInvalid.
Substitute(validUri,
"_")) {}
6617 Warning(
"HandleDataSets",
"staging of %s already requested",
6625 Error(
"HandleDataSets",
"empty dataset or no dataset returned");
6633 while ((fi = dynamic_cast<TFileInfo *>(it.Next()))) {
6635 Int_t nToErase = fi->GetNUrls() - 1;
6636 for (
Int_t i=0; i<nToErase; i++)
6647 Error(
"HandleDataSets",
6648 "can't register staging request for %s", uri.Data());
6653 Info(
"HandleDataSets",
6654 "Staging request registered for %s", uri.Data());
6664 Error(
"HandleDataSets",
6665 "no dataset staging request repository available");
6683 Info(
"HandleDataSets",
"no pending staging request for %s",
6693 Error(
"HandleDataSets",
6694 "no dataset staging request repository available");
6712 (*mess) >> uri >> opt;
6713 if (slb) slb->
Form(
"%d %s %s", type, uri.
Data(), opt.Data());
6721 (*mess) >> uri >> opt;
6722 if (slb) slb->
Form(
"%d %s %s", type, uri.
Data(), opt.Data());
6726 if (kLite !=
kNPOS) {
6728 opt.Remove(kLite, strlen(
":lite:"));
6732 if (returnMap && !opt.IsNull()) {
6737 TIter nxd(returnMap);
6748 Info(
"HandleDataSets",
"no dataset found on server '%s'", opt.Data());
6765 (*mess) >> uri >> opt;
6766 if (slb) slb->
Form(
"%d %s %s", type, uri.
Data(), opt.Data());
6782 if (slb) slb->
Form(
"%d %s", type, uri.Data());
6788 Info(
"HandleDataSets",
"dataset creation / removal not allowed");
6789 if (slb) slb->
Form(
"%d notallowed", type);
6797 (*mess) >> uri >> opt;
6798 if (slb) slb->
Form(
"%d %s %s", type, uri.
Data(), opt.Data());
6808 Info(
"HandleDataSets",
"dataset verification not allowed");
6816 if (slb) slb->
Form(
"%d", type);
6818 if (groupQuotaMap) {
6825 Info(
"HandleDataSets",
"quota control disabled");
6826 if (slb) slb->
Form(
"%d disabled", type);
6834 if (slb) slb->
Form(
"%d", type);
6839 Info(
"HandleDataSets",
"quota control disabled");
6840 if (slb) slb->
Form(
"%d disabled", type);
6848 if (slb) slb->
Form(
"%d %s", type, uri.Data());
6851 Info(
"HandleDataSets",
"kSetDefaultTreeName: modification of dataset info not allowed");
6852 if (slb) slb->
Form(
"%d notallowed", type);
6859 (*mess) >> uri >> opt;
6860 if (slb) slb->
Form(
"%d %s %s", type, uri.
Data(), opt.Data());
6861 if (opt ==
"show") {
6864 }
else if (opt ==
"clear") {
6868 Error(
"HandleDataSets",
"kCache: unknown action: %s", opt.Data());
6874 Error(
"HandleDataSets",
"unknown type %d", type);
6901 Info(
"HandleSubmerger",
"kSendOutput: interrupting ...");
6912 Int_t merger_id = -1;
6913 (*mess) >> merger_id >> name >> port;
6915 Info(
"HandleSubmerger",
"worker %s redirected to merger #%d %s:%d",
fOrdinal.
Data(), merger_id, name.
Data(), port);
6918 if (name.
Length() > 0 && port > 0 && (t =
new TSocket(name, port)) && t->IsValid()) {
6920 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
6921 "kSendOutput: worker asked for sending output to merger #%d %s:%d",
6922 merger_id, name.
Data(), port);
6925 msg.
Form(
"worker %s cannot send results to merger #%d at %s:%d",
GetPrefix(), merger_id, name.
Data(), port);
6926 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
6927 "kSendOutput: %s - inform the master", msg.
Data());
6941 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
"kSendOutput: worker sent its output");
6948 if (name ==
"master") {
6949 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
6950 "kSendOutput: worker was asked for sending output to master");
6952 Warning(
"HandleSubmerger",
"problems sending output list");
6958 }
else if (!t || !(t->IsValid())) {
6959 msg.
Form(
"worker %s could not open a valid socket to merger #%d at %s:%d",
6961 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
6962 "kSendOutput: %s - inform the master", msg.
Data());
6977 Error(
"HandleSubmerger",
"kSendOutput: received not on worker");
6988 Int_t merger_id = -1;
6990 Int_t connections = 0;
6991 (*mess) >> merger_id >> connections;
6993 Info(
"HandleSubmerger",
"worker %s established as merger",
fOrdinal.
Data());
6996 Info(
"HandleSubmerger",
6997 "kBeMerger: worker asked for being merger #%d for %d connections",
6998 merger_id, connections);
7003 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
7004 "kBeMerger: mergerPlayer created (%p) ", mergerPlayer);
7012 Info(
"HandleSubmerger",
"kBeMerger: all outputs from workers accepted");
7024 while ((o = nxo())) {
7030 Info(
"HandleSocketInput",
"removing merged object (%p)", o);
7035 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
"kBeMerger: own outputs added");
7036 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
"starting delayed merging on %s",
fOrdinal.
Data());
7043 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
"delayed merging on %s finished ",
fOrdinal.
Data());
7044 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
"%s sending results to master ",
fOrdinal.
Data());
7047 Warning(
"HandleSubmerger",
"kBeMerger: problems sending output list");
7051 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
"kBeMerger: results sent to master");
7068 Warning(
"HandleSubmerger",
"kBeMerger: problems craeting the merger player!");
7077 Error(
"HandleSubmerger",
"kSendOutput: received not on worker");
7091 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
"kStopMerging");
7093 Info(
"HandleSubmerger",
"kStopMerging: interrupting ...");
7109 Info(
"HandleFork",
"fork cloning not implemented");
7123 if ((pid = fork()) < 0) {
7124 Error(
"Fork",
"failed to fork");
7129 if (!pid)
return pid;
7143 Warning(
"Fork",
"Functionality not provided under windows");
7196 ::Warning(
"TProofServ::ResolveKeywords",
"session tag undefined: ignoring");
7204 ::Warning(
"TProofServ::ResolveKeywords",
"ordinal number undefined: ignoring");
7211 ::Warning(
"TProofServ::ResolveKeywords",
"query seqeuntial number undefined: ignoring");
7214 if (fname.
Contains(
"<file>") && path && strlen(path) > 0) {
7241 std::lock_guard<std::recursive_mutex> lock(
fQMtx);
7257 fprintf(fs,
"%d", st);
7260 Info(
"UpdateSessionStatus",
"status (=%d) update in path: %s", st,
fAdminPath.
Data());
7273 std::lock_guard<std::recursive_mutex> lock(
fQMtx);
7282 std::lock_guard<std::recursive_mutex> lock(
fQMtx);
7291 std::lock_guard<std::recursive_mutex> lock(
fQMtx);
7301 std::lock_guard<std::recursive_mutex> lock(
fQMtx);
7311 std::lock_guard<std::recursive_mutex> lock(
fQMtx);
7322 std::lock_guard<std::recursive_mutex> lock(
fQMtx);
7335 std::lock_guard<std::recursive_mutex> lock(
fQMtx);
7340 while ((o = nxq())) {
7407 if (!dsrv.
EndsWith(
"/")) dsrv +=
"/";
7427 if (srvp ==
"root" || srvp ==
"xrd") path.
Remove(0, pfx.
Length());
7444 fLockId =
open(pname, O_CREAT|O_RDWR, 0644);
7446 fLockId =
open(pname, O_RDWR);
7448 if (fLockId == -1) {
7449 SysError(
"Lock",
"cannot open lock file %s", pname);
7456 #if !defined(R__WIN32) && !defined(R__WINGCC)
7457 if (lockf(fLockId, F_LOCK, (off_t) 1) == -1) {
7458 SysError(
"Lock",
"error locking %s", pname);
7483 lseek(fLockId, 0, SEEK_SET);
7484 #if !defined(R__WIN32) && !defined(R__WINGCC)
7485 if (lockf(fLockId, F_ULOCK, (off_t)1) == -1) {
const char * GetName() const
Returns name of object.
virtual void HandleException(Int_t sig)
Exception handler: we do not try to recover here, just exit.
TList * GetListOfBadSlaves() const
void SetCompressionSettings(Int_t settings=1)
void IncrementDrawQueries()
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
Bool_t AcceptResults(Int_t connections, TVirtualProofPlayer *mergerPlayer)
Accept and merge results from a set of workers.
virtual Int_t GetEntries() const
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
virtual const char * GetTitle() const
Returns title of object.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
static Int_t GetCmdRtn()
Static method to get the return code from the execution of a command via the pipe.
static FILE * SetErrorHandlerFile(FILE *ferr)
Set the file stream where to log (default stderr).
void Interrupt(EUrgent type, ESlaves list=kActive)
Send interrupt to master or slave servers.
Int_t Compress()
Compress the message.
double read(const std::string &file_name)
reading
Ssiz_t Last(char c) const
Find last occurrence of a character c.
ErrorHandlerFunc_t SetErrorHandler(ErrorHandlerFunc_t newhandler)
Set an errorhandler function. Returns the old handler.
static FILE * fgErrorHandlerFile
Int_t CatMotd()
Print message of the day (in the file pointed by the env PROOFMOTD or from fConfDir/etc/proof/motd).
Bool_t IsIdle()
Return the idle status.
virtual Long_t ProcessLine(const char *line, Bool_t sync=kFALSE, Int_t *error=0)
Process a single command line, either a C++ statement or an interpreter command starting with a "...
Long64_t GetNFiles() const
virtual TList * GetInputList() const =0
void IncCPUTime(Double_t procTime)
virtual void HandleRemove(TMessage *mess, TString *slb=0)
Handle remove request.
virtual int GetPid()
Get process id.
void Print(Option_t *option="") const
Dump the content.
virtual Int_t GetLearnEntries()=0
Int_t UnloadPackages()
Unload all packages.
void GetOptions(Int_t *argc, char **argv)
Get and handle command line options.
TList * GetSubmasters()
Get the list of submaster nodes.
const char *const kGUNZIP
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
virtual void Syslog(ELogLevel level, const char *mess)
Send mess to syslog daemon.
static Long64_t GetEntries(Bool_t isTree, const char *filename, const char *path, TString &objname)
Returns number of entries in tree or objects in file.
void AskParallel()
Ask the for the number of parallel slaves.
void LogToMaster(Bool_t on=kTRUE)
static Bool_t GetFileInCmd(const char *cmd, TString &fn)
Static method to extract the filename (if any) form a CINT command.
Double_t RealTime()
Stop the stopwatch (if it is running) and return the realtime (in seconds) passed between the start a...
Int_t ClearPackages()
Remove all packages.
TFileCollection * GetFilesOnServer(const char *server)
Return the subset of files served by 'server'.
virtual void Remove(TSocket *sock)
Remove a socket from the monitor.
virtual Int_t ClearCache(const char *uri)
Clear cached information matching uri.
virtual void AddInput(TObject *inp)=0
void fcn(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag)
void Start(Bool_t reset=kTRUE)
Start the stopwatch.
R__EXTERN Int_t gErrorIgnoreLevel
Bool_t IsWaiting()
Return kTRUE if the session is waiting for the OK to start processing.
R__EXTERN TProofDebug::EProofDebugMask gProofDebugMask
virtual const char * WorkingDirectory()
Return working directory.
virtual void StackTrace()
Print a stack trace.
const char * AsString(const Option_t *option="") const
Return the date & time as a string.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
static TMD5 * FileChecksum(const char *file)
Returns checksum of specified file.
void SetRealTimeLog(Bool_t on=kTRUE)
Switch ON/OFF the real-time logging facility.
void Reset()
Reset the timer.
virtual EQueryAction GetWorkers(TList *workers, Int_t &prioritychange, Bool_t resume=kFALSE)
Get list of workers to be used from now on.
double write(int n, const std::string &file_name, const std::string &vector_type, int compress=0)
writing
static Long_t fgResMemMax
void SetCompressionSettings(Int_t settings=1)
Used to specify the compression level and algorithm: settings = 100 * algorithm + level...
Int_t SetupCommon()
Common part (between TProofServ and TXProofServ) of the setup phase.
ClassImp(TSeqCollection) Int_t TSeqCollection TIter next(this)
Return index of object in collection.
Collectable string class.
virtual TVirtualProofPlayer * MakePlayer(const char *player=0, TSocket *s=0)
Construct a TProofPlayer object.
virtual TSQLResult * Query(const char *sql)=0
static TSQLServer * Connect(const char *db, const char *uid, const char *pw)
virtual void Print(Option_t *option="") const
Print status of PROOF cluster.
virtual const char * GetBuildArch() const
Return the build architecture.
const char * GetObjName() const
TObject * FindObject(const char *name) const
Find object using its name.
virtual Int_t Send(const TMessage &mess)
Send a TMessage object.
Option_t * GetOption() const
virtual Int_t SetOption(ESockOptions opt, Int_t val)
Set socket options.
This class represents a WWW compatible URL.
TString & ReplaceAll(const TString &s1, const TString &s2)
const char * GetDataDir() const
void SetWriteV3(Bool_t on=kTRUE)
Set/Reset the 'OldStreamer' bit in this instance and its elements.
static void FilterLocalroot(TString &path, const char *url="root://dum/")
If 'path' is local and 'dsrv' is Xrootd, apply 'path.Localroot' settings, if any. ...
int GetPathInfo(const char *path, Long_t *id, Long_t *size, Long_t *flags, Long_t *modtime)
Get info about a file: id, size, flags, modification time.
TMacro * GetSelecHdr() const
void SetPlayer(TVirtualProofPlayer *player)
Set a new PROOF player.
virtual Int_t Recv(TMessage *&mess)
Receive a TMessage object.
This class implements a data set to be used for PROOF processing.
Int_t GetNargs() const
Number of function arguments.
void TerminateWorker(TSlave *wrk)
Ask an active worker 'wrk' to terminate, i.e. to shutdown.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
virtual Int_t HandleDataSets(TMessage *mess, TString *slb=0)
Handle here requests about datasets.
virtual void MakePlayer()
Make player instance.
const char * GetProtocol() const
virtual void HandleProcess(TMessage *mess, TString *slb=0)
Handle processing request.
TVirtualProofPlayer * fPlayer
Bool_t UnlinkDataDir(const char *path)
Scan recursively the datadir and unlink it if empty Return kTRUE if it can be unlinked, kFALSE otherwise.
virtual Bool_t RemoveDataSet(const char *uri)
Removes the indicated dataset.
Int_t GetNumOfFiles()
Return the number of files in the dataset.
const char * GetSessionTag() const
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Long64_t GetBytesRead() const
const char *const kPROOF_WorkDir
Int_t LockSession(const char *sessiontag, TProofLockPath **lck)
Try locking query area of session tagged sessiontag.
virtual EExitStatus GetExitStatus() const =0
TList * GetOutputList()
Get list with all object created during processing (see Process()).
static Long_t GetVirtMemMax()
VirtMemMax getter.
TDataSetManager * fDataSetManager
virtual Int_t GetLocalPort()
Get port # to which server socket is bound. In case of error returns -1.
This class represents an Internet Protocol (IP) address.
const char * GetOptions() const
virtual int MakeDirectory(const char *name)
Make a directory.
virtual void AddSignalHandler(TSignalHandler *sh)
Add a signal handler to list of system signal handlers.
Int_t DisablePackage(const char *package)
Remove a specific package.
virtual const char * HomeDirectory(const char *userName=0)
Return the user's home directory.
virtual TFileCollection * GetDataSet(const char *uri, const char *server=0)
Utility function used in various methods for user dataset upload.
Int_t WaitingQueries()
Return the number of waiting queries.
Int_t UpdateSessionStatus(Int_t xst=-1)
Update the session status in the relevant file.
Int_t BuildPackage(const char *package, EBuildPackageOpt opt=kBuildAll, Int_t chkveropt=kCheckROOT, TList *workers=0)
Build specified package.
virtual Bool_t ChangeDirectory(const char *path)
Change directory.
TPluginHandler * FindHandler(const char *base, const char *uri=0)
Returns the handler if there exists a handler for the specified URI.
static const char * filename()
void IncProcTime(Double_t procTime)
void Add(TObject *obj)
This function may not be used (but we need to provide it since it is a pure virtual in TCollection)...
ClassImp(TProofServ) extern"C"
R__EXTERN Int_t gErrorAbortLevel
virtual void Add(TSocket *sock, Int_t interest=kRead)
Add socket to the monitor's active list.
virtual Int_t HandleLibIncPath(TMessage *mess)
Handle lib, inc search paths modification request.
Class supporting a collection of lines with C++ code.
Int_t LoadPlugin()
Load the plugin library for this handler.
virtual int Load(const char *module, const char *entry="", Bool_t system=kFALSE)
Load a shared library.
virtual void SetCurrentQuery(TQueryResult *q)=0
virtual const char * TempDirectory() const
Return a user configured or systemwide directory to create temporary files in.
virtual TSeqCollection * GetListOfFileHandlers() const
TDataSetManagerFile * fDataSetStgRepo
const char * GetSessionTag() const
Double_t CpuTime()
Stop the stopwatch (if it is running) and return the cputime (in seconds) passed between the start an...
void SetQueryRunning(TProofQueryResult *pq)
Set query in running state.
void ToLower()
Change string to lower-case.
virtual const char * DirName(const char *pathname)
Return the directory name in pathname.
TQueryResult * CloneInfo()
Return an instance of TQueryResult containing only the local info fields, i.e.
virtual Int_t SendObject(const TObject *obj, Int_t kind=kMESS_OBJECT)
Send an object.
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
TReaperTimer * fReaperTimer
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
virtual void RemoveAll()
Remove all sockets from the monitor.
virtual void ShowDataSets(const char *uri="*", const char *opt="")
Prints formatted information about the dataset 'uri'.
const char *const kPROOF_PackageLockFile
Each ROOT method (see TMethod) has a linked list of its arguments.
Int_t GetCompressionLevel() const
Int_t DrawQueries() const
TProofQueryResult * LocateQuery(TString queryref, Int_t &qry, TString &qdir)
Locate query referenced by queryref.
virtual TMap * GetGroupQuotaMap()
virtual FILE * OpenPipe(const char *command, const char *mode)
Open a pipe.
TProofServLogHandlerGuard(const char *cmd, TSocket *s, const char *pfx="", Bool_t on=kTRUE)
Init a guard for executing a command in a pipe.
virtual void DeActivateAll()
De-activate all activated sockets.
TMacro * GetSelecImp() const
static volatile Int_t gProofServDebug
const char * GetGroup() const
Long_t ExecPlugin(int nargs, const T &...params)
TMonitor * fMergingMonitor
void ScanPreviousQueries(const char *dir)
Scan the queries directory for the results of previous queries.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
Int_t AddIncludePath(const char *incpath, Bool_t onClient=kFALSE, TList *wrks=0, Bool_t doCollect=kTRUE)
Add 'incpath' to the inc path search.
static void ResolveKeywords(TString &fname, const char *path=0)
Replace <ord>, <user>, <u>, <group>, <stag>, <qnum>, <file>, <rver> and <build> placeholders in fname...
Long64_t GetBytesRead() const
TString & Insert(Ssiz_t pos, const char *s)
virtual void ClearCache(const char *file=0)
Remove file from all file caches.
virtual TObject * At(Int_t idx) const
Returns the object at position idx. Returns 0 if idx is out of range.
static Float_t GetMemHWM()
MemHWM getter.
virtual int GetProcInfo(ProcInfo_t *info) const
Returns cpu and memory used by this process into the ProcInfo_t structure.
Int_t SendCurrentState(ESlaves list=kActive)
Transfer the current state of the master to the active slave servers.
virtual TFileHandler * RemoveFileHandler(TFileHandler *fh)
Remove a file handler from the list of file handlers.
TProofNodeInfo * GetMaster()
Get the master node.
virtual int mkdir(const char *name, Bool_t recursive=kFALSE)
Make a file system directory.
static Long_t fgVirtMemMax
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void HandleCheckFile(TMessage *mess, TString *slb=0)
Handle file checking request.
const char * GetGroup() const
void SendParallel(Bool_t async=kFALSE)
Send number of parallel nodes to master or client.
const char * GetService() const
virtual void HandleSocketInput()
Handle input coming from the client or from the master server.
std::recursive_mutex fQMtx
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
static const char * GetMacroPath()
Get macro search path. Static utility function.
static Int_t GetErrno()
Static function returning system error number.
virtual void HandleArchive(TMessage *mess, TString *slb=0)
Handle archive request.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=1, Int_t netopt=0)
Create / open a file.
virtual void UpdateProgressInfo()=0
Int_t RemoveIncludePath(const char *incpath, Bool_t onClient=kFALSE)
Remove 'incpath' from the inc path search.
virtual Long64_t Process(TDSet *set, const char *selector, Option_t *option="", Long64_t nentries=-1, Long64_t firstentry=0)=0
TTimeStamp GetLastUsage()
virtual TObject * Clone(const char *newname="") const
Make a clone of an collection using the Streamer facility.
const char * Data() const
Manages an element of a TDSet.
virtual TObject * ReadObject(const TClass *cl)
Read object from I/O buffer.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
virtual Int_t SendRaw(const void *buffer, Int_t length, ESendRecvOptions opt=kDefault)
Send a raw buffer of specified length.
static void SetLastEntry(Long64_t lastentry)
Set the last entry before exception.
static struct mg_connection * fc(struct mg_context *ctx)
Int_t Update(Long64_t avgsize=-1)
Update accumulated information about the elements of the collection (e.g.
virtual const char * GetDirEntry(void *dirp)
Get a directory entry. Returns 0 if no more entries.
virtual TList * GetOutputList() const =0
virtual int Unlink(const char *name)
Unlink, i.e. remove, a file.
void Stop()
Stop the stopwatch.
TList * GetWorkers()
Get the list of worker nodes.
void StopProcess(Bool_t abort, Int_t timeout=-1)
Send STOPPROCESS message to master and workers.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
virtual FILE * TempFileName(TString &base, const char *dir=0)
Create a secure temporary file by appending a unique 6 letter string to base.
virtual void HandleFork(TMessage *mess)
Cloning itself via fork. Not implemented.
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
virtual void Sleep(UInt_t milliSec)
Sleep milliSec milli seconds.
virtual void MergeOutput(Bool_t=kFALSE)=0
This code implements the MD5 message-digest algorithm.
The TNamed class is the base class for all named ROOT classes.
virtual void ShowQuota(const char *opt)
Display quota information.
void SetLogLevel(Int_t level, UInt_t mask=TProofDebug::kAll)
Set server logging level.
virtual void Run(Bool_t retrn=kFALSE)
Main application eventloop. Calls system dependent eventloop via gSystem.
virtual char * ReadString(char *s, Int_t max)
Read string from I/O buffer.
const char *const kPROOF_QueryDir
static Bool_t Initialized()
Return kTRUE if the TROOT object has been initialized.
static Long64_t GetFileBytesRead()
Static function returning the total number of bytes read from all files.
virtual Int_t RegisterDataSet(const char *uri, TFileCollection *dataSet, const char *opt)
Register a dataset, perfoming quota checkings, if needed.
virtual void ShowCache(Bool_t all=kFALSE)
List contents of file cache.
Int_t GetQuerySeqNum() const
TDSetElement * GetNextPacket(Long64_t totalEntries=-1)
Get next range of entries to be processed on this server.
virtual void Start(Long_t milliSec=-1, Bool_t singleShot=kFALSE)
Starts the timer with a milliSec timeout.
void Init(const TFunction *func)
Initialize the method invocation environment based on the TFunction object.
TList * GetListOfDeActives() const
Returns a list with all de-active sockets.
void DeleteAll()
Remove all (key,value) pairs from the map AND delete the keys AND values when they are allocated on t...
virtual const char * GetDynamicPath()
Return the dynamic path (used to find shared libraries).
TVirtualProofPlayer * GetPlayer() const
virtual void HandleUrgentData()
Handle Out-Of-Band data sent by the master or client.
TFileHandler * fInputHandler
Int_t CleanupSession(const char *sessiontag)
Cleanup query dir qdir.
virtual const char * Getenv(const char *env)
Get environment variable.
TList * GetListOfElements() const
static Int_t RegisterDataSets(TList *in, TList *out, TDataSetManager *dsm, TString &e)
Register TFileCollections in 'out' as datasets according to the rules in 'in'.
Int_t ApplyMaxQueries(Int_t mxq)
Scan the queries directory and remove the oldest ones (and relative dirs, if empty) in such a way onl...
TString & Append(const char *cs)
std::vector< std::vector< double > > Data
virtual void ExitLoop()
Exit from event loop.
TObject * GetValue(const char *keyname) const
Returns a pointer to the value associated with keyname as name of the key.
virtual UserGroup_t * GetUserInfo(Int_t uid)
Returns all user info in the UserGroup_t structure.
TProofQueryResult * NextQuery()
Get the next query from the waiting list.
const char * GetUser() const
void FlushLogFile()
Reposition the read pointer in the log file to the very end.
Int_t Atoi() const
Return integer value of string.
virtual ~TProofServ()
Cleanup.
Bool_t IsParallel() const
Int_t UnloadPackages()
Unloads all enabled packages. Returns -1 in case of error, 0 otherwise.
static Long_t GetResMemMax()
ResMemMax getter.
TList * GetListOfInactiveSlaves() const
virtual TSocket * Accept(UChar_t Opt=0)
Accept a connection on a server socket.
Book space in a file, create I/O buffers, to fill them, (un)compress them.
Method or function calling interface.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual Int_t HandleCache(TMessage *mess, TString *slb=0)
Handle here all cache and package requests.
Int_t(* OldProofServAuthSetup_t)(TSocket *, Bool_t, Int_t, TString &, TString &, TString &)
virtual void HandleQueryList(TMessage *mess)
Handle request for list of queries.
A container class for query results.
Int_t ActivateWorker(const char *ord, Bool_t save=kTRUE)
Make sure that the worker identified by the ordinal number 'ord' is in the active list...
Long64_t GetEntries() const
TList * GetListOfSlaveInfos()
Returns list of TSlaveInfo's. In case of error return 0.
const char * GetWorkDir() const
void Error(const char *location, const char *msgfmt,...)
const char *const kPROOF_DataDir
TSocket * Select()
Return pointer to socket for which an event is waiting.
virtual Int_t SendAsynMessage(const char *msg, Bool_t lf=kTRUE)
Send an asychronous message to the master / client .
virtual void SetProcessInfo(Long64_t ent, Float_t cpu=0., Long64_t siz=-1, Float_t inittime=0., Float_t proctime=0.)
Set processing info.
TObject * GetParameter(const char *par) const
Get specified parameter.
static TVirtualProofPlayer * Create(const char *player, TProof *p, TSocket *s=0)
Create a PROOF player.
TObject * FindObject(const char *keyname) const
Check if a (key,value) pair exists with keyname as name of the key.
virtual void Print(Option_t *option="") const
This method must be overridden when a class wants to print itself.
virtual ~TProofServLogHandler()
Handle available message in the open file.
virtual ~TReaperTimer()
Destructor.
virtual Int_t Fork()
Fork a child.
Bool_t Notify()
Check if any of the registered children has changed its state.
TShutdownTimer(TProofServ *p, Int_t delay)
Construtor.
static TProofServ * This()
Static function returning pointer to global object gProofServ.
Bool_t RemoveDataSet(const char *group, const char *user, const char *dsName)
Removes the indicated dataset.
virtual Int_t ReadFile(const char *fname, EEnvLevel level)
Read and parse the resource file for a certain level.
const char *const kPROOF_QueryLockFile
static Float_t GetMemStop()
MemStop getter.
void Sort(Bool_t useindex=kFALSE)
Sort the collection.
void Reset()
Reset the message buffer so we can use (i.e. fill) it again.
Int_t UploadPackage(const char *par, EUploadPackageOpt opt=kUntar, TList *workers=0)
Upload a PROOF archive (PAR file).
const char Int_t const char TProof Int_t const char * workdir
virtual void AddQueryResult(TQueryResult *q)=0
Named parameter, streamable and storable.
Int_t GetPriority()
Get the processing priority for the group the user belongs too.
virtual Bool_t Load() const
Load the macro into the interpreter.
TSocket * GetSocket() const
const TString & GetWorkDir() const
virtual void Close(Option_t *opt="")
Close the socket.
static Int_t fgLogToSysLog
Int_t ReceiveFile(const char *file, Bool_t bin, Long64_t size)
Receive a file, either sent by a client or a master server.
virtual void Setenv(const char *name, const char *value)
Set environment variable.
The purpose of this class is to provide a complete node description for masters, submasters and worke...
TString GetString() const
const char * GetPrefix() const
Int_t DisablePackages()
Remove all packages.
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
Class managing the query-result area.
R__EXTERN TSystem * gSystem
Class providing the PROOF server.
static Int_t WriteChecksum(const char *file, const TMD5 *md5)
Writes checksum in ASCII format to specified file.
Float_t GetUsedCPU() const
TProofLockPath * fPackageLock
static void GetLocalServer(TString &dsrv)
Extract LOCALDATASERVER info in 'dsrv'.
const char *const kPROOF_DataSetDir
TList * GetListOfSlaves() const
Long64_t GetBytes() const
void SetLearnTime(Double_t learnTime)
virtual Int_t GetValue(const char *name, Int_t dflt)
Returns the integer value for a resource.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
TList * GetListOfLines() const
virtual TObject * Remove(TObject *obj)
Remove object from the list.
void ShowPackages(Bool_t all=kFALSE, Bool_t redirlog=kFALSE)
List contents of package directory.
Bool_t Gets(FILE *fp, Bool_t chop=kTRUE)
Read one line from the stream, including the , or until EOF.
virtual Bool_t ExistsDataSet(const char *uri)
Checks if the indicated dataset exits.
Bool_t ParseUri(const char *uri, TString *dsGroup=0, TString *dsUser=0, TString *dsName=0, TString *dsTree=0, Bool_t onlyCurrent=kFALSE, Bool_t wildcards=kFALSE)
Parses a (relative) URI that describes a DataSet on the cluster.
Bool_t Notify()
Handle expiration of the idle timer. The session will just be terminated.
virtual TEnvRec * Lookup(const char *n)
Loop over all resource records and return the one with name.
virtual void SetDynamicPath(const char *pathname)
Set the dynamic path to a new value.
virtual Int_t ShowCache(const char *uri)
Show cached information matching uri.
void SetActive(Bool_t=kTRUE)
Int_t WriteDataSet(const char *group, const char *user, const char *dsName, TFileCollection *dataset, UInt_t option=0, TMD5 *checksum=0)
Writes indicated dataset.
const char * GetHostFQDN() const
Return fully qualified domain name of url host.
Int_t QueueQuery(TProofQueryResult *pq)
Add a query to the waiting list Returns the number of queries in the list.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
const char * GetConfDir() const
Bool_t TestBit(UInt_t f) const
const char *const kPROOF_CacheLockFile
TIdleTOTimer * fIdleTOTimer
Int_t ScanDataSet(const char *uri, const char *opt)
Scans the dataset indicated by 'uri' following the 'opts' directives.
virtual int Umask(Int_t mask)
Set the process file creation mode mask.
void SetRunning(Int_t startlog, const char *par, Int_t nwrks)
Call when running starts.
Bool_t IsDataReady(Long64_t &totalbytes, Long64_t &bytesready)
See if the data is ready to be analyzed.
This class implements a plugin library manager.
virtual void SetMerging(Bool_t on=kTRUE)=0
void SaveSource(FILE *fp)
Save macro source in file pointer fp.
virtual Int_t Echo(const TObject *obj)
Sends an object to master and workers and expect them to send back a message with the output of its T...
virtual Int_t ReadFile(const char *filename)
Read lines in filename in this macro.
A TEventList object is a list of selected events (entries) in a TTree.
virtual void HandleSigPipe()
Called when the client is not alive anymore (i.e.
Handles synchronous and a-synchronous timer events.
virtual const char * GetField(Int_t field)=0
Bool_t IsEndMaster() const
virtual const char * GetName() const
Returns name of object.
virtual Bool_t IsValid() const
static void AddEnvVar(const char *name, const char *value)
Add an variable to the list of environment variables passed to proofserv on the master and slaves...
TServerSocket * fMergingSocket
TSubString Strip(EStripType s=kTrailing, char c= ' ') const
Return a substring of self stripped at beginning and/or end.
Int_t GetProtocol() const
Int_t Ping(ESlaves list)
Ping PROOF slaves. Returns the number of slaves that responded.
const Int_t kPROOF_Protocol
virtual Int_t Exec(const char *shellcmd)
Execute a command.
static Bool_t IsActive()
Static function that returns kTRUE in case we are a PROOF server.
virtual void Abort(int code=0)
Abort the application.
Bool_t FinalizeQuery(TProofQueryResult *pq, TProof *proof, TVirtualProofPlayer *player)
Final steps after Process() to complete the TQueryResult instance.
virtual void ProcessNext(TString *slb=0)
process the next query from the queue of submitted jobs.
Int_t RemoveWorkers(TList *wrks)
Used for shuting down the workres after a query is finished.
virtual const char * GetBuildCompilerVersion() const
Return the build compiler version.
void SetName(const char *name)
Int_t SendFile(const char *file, Int_t opt=(kBinary|kForward|kCp|kCpBin), const char *rfile=0, TSlave *sl=0)
Send a file to master or slave servers.
static void EnableSchemaEvolutionForAll(Bool_t enable=kTRUE)
Static function enabling or disabling the automatic schema evolution.
void Warning(const char *location, const char *msgfmt,...)
Long64_t GetEntries() const
TShutdownTimer * fShutdownTimer
const char * GetUser() const
virtual void FreeDirectory(void *dirp)
Free a directory.
Int_t SendResults(TSocket *sock, TList *outlist=0, TQueryResult *pq=0)
Sends all objects from the given list to the specified socket.
const char * GetImage() const
virtual int ClosePipe(FILE *pipe)
Close the pipe.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
virtual void ValidateDSet(TDSet *dset)
Validate a TDSet.
void AddPid(Int_t pid)
Add an entry for 'pid' in the internal list.
virtual void HandleSubmerger(TMessage *mess)
Handle a message of type kPROOF_SUBMERGER.
char * StrDup(const char *str)
Duplicate the string str.
Int_t RemoveDynamicPath(const char *libpath, Bool_t onClient=kFALSE)
Remove 'libpath' from the lib path search.
TEllipse compiler(9, 11, 3, 1.5)
virtual void Print(Option_t *option="") const
Default print for collections, calls Print(option, 1).
virtual void RemoveQueryResult(const char *ref)=0
virtual void HandleRetrieve(TMessage *mess, TString *slb=0)
Handle retrieve request.
Int_t SendCommand(const char *cmd, ESlaves list=kActive)
Send command to be executed on the PROOF master and/or slaves.
virtual Int_t HandleWorkerLists(TMessage *mess)
Handle here all requests to modify worker lists.
virtual TObject * Last() const
Return the last object in the list. Returns 0 when list is empty.
virtual Int_t RedirectOutput(const char *name, const char *mode="a", RedirectHandle_t *h=0)
Redirect standard output (stdout, stderr) to the specified file.
Int_t LoadPackage(const char *package, Bool_t notOnClient=kFALSE, TList *loadopts=0, TList *workers=0)
Load specified package.
TString & Remove(Ssiz_t pos)
TObject * Get(const char *namecycle)
Get object with name "name;cycle" (e.g.
virtual int Chmod(const char *file, UInt_t mode)
Set the file permission bits. Returns -1 in case or error, 0 otherwise.
R__EXTERN TProof * gProof
TObject * GetInputObject(const char *classname) const
Return first instance of class 'classname' in the input list.
virtual void SysError(const char *method, const char *msgfmt,...) const
Issue system error message.
Class used by TMap to store (key,value) pairs.
Int_t OldAuthSetup(TString &wconf)
Setup authentication related stuff for old versions.
TList * GetListOfActiveSlaves() const
virtual const char * GetIncludePath()
Get the list of include path.
virtual Int_t GetSize() const
Bool_t Notify()
Handle available message in the open file.
Long64_t GetFirst() const
virtual void SendLogFile(Int_t status=0, Int_t start=-1, Int_t end=-1)
Send log file to master.
TString GetFileName() const
void ResetParam()
Reset parameter list. To be used before the first call the SetParam().
virtual Long64_t GetEventsProcessed() const =0
Int_t GetActive(Long_t timeout=-1) const
Return number of sockets in the active list.
void SetSysInfo(SysInfo_t si)
Setter for fSysInfo.
virtual Func_t DynFindSymbol(const char *module, const char *entry)
Find specific entry point in specified library.
TList * GetListOfMethodArgs()
Return list containing the TMethodArgs of a TFunction.
virtual const char * GetName() const
Returns name of object.
virtual const char * HostName()
Return the system's host name.
virtual int Symlink(const char *from, const char *to)
Create a symbolic link from file1 to file2.
void Reset(const char *dir)
Reset PROOF environment to be ready for execution of next command.
char * DynamicPathName(const char *lib, Bool_t quiet=kFALSE)
Find a dynamic library called lib using the system search paths.
Int_t Lock()
Locks the directory.
static Int_t GetInputData(TList *input, const char *cachedir, TString &emsg)
Get the input data from the file defined in the input list.
Bool_t UseDynamicStartup() const
void Run(Bool_t retrn=kFALSE)
Main server eventloop.
virtual void SetEntryList(TObject *aList)
Set entry (or event) list for this data set.
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
ClassImp(TMCParticle) void TMCParticle printf(": p=(%7.3f,%7.3f,%9.3f) ;", fPx, fPy, fPz)
const char * GetOrdinal() const
The TTimeStamp encapsulates seconds and ns since EPOCH.
This class controls a Parallel ROOT Facility, PROOF, cluster.
virtual void SetInputList(TList *in, Bool_t adopt=kTRUE)
Set / change the input list.
virtual Int_t GetGid(const char *group=0)
Returns the group's id. If group = 0, returns current user's group.
virtual TQueryResult * GetCurrentQuery() const =0
void SetRunStatus(ERunStatus rst)
void RemoveQuery(TQueryResult *qr, Bool_t soft=kFALSE)
Remove everything about query qr.
virtual TInetAddress GetSockName(int sock)
Get Internet Protocol (IP) address of host and port #.
Int_t Unlock()
Unlock the directory.
virtual void StopProcess(Bool_t abort, Int_t timeout=-1)=0
virtual void Clear(Option_t *option="")
Remove all objects from the list.
virtual Int_t GetUid(const char *user=0)
Returns the user's id. If user = 0, returns current user's id.
void SetIdle(Bool_t st=kTRUE)
Change the idle status.
Int_t AddWorkers(TList *wrks)
Works on the master node only.
void SetArchived(const char *archfile)
Set (or update) query in archived state.
Bool_t Notify()
Handle expiration of the shutdown timer.
TQueryResult version adapted to PROOF neeeds.
static TMap * GetDataSetNodeMap(TFileCollection *fc, TString &emsg)
Get a map {server-name, list-of-files} for collection 'fc' to be used in TPacketizerFile.
void Print(Option_t *option="") const
Print status of slave server.
void SaveQuery(TProofQueryResult *qr, const char *fout=0)
Save current status of query 'qr' to file name fout.
Int_t Match(const TString &s, UInt_t start=0)
Runs a match on s against the regex 'this' was created with.
static TString fgSysLogEntity
Int_t UnloadPackage(const char *package)
Unload specified package.
void Throw(int code)
If an exception context has been set (using the TRY and RETRY macros) jump back to where it was set...
Mother of all ROOT objects.
Float_t GetCpuTime() const
The purpose of this class is to provide a standard interface to static config files.
Global functions class (global functions are obtained from CINT).
void Print(Option_t *option="") const
Prints the contents of the TFileCollection.
virtual TObject * First() const
Return the first object in the list. Returns 0 when list is empty.
THashList * fGlobalPackageDirList
void TruncateLogFile()
Truncate the log file to the 80% of the required max size if this is set.
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e.
virtual Bool_t Add(const char *file, const char *objname=0, const char *dir=0, Long64_t first=0, Long64_t num=-1, const char *msd=0)
Add file to list of files to be analyzed.
Bool_t ExistsDataSet(const char *group, const char *user, const char *dsName)
Checks if the indicated dataset exits.
virtual void HandleGetTreeHeader(TMessage *mess)=0
virtual void Openlog(const char *name, Int_t options, ELogFacility facility)
Open connection to system log daemon.
void ShowEnabledPackages(Bool_t all=kFALSE)
List which packages are enabled.
Bool_t R_ISDIR(Int_t mode)
virtual Int_t CreateServer()
Finalize the server setup.
Int_t UnloadPackage(const char *package)
Removes link to package in working directory, removes entry from include path, removes entry from ena...
virtual Long64_t GetCacheSize()=0
virtual void Add(TObject *obj)
Wrapper for PCRE library (Perl Compatible Regular Expressions).
Int_t GetSessionStatus()
Return the status of this session: 0 idle 1 running 2 being terminated (currently unused) 3 queued 4 ...
Class that contains a list of TFileInfo's and accumulated meta data information about its entries...
void Execute(const char *, const char *, int *=0)
Execute method on this object with the given parameter string, e.g.
virtual void SetOutputFilePath(const char *fp)=0
TFileCollection * GetDataSet(const char *uri, const char *srv=0)
Utility function used in various methods for user dataset upload.
TProofQueryResult * MakeQueryResult(Long64_t nentries, const char *opt, TList *inl, Long64_t first, TDSet *dset, const char *selec, TObject *elist)
Create a TProofQueryResult instance for this query.
virtual void Exit(int code, Bool_t mode=kTRUE)
Exit the application.
Int_t CleanupQueriesDir()
Remove all queries results referring to previous sessions.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
R__EXTERN Int_t gProofDebugLevel
void WriteObject(const TObject *obj)
Write object to message buffer.
virtual Int_t Setup()
Print the ProofServ logo on standard output.
TProofServLogHandler(const char *cmd, TSocket *s, const char *pfx="")
Execute 'cmd' in a pipe and handle output messages from the related file.
void AskStatistics()
Ask the for the statistics of the slaves.
const char *const kUNTAR3
void SetParam(Long_t l)
Add a long method parameter.
static Int_t SaveInputData(TQueryResult *qr, const char *cachedir, TString &emsg)
Save input data file from 'cachedir' into the sandbox or create a the file with input data objects...
Bool_t IsTopMaster() const
Int_t SetParallel(Int_t nodes=-1, Bool_t random=kFALSE)
Tell PROOF how many slaves to use in parallel.
virtual void * OpenDirectory(const char *name)
Open a directory. Returns 0 if directory does not exist.
ClassImp(TSlaveInfo) Int_t TSlaveInfo const TSlaveInfo * si
Used to sort slaveinfos by ordinal.
virtual void DeletePlayer()
Delete player instance.
Int_t AddDynamicPath(const char *libpath, Bool_t onClient=kFALSE, TList *wrks=0, Bool_t doCollect=kTRUE)
Add 'libpath' to the lib path search.
virtual TProofProgressStatus * GetProgressStatus() const =0
void RedirectOutput(const char *dir=0, const char *mode="w")
Redirect stdout to a log file.
virtual void AddIncludePath(const char *includePath)
Add includePath to the already set include path.
virtual Int_t AddOutputObject(TObject *obj)=0
virtual void AddFileHandler(TFileHandler *fh)
Add a file handler to the list of system file handlers.
static void ResetErrno()
Static function resetting system error number.
static void SetLastMsg(const char *lastmsg)
Set the message to be sent back in case of exceptions.
Class describing a generic file including meta information.
static void SetDefaultPrefix(const char *pfx)
Static method to set the default prefix.
This class creates the ROOT Application Environment that interfaces to the windowing system eventloop...
void RestartComputeTime()
Reset the compute time.
const AParamType & GetVal() const
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
Abstract interface for the PROOF player.
virtual void Terminate(Int_t status)
Terminate the proof server.
TClass * GetClass() const
virtual ~TProofServLogHandlerGuard()
Close a guard for executing a command in a pipe.
const Bool_t kIterBackward
virtual Int_t SavePartialResults(Bool_t queryend=kFALSE, Bool_t force=kFALSE)=0
Bool_t IsParallel() const
True if in parallel mode.
void SendStatistics()
Send statistics of slave server to master or client.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual Int_t Load(const char *macro, Bool_t notOnClient=kFALSE, Bool_t uniqueOnly=kTRUE, TList *wrks=0)
Load the specified macro on master, workers and, if notOnClient is kFALSE, on the client...
Int_t Substitute(TString &s, const TString &r, Bool_t doDollarSubst=kTRUE)
Substitute matching part of s with r, dollar back-ref substitution is performed if doDollarSubst is t...
Container class for processing statistics.
A TSelector object is used by the TTree::Draw, TTree::Scan, TTree::Process to navigate in a TTree and...
static void ErrorHandler(Int_t level, Bool_t abort, const char *location, const char *msg)
The PROOF error handler function.
static TMD5 * ReadChecksum(const char *file)
Returns checksum stored in ASCII in specified file.
virtual Int_t RecvRaw(void *buffer, Int_t length, ESendRecvOptions opt=kDefault)
Receive a raw buffer of specified length bytes.
Int_t ClearPackage(const char *package)
Remove a specific package.
void SetString(const char *s)
virtual void SetTitle(const char *title="")
Change (i.e. set) the title of the TNamed.
TList * PreviousQueries() const
Int_t CleanupWaitingQueries(Bool_t del=kTRUE, TList *qls=0)
Cleanup the waiting queries list.
virtual void TurnOn()
Add the timer to the system timer list.
A List of entry numbers in a TTree or TChain.
const char * GetName() const
Returns name of object.
Int_t DeactivateWorker(const char *ord, Bool_t save=kTRUE)
Remove the worker identified by the ordinal number 'ord' from the the active list.
virtual TMap * GetDataSets(const char *uri, UInt_t=TDataSetManager::kExport)
Returns all datasets for the <group> and <user> specified by <uri>.
static TString fgSysLogService
Int_t GetParallel() const
Returns number of slaves active in parallel mode.
TProofServ(Int_t *argc, char **argv, FILE *flog=0)
Main constructor.
TProofServLogHandler * fExecHandler
TProofLockPath * fCacheLock
const char * GetFile() const
virtual int GetSysInfo(SysInfo_t *info) const
Returns static system info, like OS type, CPU type, number of CPUs RAM size, etc into the SysInfo_t s...
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
Compare a string to char *cs2.
virtual void SetIncludePath(const char *includePath)
IncludePath should contain the list of compiler flags to indicate where to find user defined header f...
Bool_t IsEndMaster() const
TQueryResultManager * fQMgr
virtual TObjString * GetLineWith(const char *text) const
Search the first line containing text.
virtual Long_t ProcessFile(const char *file, Int_t *error=0, Bool_t keep=kFALSE)
Process a file containing a C++ macro.
TProofLockPath * fQueryLock
static Long64_t fgLastEntry
const char *const kPROOF_CacheDir
virtual TSQLRow * Next()=0
const char *const kPROOF_PackDir
static Int_t AssertDataSet(TDSet *dset, TList *input, TDataSetManager *mgr, TString &emsg)
Make sure that dataset is in the form to be processed.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.