44# include <sys/types.h>
51#include "RConfigure.h"
130 a = Getline(
"\nSwitch to asynchronous mode not supported remotely:"
131 "\nEnter S/s to stop, Q/q to quit, any other key to continue: ");
133 a = Getline(
"\nEnter A/a to switch asynchronous, S/s to stop, Q/q to quit,"
134 " any other key to continue: ");
136 if (
a[0] ==
'Q' ||
a[0] ==
'S' ||
a[0] ==
'q' ||
a[0] ==
's') {
138 Info(
"Notify",
"Processing interrupt signal ... %c",
a[0]);
159 fSocket(
s), fProof(p)
190 while (myord && otherord) {
191 Int_t myval = atoi(myord);
192 Int_t otherval = atoi(otherord);
193 if (myval < otherval)
return 1;
194 if (myval > otherval)
return -1;
195 myord = strchr(myord,
'.');
197 otherord = strchr(otherord,
'.');
198 if (otherord) otherord++;
200 if (myord)
return -1;
201 if (otherord)
return 1;
298 Error(
"SetMergedWorker",
"all workers have been already merged before!");
311 Error(
"AddWorker",
"all workers have been already assigned to this merger");
365 if( 0 == _cluster->
Length() ) {
366 Error(
"PoDCheckUrl",
"PoD server is not running");
406 if (!masterurl || strlen(masterurl) <= 0) {
409 }
else if (!(strstr(masterurl,
"://"))) {
446 }
else if (
fMaster ==
"prooflite") {
455 Init(masterurl, conffile, confdir, loglevel, alias);
460 if (
Exec(
"gProofServ->GetUser()",
"0",
kTRUE) == 0) {
467 emsg =
"could not find 'const char *' string in macro log";
470 emsg =
"could not retrieve user info";
479 Warning(
"TProof",
"%s: using local default %s", emsg.
Data(), usr.
Data());
489 gROOT->GetListOfSockets()->Remove(mgr);
490 gROOT->GetListOfSockets()->Add(mgr);
495 if (!
gROOT->GetListOfProofs()->FindObject(
this))
496 gROOT->GetListOfProofs()->Add(
this);
515 if (!
gROOT->GetListOfProofs()->FindObject(
this))
516 gROOT->GetListOfProofs()->Add(
this);
623 while (envs.Tokenize(env, from,
",")) {
626 Warning(
"Init",
"request for sending over undefined environemnt variable '%s' - ignoring", env.
Data());
628 if (!envsfound.
IsNull()) envsfound +=
",";
636 Warning(
"Init",
"none of the requested env variables were found: '%s'", envs.Data());
638 Info(
"Init",
"the following environment variables have been added to the list to be sent to the nodes: '%s'", envsfound.
Data());
722 gROOT->GetListOfProofs()->Remove(
this);
738 Emit(
"CloseWindow()");
750 const char *confdir,
Int_t loglevel,
const char *alias)
774 if (!conffile || !conffile[0])
776 if (!confdir || !confdir[0])
832 Error(
"Init",
"could not create temporary logfile");
834 Error(
"Init",
"could not open temp logfile for reading");
896 if (enableSchemaEvolution) {
899 Info(
"TProof",
"automatic schema evolution in TMessage explicitly disabled");
909 Error(
"Init",
"failure asserting sandbox directory %s", sandbox.
Data());
918 Error(
"Init",
"failure asserting directory %s", packdir.
Data());
923 Info(
"Init",
"package directory set to %s", packdir.
Data());
932 Info(
"Init",
" %d global package directories registered", nglb);
954 GetRC(
"Proof.DynamicStartup", dyn);
971 if (
s.IsDigit()) nwrk =
s.Atoi();
994 gROOT->GetListOfSockets()->Add(
this);
1019 }
else if (sb ==
"..") {
1042 const char *cq = (
IsLite()) ?
"\"" :
"";
1043 while (sconf.Tokenize(opt, from,
",")) {
1044 if (opt.
IsNull())
continue;
1051 TString mst, top, sub, wrk, all;
1056 all =
n->GetTitle();
1058 mst =
n->GetTitle();
1060 top =
n->GetTitle();
1062 sub =
n->GetTitle();
1064 wrk =
n->GetTitle();
1066 if (all !=
"" && mst ==
"") mst = all;
1067 if (all !=
"" && top ==
"") top = all;
1068 if (all !=
"" && sub ==
"") sub = all;
1069 if (all !=
"" && wrk ==
"") wrk = all;
1070 if (all !=
"" && all.
BeginsWith(
"valgrind_opts:")) {
1072 Info(
"ParseConfigField",
"valgrind run: resetting 'PROOF_WRAPPERCMD':"
1073 " must be set again for next run , if any");
1077 cmd.
Form(
"%svalgrind -v --suppressions=<rootsys>/etc/valgrind-root.supp", cq);
1078 TString mstlab(
"NO"), wrklab(
"NO");
1079 Bool_t doMaster = (opt ==
"valgrind" || (opt.
Contains(
"master") &&
1085 if (mst ==
"" || mst.
BeginsWith(
"valgrind_opts:")) {
1087 var.
Form(
"%s --log-file=<logfilemst>.valgrind.log %s", cmd.
Data(), mst.
Data());
1090 }
else if (mst !=
"") {
1096 "master valgrinding does not make sense for PROOF-Lite: ignoring");
1098 if (!opt.
Contains(
"workers"))
return;
1100 if (opt ==
"valgrind" || opt ==
"valgrind=") opt =
"valgrind=workers";
1105 if (top ==
"" || top.
BeginsWith(
"valgrind_opts:")) {
1107 var.
Form(
"%s --log-file=<logfilemst>.valgrind.log %s", cmd.
Data(), top.
Data());
1110 }
else if (top !=
"") {
1116 if (sub ==
"" || sub.
BeginsWith(
"valgrind_opts:")) {
1118 var.
Form(
"%s --log-file=<logfilemst>.valgrind.log %s", cmd.
Data(), sub.
Data());
1121 }
else if (sub !=
"") {
1127 if (wrk ==
"" || wrk.
BeginsWith(
"valgrind_opts:")) {
1129 var.
Form(
"%s --log-file=<logfilewrk>.__valgrind__.log %s%s", cmd.
Data(), wrk.
Data(), cq);
1134 nwrks = opt(inw+1, opt.
Length());
1135 if (!nwrks.
IsDigit()) nwrks =
"2";
1147 }
else if (wrk !=
"") {
1161 Printf(
" ---> Starting a debug run with valgrind (master:%s, workers:%s)", mstlab.Data(), wrklab.
Data());
1163 Printf(
" ---> Starting a debug run with valgrind (workers:%s)", wrklab.
Data());
1165 Printf(
" ---> Please be patient: startup may be VERY slow ...");
1166 Printf(
" ---> Logs will be available as special tags in the log window (from the progress dialog or TProof::LogViewer()) ");
1167 Printf(
" ---> (Reminder: this debug run makes sense only if you are running a debug version of ROOT)");
1176 Printf(
"*** Requested IgProf performance profiling ***");
1177 TString addLogExt =
"__igprof.pp__.log";
1178 TString addLogFmt =
"igprof -pk -pp -t proofserv.exe -o %s.%s";
1186 tmp.
Form(addLogFmt.
Data(),
"<logfilemst>", addLogExt.
Data());
1189 tmp.
Form(addLogFmt.
Data(),
"<logfilewrk>", addLogExt.
Data());
1215 if ((
c !=
'+') && ((
c <
'0') || (
c >
'9')))
1234 if (
IsLite() && cpuPin) {
1235 Printf(
"*** Requested CPU pinning ***");
1237 const char *pinCmd =
"taskset -c <cpupin>";
1240 if (ev && (p =
dynamic_cast<TNamed *
>(ev->
FindObject(
"PROOF_SLAVE_WRAPPERCMD")))) {
1246 val.
Form(
"\"%s\"", pinCmd);
1259 if (!inpath || strlen(inpath) <= 0) {
1260 Error(
"AssertPath",
"undefined input path");
1269 Error(
"AssertPath",
"could not create path %s", path.
Data());
1276 Error(
"AssertPath",
"could not make path %s writable", path.
Data());
1295 gROOT->GetListOfSockets()->Remove(mgr);
1296 gROOT->GetListOfSockets()->Add(mgr);
1311 Error(
"AddWorkers",
"AddWorkers can only be called on the master!");
1315 if (!workerList || !(workerList->
GetSize())) {
1316 Error(
"AddWorkers",
"empty list of workers!");
1337 if (!addedWorkers) {
1339 Error(
"AddWorkers",
"cannot create new list for the workers to be added");
1347 while ((to = next())) {
1396 addedWorkers->
Add(slave);
1404 Info(
"AddWorkers",
"worker on host %s created"
1410 m <<
TString(
"Opening connections to workers") << nSlaves
1411 << nSlavesDone << slaveOk;
1425 TIter nxsl(addedWorkers);
1427 while ((sl = (
TSlave *) nxsl())) {
1438 Info(
"AddWorkers",
"worker on host %s finalized"
1448 m <<
TString(
"Setting up worker servers") << nSlaves
1449 << nSlavesDone << slaveOk;
1462 if (
s.IsDigit()) nwrk =
s.Atoi();
1468 Info(
"AddWorkers",
"will invoke GoMoreParallel()");
1471 Info(
"AddWorkers",
"GoMoreParallel()=%d", nw);
1477 Info(
"AddWorkers",
"will invoke GoParallel()");
1486 Info(
"AddWorkers",
"will invoke SaveWorkerInfo()");
1492 Info(
"AddWorkers",
"will invoke SendParallel()");
1495 if (goMoreParallel &&
fPlayer) {
1500 Info(
"AddWorkers",
"will send the PROCESS message to selected workers");
1508 delete addedWorkers;
1520 if (packs && packs->
GetSize() > 0) {
1523 while ((pck = (
TPair *) nxp())) {
1529 Info(
"SetupWorkersEnv",
"will invoke UploadPackage() and EnablePackage() on added workers");
1534 Info(
"SetupWorkersEnv",
"will invoke UploadPackage() and EnablePackage() on all workers");
1547 Info(
"SetupWorkersEnv",
"will invoke Load() on selected workers");
1559 Info(
"SetupWorkersEnv",
"will invoke AddDynamicPath() on selected workers");
1567 Info(
"SetupWorkersEnv",
"will invoke AddIncludePath() on selected workers");
1582 Error(
"RemoveWorkers",
"RemoveWorkers can only be called on the master!");
1592 while ((sl = (
TSlave *) nxsl())) {
1598 if (!(workerList->
GetSize())) {
1599 Error(
"RemoveWorkers",
"The list of workers should not be empty!");
1607 while ((to = next())) {
1609 if (!strcmp(to->
ClassName(),
"TProofNodeInfo")) {
1613 while ((sl = (
TSlave *) nxsl())) {
1621 Warning(
"RemoveWorkers",
"unknown object type: %s - it should be"
1622 " TProofNodeInfo or inheriting from TSlave", to->
ClassName());
1652 TString emsg(
"no resource currently available for this session: please retry later");
1664 Printf(
"Starting master: opening connection ...");
1670 fprintf(stderr,
"Starting master:"
1671 " connection open: setting up server ... \r");
1685 Printf(
"Starting master: OK ");
1691 Error(
"StartSlaves",
1692 "client and remote protocols not compatible (%d and %d)",
1711 if (slStatus == -99 || slStatus == -98 || rc == 0) {
1714 if (slStatus == -99)
1715 Error(
"StartSlaves",
"no resources available or problems setting up workers (check logs)");
1716 else if (slStatus == -98)
1717 Error(
"StartSlaves",
"could not setup output redirection on master");
1719 Error(
"StartSlaves",
"setting up master");
1730 Error(
"StartSlaves",
1731 "failed to setup connection with PROOF master server");
1737 gROOT->GetPluginManager()->FindHandler(
"TProofProgressDialog")))
1743 Printf(
"Starting master: failure");
1748 Printf(
"Starting master: OK ");
1753 gROOT->GetPluginManager()->FindHandler(
"TProofProgressDialog")))
1766 Error(
"StartSlaves",
"failed to create (or connect to) the PROOF master server");
1782 { std::lock_guard<std::recursive_mutex> lock(
fCloseMutex);
1791 while ((sl = (
TSlave *)nxs()))
1805 gROOT->GetListOfSockets()->Remove(
this);
1817 gROOT->GetListOfProofs()->Remove(
this);
1836 Int_t perf,
const char *image,
const char *workdir)
1858 const char *image,
const char *msd,
Int_t nwk)
1878 while ((sl = (
TSlave *)next())) {
1905 if (
fImage == sl->fImage) {
1915 TSlave *replace_slave = 0;
1918 if (sl->fImage == sl2->fImage) {
1923 replace_slave = sl2;
1930 Error(
"FindUniqueSlaves",
"TSlave is neither Master nor Slave");
1943 if (replace_slave) {
2035 if (
s.Contains(
"Total MB's processed:")) {
2036 s.ReplaceAll(
"Total MB's processed:",
"");
2038 }
else if (
s.Contains(
"Total real time used (s):")) {
2039 s.ReplaceAll(
"Total real time used (s):",
"");
2041 }
else if (
s.Contains(
"Total CPU time used (s):")) {
2042 s.ReplaceAll(
"Total CPU time used (s):",
"");
2051 Printf(
" Real/CPU time (s): %.3f / %.3f; workers: %d; processed: %.2f MBs",
2155 Printf(
"+++ Options: \"A\" show all queries known to server");
2156 Printf(
"+++ \"L\" show retrieved queries");
2157 Printf(
"+++ \"F\" full listing of query info");
2158 Printf(
"+++ \"H\" print this menu");
2160 Printf(
"+++ (case insensitive)");
2162 Printf(
"+++ Use Retrieve(<#>) to retrieve the full"
2163 " query results from the master");
2164 Printf(
"+++ e.g. Retrieve(8)");
2194 Printf(
"+++ Queries processed during this session: selector: %d, draw: %d",
2196 while ((pq = nxq()))
2203 Printf(
"+++ Queries processed during this session: selector: %d, draw: %d",
2210 Printf(
"+++ Queries available locally: %d", listlocal->
GetSize());
2211 TIter nxlq(listlocal);
2212 while ((pq = nxlq()))
2228 while (
TSlave *sl =
dynamic_cast<TSlave*
>(nextSlave())) {
2238 if (submasters.
GetSize() > 0) {
2246 EmitVA(
"IsDataReady(Long64_t,Long64_t)", 2, totalbytes, bytesready);
2249 Info(
"IsDataReady",
"%lld / %lld (%s)",
2250 bytesready, totalbytes,
fDataReady?
"READY":
"NOT READY");
2268 if (slaves->
GetSize() == 0)
return;
2273 while ((sl = (
TSlave *)next())) {
2292 Int_t nparallel = 0;
2293 while (
TSlave* sl =
dynamic_cast<TSlave*
>(nextSlave()))
2294 if (sl->GetParallel() >= 0)
2295 nparallel += sl->GetParallel();
2318 while ((slave = (
TSlave *) next()) != 0) {
2328 while ((activeslave = (
TSlave *) nextactive())) {
2337 while ((badslave = (
TSlave *) nextbad())) {
2346 MarkBad(slave,
"could not send kPROOF_GETSLAVEINFO message");
2354 MarkBad(slave,
"could not send kPROOF_GETSLAVEINFO message");
2359 Error(
"GetSlaveInfo",
"TSlave is neither Master nor Slave");
2380 while ((sl = (
TSlave*) next())) {
2410 if (workers->
GetSize() == 0)
return 0;
2413 TIter next(workers);
2416 while ((wrk = (
TSlave *)next())) {
2419 MarkBad(wrk,
"could not send group priority");
2461 if (!slaves || slaves->
GetSize() == 0)
return 0;
2467 while ((sl = (
TSlave *)next())) {
2470 MarkBad(sl,
"could not broadcast request");
2553 if (slaves->
GetSize() == 0)
return 0;
2559 while ((sl = (
TSlave *)next())) {
2562 MarkBad(sl,
"could not send broadcast-raw request");
2596 if (wrks->
GetSize() == 0)
return 0;
2602 while ((wrk = (
TSlave *)next())) {
2605 Error(
"BroadcastFile",
2606 "problems sending file to worker %s (%s)",
2666 rc =
Collect(mon, timeout, endtype, deactonfail);
2692 while ((sl = (
TSlave*) next())) {
2697 rc =
Collect(mon, timeout, endtype, deactonfail);
2724 rc =
Collect(mon, timeout, endtype, deactonfail);
2743 Info(
"Collect",
">>>>>> Entering collect responses #%04d", collectId);
2773 int cnt = 0, rc = 0;
2778 Info(
"Collect",
"#%04d: active: %d", collectId, mon->
GetActive());
2790 while ((nact = mon->
GetActive(sto)) && (nto < 0 || nto > 0)) {
2796 if (al && al->
GetSize() > 0) {
2797 Info(
"Collect",
" %d node(s) still active:", al->
GetSize());
2800 while ((xs = (
TSocket *)nxs())) {
2821 Info(
"Collect",
"#%04d: now active: %d", collectId, mon->
GetActive());
2826 Info(
"Collect",
"Will invoke Select() #%04d", collectId);
2832 if (rc == 1 || (rc == 2 && !savedMonitor)) {
2836 Info(
"Collect",
"#%04d: deactivating %p (active: %d, %p)", collectId,
2839 }
else if (rc == 2) {
2845 Info(
"Collect",
"save monitor: deactivating %p (active: %d, %p)",
2862 if (
s == (
TSocket *)(-1) && nto > 0)
2874 while (mxws && (wrk = (
TSlave *) nxwr())) {
2879 Info(
"Collect",
"worker %s was asked to send its output to master",
2904 if (al && al->
GetSize() > 0) {
2906 Info(
"Collect",
" %d node(s) went in timeout:", al->
GetSize());
2909 while ((xs = (
TSocket *)nxs())) {
2937 Info(
"Collect",
"<<<<<< Exiting collect responses #%04d", collectId);
2954 Error(
"PollForNewWorkers",
"Can't invoke: not on a master -- should not happen!");
2958 Error(
"PollForNewWorkers",
"No ProofServ available -- should not happen!");
2968 TIter next(reqWorkers);
2979 while (( sl =
dynamic_cast<TSlave *
>(nextInner()) )) {
2986 if (found)
delete ni;
2988 newWorkers->
Add(ni);
2990 Info(
"PollForNewWorkers",
"New worker found: %s:%s",
3000 if (nNewWorkers > 0) {
3002 Info(
"PollForNewWorkers",
"Requesting to add %d new worker(s)", newWorkers->
GetEntries());
3005 Error(
"PollForNewWorkers",
"Call to AddWorkers() failed (got %d < 0)", rv);
3012 Info(
"PollForNewWorkers",
"No new worker found");
3041 if ((recvrc =
s->Recv(mess)) < 0) {
3043 Info(
"CollectInputFrom",
"%p: got %d from Recv()",
s, recvrc);
3048 if (
s->Reconnect() == 0) {
3054 MarkBad(
s,
"problems receiving a message in TProof::CollectInputFrom(...)");
3060 MarkBad(
s,
"undefined message in TProof::CollectInputFrom(...)");
3068 if (rc == 1 && (endtype >= 0) && (what != endtype))
3088 Warning(
"HandleInputMessage",
"given an empty message or undefined worker");
3094 Warning(
"HandleInputMessage",
"worker socket is undefined");
3102 Info(
"HandleInputMessage",
"got type %d from '%s'", what, sl->
GetOrdinal());
3121 MarkBad(
s,
"received kPROOF_FATAL");
3134 Info(
"HandleInputMessage",
"received kPROOF_STOP from %s: disabling any further collection this worker",
3166 Info(
"HandleInputMessage",
"%s: kPROOF_GETPACKET", sl->
GetOrdinal());
3208 Info(
"HandleInputMessage",
"%s: kPROOF_LOGFILE: size: %d", sl->
GetOrdinal(), size);
3216 Info(
"HandleInputMessage",
"%s: kPROOF_LOGDONE: status %d parallel %d",
3250 Info(
"HandleInputMessage",
3266 rc = (async) ? 0 : 1;
3291 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_PACKAGE_LIST: enter");
3301 Error(
"HandleInputMessage",
3302 "kPROOF_PACKAGE_LIST: kListEnabledPackages: TList not found in message!");
3311 Error(
"HandleInputMessage",
3312 "kPROOF_PACKAGE_LIST: kListPackages: TList not found in message!");
3316 Error(
"HandleInputMessage",
"kPROOF_PACKAGE_LIST: unknown type: %d",
type);
3329 Info(
"HandleInputMessage",
"kPROOF_SENDOUTPUT: enter (%s)", sl->
GetOrdinal());
3345 Info(
"HandleInputMessage",
"kPROOF_OUTPUTOBJECT: enter");
3349 Info(
"HandleInputMessage",
"finalization on %s started ...", prefix);
3375 Warning(
"HandleInputMessage",
"kPROOF_OUTPUTOBJECT: query result missing");
3377 }
else if (
type > 0) {
3387 }
else if (
IsTty() || changed) {
3388 fprintf(stderr,
"%s\r", msg.
Data());
3408 while ((xo = nxin()))
3420 Warning(
"HandleInputMessage",
"kPROOF_OUTPUTOBJECT: player undefined!");
3432 Info(
"HandleInputMessage",
"%s: kPROOF_OUTPUTLIST: enter", sl->
GetOrdinal());
3453 Info(
"HandleInputMessage",
3454 "%s: kPROOF_OUTPUTLIST: query result missing", sl->
GetOrdinal());
3463 Info(
"HandleInputMessage",
3464 "%s: kPROOF_OUTPUTLIST: outputlist is empty", sl->
GetOrdinal());
3468 "%s: kPROOF_OUTPUTLIST: player undefined!", sl->
GetOrdinal());
3478 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_QUERYLIST: enter");
3491 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_RETRIEVE: enter");
3500 Info(
"HandleInputMessage",
3501 "kPROOF_RETRIEVE: query result missing or player undefined");
3508 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_MAXQUERIES: enter");
3512 Printf(
"Number of queries fully kept remotely: %d", max);
3518 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_SERVERSTARTED: enter");
3520 UInt_t tot = 0, done = 0;
3524 (*mess) >> action >> tot >> done >> st;
3531 char msg[512] = {0};
3533 snprintf(msg, 512,
"%s: OK (%d %s) \n",
3536 snprintf(msg, 512,
"%s: %d out of %d (%d %%)\r",
3537 action.
Data(), done, tot, frac);
3540 fprintf(stderr,
"%s", msg);
3550 m << action << tot << done << st;
3558 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_DATASET_STATUS: enter");
3560 UInt_t tot = 0, done = 0;
3564 (*mess) >> action >> tot >> done >> st;
3570 char msg[512] = {0};
3572 snprintf(msg, 512,
"%s: OK (%d %s) \n",
3575 snprintf(msg, 512,
"%s: %d out of %d (%d %%)\r",
3576 action.
Data(), done, tot, frac);
3579 fprintf(stderr,
"%s", msg);
3589 m << action << tot << done << st;
3597 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_STARTPROCESS: enter");
3617 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"Preparation time: %f s",
fPrepTime);
3622 (*mess) >> selec >> dsz >>
first >> nent;
3624 if (!
gROOT->IsBatch()) {
3643 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_ENDINIT: enter");
3662 Info(
"HandleInputMessage",
"%s: got kPROOF_SETIDLE", sl->
GetOrdinal());
3665 "%s: got kPROOF_SETIDLE but no running workers ! protocol error?",
3679 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_QUERYSUBMITTED: enter");
3704 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_SESSIONTAG: enter");
3727 Info(
"HandleInputMessage",
"kPROOF_FEEDBACK: enter");
3740 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_AUTOBIN: enter");
3759 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_PROGRESS: enter");
3768 Float_t initTime, procTime, evtrti, mbrti;
3769 (*mess) >>
total >> processed >> bytesread
3770 >> initTime >> procTime
3774 initTime, procTime, evtrti, mbrti);
3779 (*mess) >>
total >> processed;
3793 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_STOPPROCESS: enter");
3800 (*mess) >> status >> abort;
3802 (*mess) >> events >> abort;
3808 TList *listOfMissingFiles = 0;
3809 if (!(listOfMissingFiles = (
TList *)
GetOutput(
"MissingFiles"))) {
3810 listOfMissingFiles =
new TList();
3811 listOfMissingFiles->
SetName(
"MissingFiles");
3830 Emit(
"StopProcess(Bool_t)", abort);
3836 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_SUBMERGER: enter");
3843 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_GETSLAVEINFO: enter");
3850 Error(
"HandleInputMessage",
"kPROOF_GETSLAVEINFO: no list received!");
3894 Info(
"HandleInputMessage",
"kPROOF_VALIDATE_DSET: enter");
3898 Error(
"HandleInputMessage",
"kPROOF_VALIDATE_DSET: fDSet not set");
3907 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_DATA_READY: enter");
3910 (*mess) >> dataready >> totalbytes >> bytesready;
3923 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_MESSAGE: enter");
3936 fprintf(stderr,
"%s%c", msg.
Data(), (lfeed ?
'\n' :
'\r'));
3944 fprintf(stderr,
"%s%c", msg.
Data(), (lfeed ?
'\n' :
'\r'));
3960 PDB(kGlobal,2)
Info(
"HandleInputMessage",
"kPROOF_VERSARCHCOMP: %s", vac.
Data());
3973 Error(
"HandleInputMessage",
"unknown command received from '%s' (what = %d)",
4001 Int_t merger_id = -1;
4002 (*mess) >> merger_id;
4005 Info(
"HandleSubmerger",
"kOutputSent: Worker %s:%d:%s had sent its output to merger #%d",
4009 Error(
"HandleSubmerger",
"kOutputSize: #%d not in list ", merger_id);
4022 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
"all mergers removed ... ");
4026 PDB(kSubmerger, 2)
Error(
"HandleSubmerger",
"kOutputSent: received not on endmaster!");
4033 Int_t merger_id = -1;
4034 (*mess) >> merger_id;
4036 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
"kMergerDown: #%d ", merger_id);
4039 Error(
"HandleSubmerger",
"kMergerDown: #%d not in list ", merger_id);
4062 while ((o = nxo())) {
4065 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
"kMergerDown:%d: exit", merger_id);
4073 Info(
"HandleSubmerger",
"worker %s reported as finished ", sl->
GetOrdinal());
4077 Info(
"HandleSubmerger",
"finalization on %s started ...", prefix);
4081 Int_t output_size = 0;
4082 Int_t merging_port = 0;
4083 (*mess) >> output_size >> merging_port;
4085 PDB(kSubmerger, 2)
Info(
"HandleSubmerger",
4086 "kOutputSize: Worker %s:%d:%s reports %d output objects (+ available port %d)",
4102 msg.
Form(
"%s: Invalid request: cannot start %d mergers for %d workers",
4112 if (activeWorkers > 1) {
4118 msg.
Form(
"%s: Number of mergers set dynamically to %d (for %d workers)",
4121 msg.
Form(
"%s: No mergers will be used for %d workers",
4122 prefix, activeWorkers);
4131 if (activeWorkers > 1) {
4136 while ((wrk = nxwk())) {
4144 msg.
Form(
"%s: Number of mergers set to %d (for %d workers), one for each slave host",
4147 msg.
Form(
"%s: No mergers will be used for %d workers",
4148 prefix, activeWorkers);
4156 msg.
Form(
"%s: Number of mergers set by user to %d (for %d workers)",
4224 Error(
"HandleSubMerger",
"kOutputSize received not on endmaster!");
4236 Int_t merger_id = -1;
4250 if (merger_id == -1) {
4257 Info(
"RedirectWorker",
"redirecting worker %s to merger %d", sl->
GetOrdinal(), merger_id);
4259 PDB(kSubmerger, 2)
Info(
"RedirectWorker",
"redirecting output to merger #%d", merger_id);
4261 Error(
"RedirectWorker",
"#%d not in list ", merger_id);
4267 sendoutput << merger_id;
4268 sendoutput << hname;
4270 s->Send(sendoutput);
4282 while (fLastAssignedMerger < fMergers->GetSize() &&
4294 while (fLastAssignedMerger < fMergers->GetSize() &&
4315 PDB(kSubmerger, 2)
Info(
"AskForOutput",
4316 "worker %s was asked to send its output to master",
4320 sendoutput <<
TString(
"master");
4336 Info(
"UpdateDialog",
4337 "processing was aborted - %lld events processed",
4352 Info(
"UpdateDialog",
4353 "processing was stopped - %lld events processed",
4370 EmitVA(
"Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t,Int_t,Int_t,Float_t)",
4375 EmitVA(
"Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t)",
4391 while ((sl = (
TSlave*) next()))
4404 while ((sl = (
TSlave*) next()))
4416 Int_t active_mergers = 0;
4421 if (mi->
IsActive()) active_mergers++;
4424 return active_mergers;
4433 Info(
"CreateMerger",
"worker %s will be merger ", sl->
GetOrdinal());
4435 PDB(kSubmerger, 2)
Info(
"CreateMerger",
"Begin");
4439 Info(
"CreateMerger",
"cannot create merger on port %d - exit", port);
4456 Int_t workersOnHost = 0;
4460 workers = workersOnHost - 1;
4464 msg.
Form(
"worker %s on host %s will be merger for %d additional workers", sl->
GetOrdinal(), sl->
GetName(), workers);
4476 bemerger << workers;
4479 PDB(kSubmerger,2)
Info(
"CreateMerger",
4480 "merger #%d (port: %d) for %d workers started",
4488 PDB(kSubmerger, 2)
Info(
"CreateMerger",
"exit");
4499 std::lock_guard<std::recursive_mutex> lock(
fCloseMutex);
4505 Error(
"MarkBad",
"worker instance undefined: protocol error? ");
4526 msg.
Form(
"\n +++ Message from %s : marking %s:%d (%s) as bad\n +++ Reason: %s",
4528 (reason && strlen(reason)) ? reason :
"unknown");
4533 msg +=
TString::Format(
"\n\n +++ Most likely your code crashed on worker %s at %s:%d.\n",
4538 msg +=
TString::Format(
" +++ Please check the session logs for error messages either using\n");
4542 msg +=
TString::Format(
" +++ root [] TProof::Mgr(\"%s\")->GetSessionLogs()->"
4546 msg +=
TString::Format(
" +++ root [] TProof::Mgr(\"%s\")->GetSessionLogs()->"
4547 "Display(\"*\")\n\n", thisurl.
Data());
4550 }
else if (reason) {
4552 Info(
"MarkBad",
"worker %s at %s:%d asked to terminate",
4560 TList *listOfMissingFiles = 0;
4561 if (!(listOfMissingFiles = (
TList *)
GetOutput(
"MissingFiles"))) {
4562 listOfMissingFiles =
new TList();
4563 listOfMissingFiles->
SetName(
"MissingFiles");
4572 packetizer->
MarkBad(wrk, 0, &listOfMissingFiles);
4628 Int_t mergersCount = -1;
4630 if (mc) mergersCount = mc->
GetVal();
4632 if (mergersCount == 0) {
4634 if (activeWorkers > 1) {
4660 std::lock_guard<std::recursive_mutex> lock(
fCloseMutex);
4675 Warning(
"TerminateWorker",
"worker instance undefined: protocol error? ");
4685 Info(
"TerminateWorker",
"connection to worker is already down: cannot"
4686 " send termination message");
4698 if (ord && strlen(ord) > 0) {
4703 while ((wrk = (
TSlave *)nxw())) {
4704 if (all || !strcmp(wrk->
GetOrdinal(), ord)) {
4736 if (slaves->
GetSize() == 0)
return 0;
4742 while ((sl = (
TSlave *)next())) {
4744 if (sl->
Ping() == -1) {
4745 MarkBad(sl,
"ping unsuccessful");
4762 if (slaves->
GetSize() == 0)
return;
4767 while ((sl = (
TSlave *)next())) {
4785 IsValid() ?
"valid" :
"invalid");
4788 Printf(
"ROOT version|rev: %s|%s",
gROOT->GetVersion(),
gROOT->GetGitCommit());
4795 Printf(
"Security context: %s",
4799 Printf(
"Security context: Error - No connection");
4800 Printf(
"Proofd protocol version: Error - No connection");
4812 Printf(
"*** Master server %s (parallel mode, %d workers):",
4815 Printf(
"*** Master server %s (sequential mode):",
4829 Printf(
"ROOT version|rev|tag: %s", ver.
Data());
4847 Printf(
"List of workers:");
4850 while (
TSlave* sl =
dynamic_cast<TSlave*
>(nextslave())) {
4851 if (!sl->IsValid())
continue;
4858 if (sl->GetSocket()->Send(mess) == -1)
4859 const_cast<TProof*
>(
this)->
MarkBad(sl,
"could not send kPROOF_PRINT request");
4863 Error(
"Print",
"TSlave is neither Master nor Worker");
4915 TString outfile, dsname, stfopt;
4919 while (opt.
Tokenize(oo, from,
"[; ]")) {
4922 iof = opt.
Index(tagf);
4925 iof = opt.
Index(tagf);
4928 iod = opt.
Index(tagd);
4931 iod = opt.
Index(tagd);
4934 ios = opt.
Index(tags);
4936 tags =
"savetofile";
4937 ios = opt.
Index(tags);
4942 Error(
"HandleOutputOptions",
"options 'of'/'outfile' and 'ds'/'dataset' are incompatible!");
4948 from = iof + tagf.
Length();
4950 Error(
"HandleOutputOptions",
"could not extract output file settings string! (%s)", opt.
Data());
4958 from = iod + tagd.
Length();
4959 if (!opt.
Tokenize(dsname, from,
"[; ]"))
4960 if (
gDebug > 0)
Info(
"HandleOutputOptions",
"no dataset name found: use default");
4969 if (dsname.
IsNull()) dsname =
"dataset_<qtag>";
4973 from = ios + tags.
Length();
4974 if (!opt.
Tokenize(stfopt, from,
"[; ]"))
4975 if (
gDebug > 0)
Info(
"HandleOutputOptions",
"save-to-file not found: use default");
4983 Error(
"HandleOutputOptions",
"save-to-file option must be a digit! (%s)", stfopt.
Data());
5007 Warning(
"HandleOutputOptions",
5008 "directory '%s' for the output file does not exists or is not writable:"
5029 if (
Exec(
"gProofServ->GetDataDir()",
"0",
kTRUE) == 0) {
5034 ddir = os->
GetString()(fst+1, lst-fst-1);
5036 emsg =
"could not find 'const char *' string in macro log! cannot continue";
5039 emsg =
"could not retrieve master data directory info! cannot continue";
5042 Error(
"HandleOutputOptions",
"%s", emsg.
Data());
5046 if (!ddir.
IsNull()) ddir +=
"/";
5048 outfile.
Form(
"%s<file>", ddir.
Data());
5069 Warning(
"HandleOutputOptions",
"Dataset required bu Save-To-File disabled: enabling!");
5070 stfopt.
Form(
"%d", ostf+1);
5085 if (target ==
"ds|V") {
5090 while ((o = nxo())) {
5102 Warning(
"HandleOutputOptions",
"could not retrieve TFileCollection for dataset '%s'", dsname.
Data());
5105 Warning(
"HandleOutputOptions",
"dataset not found!");
5117 Printf(
" Output successfully copied to %s", target.
Data());
5118 targetcopied =
kTRUE;
5120 Warning(
"HandleOutputOptions",
"problems copying output to %s", target.
Data());
5128 while ((o = nxo())) {
5132 if (pof == pf && targetcopied)
continue;
5137 Printf(
" Output successfully copied to %s", target.
Data());
5140 Warning(
"HandleOutputOptions",
"problems copying output to %s", target.
Data());
5150 Warning(
"HandleOutputOptions",
5157 if (!target.
IsNull() && !swapcopied) {
5160 if (!fout || (fout && fout->
IsZombie())) {
5162 Warning(
"HandleOutputOptions",
"problems opening output file %s", target.
Data());
5167 while ((o = nxo())) {
5180 Printf(
" Output saved to %s", target.
Data());
5211 if (action == 0 || (action == 1 && optfb.
IsNull())) {
5216 ifb = opt.
Index(tag);
5218 if (ifb ==
kNPOS)
return;
5219 from = ifb + tag.
Length();
5222 Warning(
"SetFeedback",
"could not extract feedback string! Ignoring ...");
5235 if (
nm ==
"stats") {
5237 startdraw.
Form(
"gDirectory->Add(new TStatsFeedback((TProof *)%p))",
this);
5244 stopdraw.
Form(
"TObject *o = gDirectory->FindObject(\"%s\"); "
5245 " if (o && strcmp(o->ClassName(), \"TStatsFeedback\")) "
5257 startdraw.
Form(
"gDirectory->Add(new TDrawFeedback((TProof *)%p))",
this);
5262 stopdraw.
Form(
"TObject *o = gDirectory->FindObject(\"%s\"); "
5263 " if (o && strcmp(o->ClassName(), \"TDrawFeedback\")) "
5287 TString opt(option), optfb, outfile;
5289 if (opt.Contains(
"fb=") || opt.Contains(
"feedback="))
SetFeedback(opt, optfb, 0);
5298 Info(
"Process",
"session is in waiting or processing status: switch to asynchronous mode");
5300 opt.ReplaceAll(
"SYNC",
"");
5334 if (selector && strlen(selector)) {
5339 Error(
"Process",
"neither a selecrot file nor a selector object have"
5340 " been specified: cannot process!");
5362 if (sst) rv = sst->
GetVal();
5394 Info(
"Process",
"server version < 5.18/00:"
5395 " processing of TFileCollection not supported");
5406 if (selector && strlen(selector)) {
5411 Error(
"Process",
"neither a selecrot file nor a selector object have"
5412 " been specified: cannot process!");
5484 Info(
"Process",
"processing 'by name' not supported by the server");
5488 TString dsname, fname(dsetname);
5494 const char *separator = (fname.
EndsWith(
",")) ?
"," :
"|";
5500 if (
f && !(
f->IsZombie())) {
5501 const Int_t blen = 8192;
5505 Long64_t len = (rest > blen - 1) ? blen - 1 : rest;
5506 if (
f->ReadBuffer(buf, len)) {
5507 Error(
"Process",
"problems reading from file '%s'", fname.
Data());
5518 if (rest > 0)
return -1;
5520 Error(
"Process",
"could not open file '%s'", fname.
Data());
5532 Info(
"Process",
"processing multi-dataset read from file '%s':", fname.
Data());
5533 Info(
"Process",
" '%s'", dsname.
Data());
5540 Info(
"Process",
"multi-dataset processing not supported by the server");
5547 while (names.Tokenize(
name, from,
"[, |]")) {
5553 if (ienl ==
kNPOS) {
5554 ienl =
name.Index(
"<<");
5555 if (ienl !=
kNPOS) {
5557 ienl += strlen(
"<<");
5561 ienl += strlen(
"?enl=");
5567 if (idxc !=
kNPOS) {
5569 if (idxs !=
kNPOS) {
5570 obj = newname(idxs+1, newname.
Length());
5571 dir = newname(idxc+1, newname.
Length());
5575 obj = newname(idxc+1, newname.
Length());
5580 Error(
"Process",
"bad name syntax (%s): please use"
5581 " a '#' after the dataset name",
name.Data());
5589 }
else if (obj != dsobj || dir != dsdir) {
5591 Warning(
"Process",
"'obj' or 'dir' specification not consistent w/ the first given: ignore");
5594 if (ienl !=
kNPOS) {
5604 if ((el =
dynamic_cast<TEntryList *
>(oel))) {
5615 if (
f && !(
f->IsZombie()) &&
f->GetListOfKeys()) {
5616 TIter nxk(
f->GetListOfKeys());
5618 while ((k = (
TKey *) nxk())) {
5634 Warning(
"Process",
"multiple entry lists found in file '%s': the first one is taken;\n"
5635 "if this is not what you want, load first the content in memory"
5636 "and select it by name ", enl.
Data());
5641 Warning(
"Process",
"file '%s' cannot be open or is empty - ignoring", enl.
Data());
5663 TDSet *dset =
new TDSet(dsname, dsobj, dsdir);
5672 if (selector && strlen(selector)) {
5677 Error(
"Process",
"neither a selector file nor a selector object have"
5678 " been specified: cannot process!");
5702 Info(
"Process",
"server version < 5.17/04: generic processing not supported");
5711 if (selector && strlen(selector)) {
5712 retval =
Process(dset, selector, option,
n);
5716 Error(
"Process",
"neither a selector file nor a selector object have"
5717 " been specified: cannot process!");
5741 Error(
"Process",
"server version < 5.33/02:"
5742 "processing by object not supported");
5746 Error(
"Process",
"selector object undefined!");
5767 Error(
"Process",
"server version < 5.33/02:"
5768 "processing by object not supported");
5772 Error(
"Process",
"selector object undefined!");
5790 Error(
"Process",
"server version < 5.33/02:"
5791 "processing by object not supported");
5795 Error(
"Process",
"selector object undefined!");
5814 Error(
"Process",
"server version < 5.33/02:"
5815 "processing by object not supported");
5819 Error(
"Process",
"selector object undefined!");
5867 Info(
"Finalize",
"query #%d not found", qry);
5901 Info(
"Finalize",
"query already finalized:"
5902 " use Finalize(<qry>,kTRUE) to force new retrieval");
5931 Info(
"Retrieve",
"query #%d not found", qry);
5933 Info(
"Retrieve",
"positive argument required - do nothing");
5960 if (!farc || (farc && !(farc->
IsOpen()))) {
5961 Info(
"Retrieve",
"archive file cannot be open (%s)", path);
5976 Info(
"Retrieve",
"query not found after retrieve");
5996 Info(
"Remove",
"query #%d not found", qry);
5998 Info(
"Remove",
"positive argument required - do nothing");
6040 Info(
"Archive",
"query #%d not found", qry);
6042 Info(
"Archive",
"positive argument required - do nothing");
6099 if (mode && (strlen(mode) > 0)) {
6102 if (
m.Contains(
"ASYN")) {
6104 }
else if (
m.Contains(
"SYNC")) {
6110 Info(
"GetQueryMode",
"query mode is set to: %s", qmode ==
kSync ?
6123 const char *selection,
Option_t *option,
6130 Info(
"DrawSelect",
"not idle, asynchronous Draw not supported");
6159 const char *selection,
Option_t *option,
6163 Info(
"Process",
"processing 'by name' not supported by the server");
6171 if (idxc !=
kNPOS) {
6173 if (idxs !=
kNPOS) {
6184 Error(
"DrawSelect",
"bad name syntax (%s): please use"
6185 " a '#' after the dataset name", dsetname);
6203 Info(
"StopProcess",
"enter %d", abort);
6226 while ((sl = (
TSlave *)next()))
6237 Emit(
"DisableGoAsyn()");
6248 Info(
"GoAsynchronous",
"functionality not supported by the server - ignoring");
6256 Info(
"GoAsynchronous",
"either idle or already in asynchronous mode - ignoring");
6265 const Int_t kMAXBUF = 16384;
6279 Warning(
"RecvLogFile",
"file descriptor for outputs undefined (%d):"
6280 " will not log msgs", fdout);
6283 lseek(fdout, (off_t) 0, SEEK_END);
6289 while (filesize < size) {
6290 left =
Int_t(size - filesize);
6291 if (left >= kMAXBUF)
6293 rec =
s->RecvRaw(&buf, left);
6294 filesize = (rec > 0) ? (filesize + rec) : filesize;
6303 w = write(fdout, p,
r);
6306 SysError(
"RecvLogFile",
"error writing to unit: %d", fdout);
6312 }
else if (rec < 0) {
6313 Error(
"RecvLogFile",
"error during receiving log file");
6319 EmitVA(
"LogMessage(const char*,Bool_t)", 2, buf,
kFALSE);
6338 if (!msg || (len = strlen(msg)) <= 0)
6342 Int_t lsfx = (sfx) ? strlen(sfx) : 0;
6349 Warning(
"NotifyLogMsg",
"file descriptor for outputs undefined (%d):"
6350 " will not notify msgs", fdout);
6353 lseek(fdout, (off_t) 0, SEEK_END);
6359 char *p = (
char *)msg;
6362 Int_t w = write(fdout, p,
r);
6364 SysError(
"NotifyLogMsg",
"error writing to unit: %d", fdout);
6372 if (write(fdout, sfx, lsfx) != lsfx)
6373 SysError(
"NotifyLogMsg",
"error writing to unit: %d", fdout);
6379 EmitVA(
"LogMessage(const char*,Bool_t)", 2, msg,
kFALSE);
6393 Info(
"LogMessage",
"Enter ... %s, 'all: %s", msg ? msg :
"",
6394 all ?
"true" :
"false");
6396 if (
gROOT->IsBatch()) {
6397 PDB(kGlobal,1)
Info(
"LogMessage",
"GUI not started - use TProof::ShowLog()");
6402 EmitVA(
"LogMessage(const char*,Bool_t)", 2, msg, all);
6408 lseek(fileno(
fLogFileR), (off_t) 0, SEEK_SET);
6410 const Int_t kMAXBUF = 32768;
6414 while ((len = read(fileno(
fLogFileR), buf, kMAXBUF-1)) < 0 &&
6419 Error(
"LogMessage",
"error reading log file");
6425 EmitVA(
"LogMessage(const char*,Bool_t)", 2, buf,
kFALSE);
6449 while ((sl = (
TSlave *)next())) {
6452 MarkBad(sl,
"could not send kPROOF_GROUPVIEW message");
6476 if (
s.Length() > 0 &&
6477 (
s.BeginsWith(
".L") ||
s.BeginsWith(
".x") ||
s.BeginsWith(
".X"))) {
6516 if (!
s.Length())
return 0;
6525 Error(
"Exec",
"file %s could not be transfered", fn);
6536 Error(
"Exec",
"macro %s not found", filename.
Data());
6544 gROOT->ProcessLine(cmd);
6572 if (!
s.Length())
return 0;
6576 gROOT->ProcessLine(cmd);
6584 if (strcmp(ord,
"master") && strcmp(ord,
"0"))
ActivateWorker(ord);
6644 TString cmd =
TString::Format(
"if (gEnv->Lookup(\"%s\")) { gEnv->GetValue(\"%s\",\"\"); }", rcenv, rcenv);
6658 Printf(
"%s: %d", rcenv, env);
6670 TString cmd =
TString::Format(
"if (gEnv->Lookup(\"%s\")) { gEnv->GetValue(\"%s\",\"\"); }", rcenv, rcenv);
6684 Printf(
"%s: %f", rcenv, env);
6696 TString cmd =
TString::Format(
"if (gEnv->Lookup(\"%s\")) { gEnv->GetValue(\"%s\",\"\"); }", rcenv, rcenv);
6705 env = os->
GetString()(fst+1, lst-fst-1);
6787 FileMap_t::const_iterator it;
6794 if ((*md5) != md.
fMD5) {
6817 Error(
"CheckFile",
"could not calculate local MD5 check sum - dont send");
6831 Error(
"CheckFile",
"could not calculate local MD5 check sum - dont send");
6878 slaves =
new TList();
6882 if (slaves->
GetSize() == 0)
return 0;
6898 Error(
"SendFile",
"cannot stat file %s",
file);
6903 Error(
"SendFile",
"empty file %s",
file);
6915 if ((opt &
kCp)) cpopt |=
kCp;
6918 const Int_t kMAXBUF = 32768;
6925 if (fnam ==
"cache") {
6927 }
else if (fnam.
IsNull()) {
6932 while ((sl = (
TSlave *)next())) {
6942 Info(
"SendFile",
"%s sending file %s to: %s:%s (%d)", snd,
6950 snprintf(buf, kMAXBUF,
"%s %d %lld %d", fnam.
Data(), bin, siz, fw);
6952 MarkBad(sl,
"could not send kPROOF_SENDFILE request");
6958 lseek(fd, 0, SEEK_SET);
6966 SysError(
"SendFile",
"error reading from file %s",
file);
6973 SysError(
"SendFile",
"error writing to slave %s:%s (now offline)",
6975 MarkBad(sl,
"sendraw failure");
6996 return (
fStatus != 0) ? -1 : nsl;
7006 if (!
IsValid() || !obj)
return -1;
7032 if (!
IsValid() || !obj)
return -1;
7061 snprintf(str, 32,
"%d %u", level, mask);
7079 Warning(
"SetRealTimeLog",
"session is invalid - do nothing");
7097 PDB(kGlobal,1)
Info(
"SetParallelSilent",
"request all nodes");
7099 PDB(kGlobal,1)
Info(
"SetParallelSilent",
"request %d node%s", nodes,
7100 nodes == 1 ?
"" :
"s");
7103 mess << nodes << random;
7107 PDB(kGlobal,1)
Info(
"SetParallelSilent",
"got %d node%s",
n,
n == 1 ?
"" :
"s");
7126 Printf(
"PROOF set to sequential mode");
7128 TString subfix = (
n == 1) ?
"" :
"s";
7130 subfix +=
", randomly selected";
7131 Printf(
"PROOF set to parallel mode (%d worker%s)",
n, subfix.
Data());
7149 Error(
"GoMoreParallel",
"can't invoke here -- should not happen!");
7153 Error(
"GoMoreParallel",
"no ProofServ available nor Lite -- should not happen!");
7159 Int_t nAddedWorkers = 0;
7161 while (((nAddedWorkers < nWorkersToAdd) || (nWorkersToAdd == -1)) &&
7162 (( sl =
dynamic_cast<TSlave *
>( next() ) ))) {
7167 Error(
"GoMoreParallel",
"TSlave is neither a Master nor a Slave: %s:%s",
7174 (strcmp(
"IGNORE", sl->
GetImage()) == 0)) {
7176 Info(
"GoMoreParallel",
"Worker %s:%s won't be considered",
7183 Info(
"GoMoreParallel",
"Worker %s:%s is already active: skipping",
7199 Info(
"GoMoreParallel",
"Worker %s:%s marked as active!",
7204 Error(
"GoMoreParallel",
"Dynamic addition of master is not supported");
7212 Info(
"GoMoreParallel",
"Will invoke AskStatistics() -- implies a Collect()");
7217 Info(
"GoMoreParallel",
"Will invoke FindUniqueSlaves()");
7222 Info(
"GoMoreParallel",
"Will invoke SendGroupView()");
7226 Info(
"GoMoreParallel",
"Will invoke GetParallel()");
7232 s.Form(
"PROOF just went more parallel (%d additional worker%s, %d worker%s total)",
7233 nAddedWorkers, (nAddedWorkers == 1) ?
"" :
"s",
7234 nTotalWorkers, (nTotalWorkers == 1) ?
"" :
"s");
7236 Info(
"GoMoreParallel",
"%s",
s.Data());
7238 return nTotalWorkers;
7262 while ((sl = (
TSlave *)nxt())) {
7264 if (strcmp(
"IGNORE", sl->
GetImage()) == 0)
continue;
7267 Error(
"GoParallel",
"TSlave is neither Master nor Slave");
7280 while (
cnt < nwrks) {
7290 Error(
"GoParallel",
"attaching to candidate!");
7296 Int_t slavenodes = 0;
7307 Int_t nn = (nodes < 0) ? -1 : nodes-
cnt;
7315 MarkBad(sl,
"could not send kPROOF_PARALLEL or kPROOF_LOGFILE request");
7331 MarkBad(sl,
"collect failed after kPROOF_PARALLEL or kPROOF_LOGFILE request");
7358 printf(
"PROOF set to sequential mode\n");
7360 printf(
"PROOF set to parallel mode (%d worker%s)\n",
7361 n,
n == 1 ?
"" :
"s");
7364 PDB(kGlobal,1)
Info(
"GoParallel",
"got %d node%s",
n,
n == 1 ?
"" :
"s");
7400 if (doask && !
Prompt(
"Do you really want to remove all data files"))
return;
7401 if (
fManager->
Rm(
"~/data/*",
"-rf",
"all") < 0)
7402 Warning(
"ClearData",
"problems purging data directory");
7406 if (!dsname || strlen(dsname) <= 0) {
7407 Error(
"ClearData",
"dataset name mandatory when removing a full dataset");
7412 Error(
"ClearData",
"dataset '%s' does not exists", dsname);
7418 Error(
"ClearData",
"could not retrieve info about dataset '%s'", dsname);
7423 " of dataset '%s'", dsname);
7430 Int_t rfiles = 0, nfiles =
fc->GetList()->GetSize();
7436 Error(
"ClearData",
"GetFirstUrl() returns NULL for '%s' - skipping",
7447 while (nurl-- && fi->
NextUrl()) {
7461 Error(
"ClearData",
"problems removing '%s'",
file.Data());
7468 fprintf(stderr,
"\n");
7476 TString outtmp(
"ProofClearData_");
7479 Error(
"ClearData",
"cannot create temp file for logs");
7489 in.open(outtmp.
Data());
7490 if (!in.is_open()) {
7491 Error(
"ClearData",
"could not open temp file for logs: %s", outtmp.
Data());
7502 if (
line.IsNull())
continue;
7506 if (!
line.Tokenize(host, from,
"| "))
continue;
7508 if (!
line.Tokenize(
file, from,
"| "))
continue;
7519 Info(
"ClearData",
"added info for: h:%s, f:%s", host.
Data(),
file.Data());
7521 Warning(
"ClearData",
"found incomplete line: '%s'",
line.Data());
7531 if (!fcmap || (fcmap && fcmap->
GetSize() <= 0)) {
7533 Warning(
"ClearData",
"no dataset beloning to '%s'", sel.
Data());
7552 while (nurl-- && fi->
NextUrl()) {
7561 Info(
"ClearData",
"found: host: %s, file: %s", host.
Data(),
file.Data());
7572 "registered file '%s' not found in the full list!",
7588 Info(
"ClearData",
"%d unregistered files to be removed:", nfiles);
7592 " unregistered data files", nfiles);
7606 Error(
"ClearData",
"problems removing '%s' on host '%s'",
7614 fprintf(stderr,
"\n");
7629 if (!pp.
Contains(
"[y/N]")) pp +=
" [y/N]";
7631 if (
a !=
"\n" &&
a[0] !=
'y' &&
a[0] !=
'Y' &&
a[0] !=
'n' &&
a[0] !=
'N') {
7632 Printf(
"Please answer y, Y, n or N");
7635 }
else if (
a ==
"\n" ||
a[0] ==
'n' ||
a[0] ==
'N') {
7648 fprintf(stderr,
"[TProof::ClearData] Total %5d files\t|", t);
7650 if (
r > 0 && t > 0) {
7652 fprintf(stderr,
"=");
7653 else if (
l == 20*
r/t)
7654 fprintf(stderr,
">");
7655 else if (
l > 20*
r/t)
7656 fprintf(stderr,
".");
7658 fprintf(stderr,
"=");
7660 fprintf(stderr,
"| %.02f %% \r", 100.0*(t ? (
r/t) : 1));
7722 while (fgets(
line, 2048, fin)) {
7725 if (write(fdout,
line,
r) < 0) {
7727 "errno %d writing to file descriptor %d",
7756 Warning(
"ShowPackages",
"file descriptor for outputs undefined (%p):"
7757 " will not log msgs", fout);
7760 lseek(fileno(fout), (off_t) 0, SEEK_END);
7837 if (!package || !package[0]) {
7838 Error(
"ClearPackage",
"need to specify a package name");
7865 if (!pack || strlen(pack) <= 0) {
7866 Error(
"DisablePackage",
"need to specify a package name");
7877 Warning(
"DisablePackage",
"problem removing locally package '%s'", pack);
7887 path.
Form(
"~/packages/%s", pack);
7888 if (
fManager->
Rm(path,
"-rf",
"all") != -1) {
7924 Warning(
"DisablePackages",
"problem removing packages locally");
7933 if (
fManager->
Rm(
"~/packages/*",
"-rf",
"all") != -1) {
7971 if (!package || !package[0]) {
7972 Error(
"BuildPackage",
"need to specify a package name");
8011 if (buildOnClient) {
8017 if (!
IsLite() || !buildOnClient) {
8050 if (!package || !package[0]) {
8051 Error(
"LoadPackage",
"need to specify a package name");
8062 if (
fPackMgr->
Load(package, loadopts) == -1)
return -1;
8066 if (loadopts) mess << loadopts;
8075 Info(
"LoadPackage",
"Sending load message to selected workers only");
8077 if (doCollect)
Collect(workers, -1, -1, deactivateOnFailure);
8094 if (!package || !package[0]) {
8095 Error(
"UnloadPackage",
"need to specify a package name");
8106 Warning(
"UnloadPackage",
"unable to remove symlink to %s", package);
8177 if (loadopts && strlen(loadopts)) {
8195 Warning(
"EnablePackage",
"'checkversion' option unknown from argument: '%s' - ignored", ocv.
Data());
8198 Info(
"EnablePackage",
"setting check version option from argument: %d", cvopt);
8202 if (lcv !=
kNPOS && fcv == 0) ocv += os->
String()[lcv];
8208 if (!optls) optls =
new TList;
8214 Warning(
"EnablePackage",
"remote server does not support options: ignoring the option string");
8239 if (!package || !package[0]) {
8240 Error(
"EnablePackage",
"need to specify a package name");
8258 if (ocv ==
"off" || ocv ==
"0")
8260 else if (ocv ==
"on" || ocv ==
"1")
8263 Warning(
"EnablePackage",
"'checkversion' option unknown from rootrc: '%s' - ignored", ocv.
Data());
8268 chkveropt = pcv->
GetVal();
8274 Info(
"EnablePackage",
"using check version option: %d", chkveropt);
8279 TList *optls = (loadopts && loadopts->
GetSize() > 0) ? loadopts : 0;
8281 Warning(
"EnablePackage",
"remote server does not support options: ignoring the option list");
8285 if (
LoadPackage(pac, notOnClient, optls, workers) == -1)
8313 Error(
"DownloadPackage",
"the manager is undefined!");
8319 if (!parname.EndsWith(
".par")) parname +=
".par";
8320 src.
Form(
"packages/%s", parname.Data());
8321 if (!dstdir || strlen(dstdir) <= 0) {
8322 dst.
Form(
"./%s", parname.Data());
8329 Error(
"DownloadPackage",
8330 "could not create the destination directory '%s' (errno: %d)",
8335 Error(
"DownloadPackage",
8336 "destination path '%s' exist but is not a directory!", dstdir);
8339 dst.
Form(
"%s/%s", dstdir, parname.Data());
8349 Warning(
"DownloadPackage",
"problems restoring output");
8362 if (
s.Contains(
"*** Global Package cache")) {
8364 s.Remove(0,
s.Last(
':') + 1);
8365 s.Remove(
s.Last(
' '));
8368 }
else if (
s.Contains(
"*** Package cache")) {
8373 if (isGlobal &&
s.Contains(parname)) {
8374 src.
Form(
"%s/%s", globaldir.
Data(), parname.Data());
8385 Error(
"DownloadPackage",
"problems downloading '%s' (src:%s, dst:%s)",
8389 Info(
"DownloadPackage",
"'%s' cross-checked against master repository (local path: %s)",
8427 if (par.EndsWith(
".par")) {
8429 name = base(0, base.
Length() - strlen(
".par"));
8444 Info(
"UploadPackage",
"global package found (%s): no upload needed",
8447 }
else if (xrc < 0) {
8448 Error(
"UploadPackage",
"PAR file '%s' not found", par.Data());
8480 smsg.
Form(
"+%s", par.Data());
8486 mess << smsg << (*md5);
8489 mess2 << smsg << (*md5);
8492 mess3 << smsg << (*md5);
8507 TIter next(workers);
8509 while ((sl = (
TSlave *) next())) {
8523 Error(
"UploadPackage",
"%s: problems uploading file %s",
8542 Error(
"UploadPackage",
"%s: unpacking of package %s failed",
8552 while ((ma = (
TSlave *) nextmaster())) {
8562 Error(
"UploadPackage",
"package %s did not exist on submaster %s",
8578 if (macro && strlen(macro) > 0) {
8582 gROOT->SetMacroPath(macrop);
8609 if (!macro || !macro[0]) {
8610 Error(
"Load",
"need to specify a macro name");
8620 TString addsname, implname = macro;
8622 if (icom !=
kNPOS) {
8623 addsname = implname(icom + 1, implname.
Length());
8627 TString bmsg(basemacro), acmode, args, io;
8633 Info(
"Load",
"macro '%s' does not contain a '.': do nothing", macro);
8649 Info(
"Load",
"no associated header file found: tried: %s %s",
8650 h.Data(), headname.
Data());
8657 if (!addsname.
IsNull()) {
8660 while (addsname.
Tokenize(fn, from,
",")) {
8662 Error(
"Load",
"additional file '%s' not found", fn.
Data());
8670 }
else if (!addincs.
Contains(dirn)) {
8682 Error(
"Load",
"problems sending implementation file %s", implname.
Data());
8687 Error(
"Load",
"problems sending header file %s", headname.
Data());
8692 TIter nxfn(&addfiles);
8697 Error(
"Load",
"problems sending additional file %s", os->
GetName());
8749 PDB(kGlobal, 1)
Info(
"Load",
"adding loaded macro: %s", macro);
8766 if (uniqueWorkers) {
8782 while ((wrk = (
TSlave *)nxw())) {
8799 PDB(kGlobal, 1)
Info(
"Load",
"adding loaded macro: %s", macro);
8822 if ((!libpath || !libpath[0])) {
8824 Info(
"AddDynamicPath",
"list is empty - nothing to do");
8836 if (libpath && strlen(libpath)) {
8867 if ((!incpath || !incpath[0])) {
8869 Info(
"AddIncludePath",
"list is empty - nothing to do");
8881 if (incpath && strlen(incpath)) {
8911 if ((!libpath || !libpath[0])) {
8913 Info(
"RemoveDynamicPath",
"list is empty - nothing to do");
8925 if (libpath && strlen(libpath))
8945 if ((!incpath || !incpath[0])) {
8947 Info(
"RemoveIncludePath",
"list is empty - nothing to do");
8959 if (incpath && strlen(incpath))
8980 if ((
type !=
"lib") && (
type !=
"inc")) {
8981 Error(
"HandleLibIncPath",
"unknown action type: %s - protocol error?",
type.Data());
8990 if (path.
Length() > 0 && path !=
"-") {
8992 Warning(
"HandleLibIncPath",
"decomposing path %s", path.
Data());
8999 if (
type ==
"lib") {
9021 Info(
"HandleLibIncPath",
9022 "libpath %s does not exist or cannot be read - not added", xlib.
Data());
9042 Info(
"HandleLibIncPath",
9043 "incpath %s does not exist or cannot be read - not added", xinc.
Data());
9050 if (
type ==
"lib") {
9123 (*fPrintProgress)(
total, processed, procTime, bytesread);
9128 fprintf(stderr,
"[TProof::Progress] Total %lld events\t|",
total);
9130 for (
int l = 0;
l < 20;
l++) {
9132 if (
l < 20*processed/
total)
9133 fprintf(stderr,
"=");
9134 else if (
l == 20*processed/
total)
9135 fprintf(stderr,
">");
9136 else if (
l > 20*processed/
total)
9137 fprintf(stderr,
".");
9139 fprintf(stderr,
"=");
9141 Float_t evtrti = (procTime > 0. && processed > 0) ? processed / procTime : -1.;
9142 Float_t mbsrti = (procTime > 0. && bytesread > 0) ? bytesread / procTime : -1.;
9145 Float_t remainingTime = (
total >= processed) ? (
total - processed) / evtrti : -1;
9147 const Float_t toK = 1024., toM = 1048576., toG = 1073741824.;
9148 if (mbsrti >= toG) {
9151 }
else if (mbsrti >= toM) {
9154 }
else if (mbsrti >= toK) {
9158 fprintf(stderr,
"| %.02f %% [%.1f evts/s, %.1f %s, time left: %.1f s]\r",
9159 (
total ? ((100.0*processed)/
total) : 100.0), evtrti, mbsrti, sunit.
Data(), remainingTime);
9161 fprintf(stderr,
"| %.02f %% [%.1f evts/s, time left: %.1f s]\r",
9162 (
total ? ((100.0*processed)/
total) : 100.0), evtrti, remainingTime);
9165 fprintf(stderr,
"| %.02f %%\r",
9166 (
total ? ((100.0*processed)/
total) : 100.0));
9168 if (processed >=
total) {
9169 fprintf(stderr,
"\n Query processing time: %.1f s\n", procTime);
9185 Info(
"Progress",
"%2f (%lld/%lld)", 100.*processed/
total, processed,
total);
9187 if (
gROOT->IsBatch()) {
9192 EmitVA(
"Progress(Long64_t,Long64_t)", 2,
total, processed);
9205 Info(
"Progress",
"%lld %lld %lld %f %f %f %f",
total, processed, bytesread,
9206 initTime, procTime, evtrti, mbrti);
9208 if (
gROOT->IsBatch()) {
9213 EmitVA(
"Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t)",
9214 7,
total, processed, bytesread, initTime, procTime, evtrti, mbrti);
9227 Info(
"Progress",
"%lld %lld %lld %f %f %f %f %d %f",
total, processed, bytesread,
9228 initTime, procTime, evtrti, mbrti, actw, eses);
9230 if (
gROOT->IsBatch()) {
9235 EmitVA(
"Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t,Int_t,Int_t,Float_t)",
9236 10,
total, processed, bytesread, initTime, procTime, evtrti, mbrti, actw, tses, eses);
9253 Emit(
"Feedback(TList *objs)", (
Long_t) objs);
9262 Info(
"CloseProgressDialog",
9269 Emit(
"CloseProgressDialog()");
9279 Info(
"ResetProgressDialog",
"(%s,%d,%lld,%lld)", sel, sz, fst, ent);
9281 EmitVA(
"ResetProgressDialog(const char*,Int_t,Long64_t,Long64_t)",
9282 4, sel, sz, fst, ent);
9291 Info(
"StartupMessage",
"(%s,%d,%d,%d)", msg, st, done,
total);
9293 EmitVA(
"StartupMessage(const char*,Bool_t,Int_t,Int_t)",
9294 4, msg, st, done,
total);
9303 Info(
"DataSetStatus",
"(%s,%d,%d,%d)", msg, st, done,
total);
9305 EmitVA(
"DataSetStatus(const char*,Bool_t,Int_t,Int_t)",
9306 4, msg, st, done,
total);
9319 char msg[512] = {0};
9321 snprintf(msg, 512,
"%s: OK (%d %s) \n",
9322 action,tot,
type.Data());
9324 snprintf(msg, 512,
"%s: %d out of %d (%d %%)\r",
9325 action, done, tot, frac);
9328 fprintf(stderr,
"%s", msg);
9337 mess <<
TString(action) << tot << done << st;
9348 Info(
"QueryResultReady",
"ref: %s", ref);
9350 Emit(
"QueryResultReady(const char*)",ref);
9370 while (
TSlave *sl =
dynamic_cast<TSlave*
>(nextSlave())) {
9375 sllist->
SetName(sl->GetName());
9376 slholder.
Add(sllist);
9379 elemholder.
Add(elemlist);
9380 nodes.
Add(
new TPair(sllist, elemlist));
9382 sllist =
dynamic_cast<TList*
>(p->
Key());
9384 if (sllist) sllist->
Add(sl);
9390 for (
Int_t i = 0; i < 2; i++) {
9394 if (elem->GetValid())
continue;
9426 Warning(
"ValidateDSet",
"invalid values from TPair! Protocol error?");
9434 Warning(
"ValidateDSet",
"no node to allocate TDSetElement to - ignoring");
9442 TIter nextNode(&nodes);
9444 while (
TPair *node =
dynamic_cast<TPair*
>(nextNode())) {
9445 TList *slaves =
dynamic_cast<TList*
>(node->Key());
9446 TList *setelements =
dynamic_cast<TList*
>(node->Value());
9447 if (!slaves || !setelements)
continue;
9451 for (
Int_t i=0; i<nslaves; i++) {
9455 for (
Int_t j = (i*nelements)/nslaves;
9456 j < ((i+1)*nelements)/nslaves;
9473 PDB(kGlobal,1)
Info(
"ValidateDSet",
9474 "Sending TDSet with %d elements to slave %s"
9476 copyset.GetListOfElements()->GetSize(),
9486 Info(
"ValidateDSet",
"Calling Collect");
9563 if (datafile && strlen(datafile) > 0) {
9595 if (dataFile.
Length() > 0) {
9597 Info(
"SendInputDataFile",
"broadcasting %s", dataFile.
Data());
9630 if (
f &&
f->GetListOfKeys() &&
f->GetListOfKeys()->GetSize() > 0)
9644 if (!list_ok && !file_ok)
return;
9647 if (file_ok && !list_ok) {
9650 }
else if (!file_ok && list_ok) {
9660 while ((obj = next())) {
9670 }
else if (file_ok && list_ok) {
9690 while ((obj = next())) {
9696 Error(
"PrepareInputDataFile",
"could not open %s for updating", dataFile.
Data());
9756 !out || (out && out->
GetSize() <= 0))
return o;
9763 while ((o = nxo())) {
9769 if (!
f || (
f &&
f->IsZombie())) {
9770 ::Warning(
"TProof::GetOutput",
"problems opening file %s", fn.
Data());
9773 if (
f && (o =
f->Get(
name)))
return o;
9801 Warning(
"SetParameter",
"player undefined! Ignoring");
9820 Warning(
"SetParameter",
"player undefined! Ignoring");
9839 Warning(
"SetParameter",
"player undefined! Ignoring");
9858 Warning(
"SetParameter",
"player undefined! Ignoring");
9877 Warning(
"SetParameter",
"player undefined! Ignoring");
9897 Warning(
"GetParameter",
"player undefined! Ignoring");
9913 if (!wildcard) wildcard =
"";
9915 Int_t nch = strlen(wildcard);
9921 while ((p = next())) {
9923 if (nch &&
s != wildcard &&
s.Index(re) ==
kNPOS)
continue;
9938 if (!wildcard) wildcard =
"";
9940 Int_t nch = strlen(wildcard);
9945 while ((p = next())) {
9947 if (nch &&
s != wildcard &&
s.Index(re) ==
kNPOS)
continue;
9968 Info(
"AddFeedback",
"Adding object \"%s\" to feedback",
name);
9999 Info(
"",
"no feedback requested");
10023 Error(
"GetTreeHeader",
"No connection");
10040 d = soc->
Recv(reply);
10043 Error(
"GetTreeHeader",
"Error getting a replay from the master.Result %d", (
int)
d);
10050 if (
s1 ==
"Success")
10055 Info(
"GetTreeHeader",
"%s, message size: %d, entries: %d",
10058 Info(
"GetTreeHeader",
"tree header retrieval failed");
10222 msg << start << end;
10238 off_t nowlog = lseek(fileno(
fLogFileR), (off_t) 0, SEEK_CUR);
10241 "problem lseeking log file to current position (errno: %d)",
TSystem::GetErrno());
10246 off_t startlog = nowlog;
10247 off_t endlog = lseek(fileno(
fLogFileR), (off_t) 0, SEEK_END);
10256 if (tolog <= 0)
return maclog;
10259 if (lseek(fileno(
fLogFileR), startlog, SEEK_SET) < 0) {
10261 "problem lseeking log file to start position (errno: %d)",
TSystem::GetErrno());
10270 Int_t wanted = (tolog >
sizeof(
line)) ?
sizeof(
line) : tolog;
10281 wanted = (tolog >
sizeof(
line)) ?
sizeof(
line) : tolog;
10285 if (lseek(fileno(
fLogFileR), nowlog, SEEK_SET) < 0) {
10287 "problem lseeking log file to original position (errno: %d)",
TSystem::GetErrno());
10306 EmitVA(
"LogMessage(const char*,Bool_t)", 2,
l->GetName(),
kFALSE);
10326 if (strstr(queryref, qr->
GetTitle()) &&
10327 strstr(queryref, qr->
GetName()))
10350 off_t nowlog = lseek(fileno(
fLogFileR), (off_t) 0, SEEK_CUR);
10357 off_t startlog = nowlog;
10358 off_t endlog = lseek(fileno(
fLogFileR), (off_t) 0, SEEK_END);
10364 lseek(fileno(
fLogFileR), nowlog, SEEK_SET);
10367 lseek(fileno(
fLogFileR), (off_t) 0, SEEK_SET);
10368 }
else if (qry != -1) {
10379 }
else if (qry > 0) {
10382 TIter nxq(queries);
10389 TIter nxq(queries);
10400 Info(
"ShowLog",
"query %d not found in list", qry);
10411 lseek(fileno(
fLogFileR), startlog, SEEK_SET);
10417 Int_t wanted = (tolog >
sizeof(
line)) ?
sizeof(
line) : tolog;
10426 Int_t w = write(fileno(stdout), p,
r);
10428 SysError(
"ShowLog",
"error writing to stdout");
10435 tolog -= strlen(
line);
10440 const char *opt = Getline(
"More (y/n)? [y]");
10450 wanted = (tolog >
sizeof(
line)) ?
sizeof(
line) : tolog;
10459 if (write(fileno(stdout),
"\n", 1) != 1)
10460 SysError(
"ShowLog",
"error writing to stdout");
10465 lseek(fileno(
fLogFileR), nowlog, SEEK_SET);
10477 if (
d->GetProof()) {
10503 Error(
"Detach",
"corrupted worker instance: wrk:%p, sock:%p", sl,
s);
10510 if (shutdown && !
IsIdle()) {
10515 timeout = (timeout > 20) ? timeout : 20;
10540 if (
d->GetProof() ==
this) {
10613 Printf(
" *** WARNING: this function is obsolete: it has been replaced by TProofMgr::UploadFiles ***");
10644 Printf(
" *** WARNING: this function is obsolete: it has been replaced by TProofMgr::UploadFiles ***");
10662 Printf(
" *** WARNING: this function is obsolete: it has been replaced by TProofMgr::UploadFiles ***");
10688 Info(
"RegisterDataSet",
10689 "functionality not available: the server does not have dataset support");
10693 if (!dataSetName || strlen(dataSetName) <= 0) {
10694 Info(
"RegisterDataSet",
"specifying a dataset name is mandatory");
10702 parallelverify =
kTRUE;
10710 mess <<
TString(dataSetName);
10718 Error(
"RegisterDataSet",
"dataset was not saved");
10724 if (!parallelverify)
return result;
10729 Error(
"RegisterDataSet",
"problems verifying dataset '%s'", dataSetName);
10746 Info(
"SetDataSetTreeName",
"functionality not supported by the server");
10750 if (!dataset || strlen(dataset) <= 0) {
10751 Info(
"SetDataSetTreeName",
"specifying a dataset name is mandatory");
10755 if (!treename || strlen(treename) <= 0) {
10756 Info(
"SetDataSetTreeName",
"specifying a tree name is mandatory");
10772 Error(
"SetDataSetTreeName",
"some error occured: default tree name not changed");
10788 Info(
"GetDataSets",
10789 "functionality not available: the server does not have dataset support");
10792 if (
fProtocol < 31 && strstr(optStr,
":lite:"))
10793 Warning(
"GetDataSets",
"'lite' option not supported by the server");
10797 mess <<
TString(uri ? uri :
"");
10798 mess <<
TString(optStr ? optStr :
"");
10802 TMap *dataSetMap = 0;
10804 Error(
"GetDataSets",
"error receiving datasets information");
10810 Error(
"GetDataSets",
"error receiving datasets");
10812 Error(
"GetDataSets",
"message not found or wrong type (%p)", retMess);
10825 Info(
"ShowDataSets",
10826 "functionality not available: the server does not have dataset support");
10832 mess <<
TString(uri ? uri :
"");
10833 mess <<
TString(optStr ? optStr :
"");
10838 Error(
"ShowDataSets",
"error receiving datasets information");
10847 Info(
"ExistsDataSet",
"functionality not available: the server has an"
10848 " incompatible version of TFileInfo");
10852 if (!dataset || strlen(dataset) <= 0) {
10853 Error(
"ExistsDataSet",
"dataset name missing");
10875 Info(
"ClearDataSetCache",
"functionality not available on server");
10893 Info(
"ShowDataSetCache",
"functionality not available on server");
10916 Info(
"GetDataSet",
"functionality not available: the server has an"
10917 " incompatible version of TFileInfo");
10921 if (!uri || strlen(uri) <= 0) {
10922 Info(
"GetDataSet",
"specifying a dataset name is mandatory");
10929 nameMess <<
TString(optStr ? optStr:
"");
10931 Error(
"GetDataSet",
"sending request failed");
10936 Error(
"GetDataSet",
"error receiving datasets information");
10942 Error(
"GetDataSet",
"error reading list of files");
10944 Error(
"GetDataSet",
"message not found or wrong type (%p)", retMess);
10957 fileList->
Print(opt);
10960 Warning(
"ShowDataSet",
"no such dataset: %s", uri);
10971 nameMess <<
TString(uri?uri:
"");
10972 nameMess <<
TString(optStr?optStr:
"");
10974 Error(
"RemoveDataSet",
"sending request failed");
10988 Error (
"FindDataSets",
"not yet implemented");
10989 return (
TList *) 0;
10999 Error(
"RequestStagingDataSet",
11000 "functionality not supported by the server");
11011 Error(
"RequestStagingDataSet",
"staging request was unsuccessful");
11025 Error(
"CancelStagingDataSet",
11026 "functionality not supported by the server");
11037 Error(
"CancelStagingDataSet",
"cancel staging request was unsuccessful");
11052 Error(
"GetStagingStatusDataSet",
11053 "functionality not supported by the server");
11059 nameMess <<
TString(dataset);
11061 Error(
"GetStagingStatusDataSet",
"sending request failed");
11069 Error(
"GetStagingStatusDataSet",
"problem processing the request");
11077 Error(
"GetStagingStatusDataSet",
"error reading list of files");
11080 Error(
"GetStagingStatusDataSet",
11081 "response message not found or wrong type (%p)", retMess);
11109 Info(
"VerifyDataSet",
"functionality not available: the server has an"
11110 " incompatible version of TFileInfo");
11115 if (!uri || (uri && strlen(uri) <= 0)) {
11116 Error(
"VerifyDataSet",
"dataset name is is mandatory");
11120 Int_t nmissingfiles = 0;
11125 Info(
"VerifyDataSet",
"Master-only verification");
11135 Info(
"VerifyDataSet",
"no such dataset %s", uri);
11139 return nmissingfiles;
11144 Error(
"VerifyDataSet",
"PROOF is in sequential mode (no workers): cannot do parallel verification.");
11145 Error(
"VerifyDataSet",
"Either start PROOF with some workers or force sequential adding 'S' as option.");
11159 Int_t nmissingfiles = 0;
11174 Int_t oldifiip = -1;
11179 const char* mss=
"";
11181 const char* stageoption=
"";
11199 if (oldifiip > -1) {
11200 SetParameter(
"PROOF_IncludeFileInfoInPacket", oldifiip);
11208 Int_t ntouched = 0;
11214 while ((obj = nxtout())) {
11219 while ((fiindout = (
TFileInfo*) nxt())) {
11220 lfiindout->
Add(fiindout);
11226 nmissingfiles += pdisappeared->
GetVal();
11229 if (pnopened &&
TString(pnopened->
GetName()).BeginsWith(
"PROOF_NoFilesOpened_")) {
11230 nopened += pnopened->
GetVal();
11233 if (pntouched &&
TString(pntouched->
GetName()).BeginsWith(
"PROOF_NoFilesTouched_")) {
11234 ntouched += pntouched->
GetVal();
11237 if (pchanged_ds &&
TString(pchanged_ds->
GetName()).BeginsWith(
"PROOF_DataSetChanged_")) {
11242 Info(
"VerifyDataSetParallel",
"%s: changed? %d (# files opened = %d, # files touched = %d,"
11243 " # missing files = %d)",
11244 uri, changed_ds, nopened, ntouched, nmissingfiles);
11246 return nmissingfiles;
11255 Info(
"UploadDataSet",
"Lite-session: functionality not implemented");
11261 mess <<
TString(optStr?optStr:
"");
11265 TMap *groupQuotaMap = 0;
11267 Info(
"GetDataSetQuota",
"could not receive quota");
11273 Error(
"GetDataSetQuota",
"error getting quotas");
11275 Error(
"GetDataSetQuota",
"message not found or wrong type (%p)", retMess);
11278 return groupQuotaMap;
11288 Info(
"ShowDataSetQuota",
11289 "functionality not available: the server does not have dataset support");
11294 Info(
"UploadDataSet",
"Lite-session: functionality not implemented");
11305 Error(
"ShowDataSetQuota",
"error receiving quota information");
11368 if (!ord || strlen(ord) <= 0) {
11369 Info(
"ModifyWorkerLists",
11370 "an ordinal number - e.g. \"0.4\" or \"*\" for all - is required as input");
11374 Info(
"ModifyWorkerLists",
"ord: '%s' (add: %d, save: %d)", ord, add, save);
11411 while(oo.Tokenize(o, from,
","))
11421 while ((wrk = (
TSlave *) nxw())) {
11444 if (!allord && ords) {
11445 if (os) ords->
Remove(os);
11446 if (ords->
GetSize() == 0)
break;
11453 if (!fw && ords && ords->
GetSize() > 0) {
11456 while ((os = nxo())) {
11458 while ((wrk = (
TSlave *) nxw()))
11461 if (!oo.
IsNull()) oo +=
",";
11466 Warning(
"ModifyWorkerLists",
"worker(s) '%s' not found!", oo.
Data());
11486 mess << action <<
TString(ord);
11493 Warning(
"ModifyWorkerLists",
"request not completely full filled");
11495 Error(
"ModifyWorkerLists",
"request failed");
11500 if (oo.Contains(
","))
11501 Warning(
"ModifyWorkerLists",
"block request not supported by server: splitting into pieces ...");
11503 while(oo.Tokenize(o, from,
",")) {
11505 mess << action << o;
11560 const char *confdir,
Int_t loglevel)
11562 const char *pn =
"TProof::Open";
11570 ::Error(pn,
"plugin manager not found");
11574 if (
gROOT->IsBatch()) {
11575 ::Error(pn,
"we are in batch mode, cannot show PROOF Session Viewer");
11581 ::Error(pn,
"no plugin found for TSessionViewer");
11585 ::Error(pn,
"plugin for TSessionViewer could not be loaded");
11612 TString sport = opts(it + strlen(
"tunnel="), opts.
Length());
11618 host = sport(0, ic);
11619 sport.
Remove(0, ic + 1);
11630 port = sport.
Atoi();
11633 ::Info(
"TProof::Open",
"using tunnel at %s:%d", host.
Data(), port);
11639 "problems parsing tunnelling info from options: %s", opts.
Data());
11647 if (opts.
Length() > 0) {
11653 locid = opts.
Atoi();
11675 if (!proof || !proof->
IsValid()) {
11677 ::Error(pn,
"new session could not be attached");
11686 if (!proof || !proof->
IsValid()) {
11687 ::Error(pn,
"new session could not be created");
11720 "unable to initialize a valid manager instance");
11792 Error(
"SaveWorkerInfo",
"gProofServ undefined");
11798 Warning(
"SaveWorkerInfo",
"all relevant worker lists is undefined");
11805 FILE *fwrk = fopen(fnwrk.
Data(),
"w");
11807 Error(
"SaveWorkerInfo",
11808 "cannot open %s for writing (errno: %d)", fnwrk.
Data(), errno);
11818 if (reLogTag.
Match(addlogext) == 2) {
11819 addLogTag = reLogTag[1];
11825 Info(
"SaveWorkerInfo",
"request for additional line with ext: '%s'", addlogext.
Data());
11835 while ((wrk = (
TSlave *) nxa())) {
11838 if (re.
Match(logfile) == 2) logfile = re[1];
11841 fprintf(fwrk,
"%s@%s:%d %d %s %s.log\n",
11845 if (addlogext.
Length() > 0) {
11846 fprintf(fwrk,
"%s@%s:%d %d %s(%s) %s.%s\n",
11856 while ((wrk = (
TSlave *) nxb())) {
11858 if (re.
Match(logfile) == 2) logfile = re[1];
11862 fprintf(fwrk,
"%s@%s:%d 0 %s %s.log\n",
11875 if (re.
Match(logfile) == 2) logfile = re[1];
11877 fprintf(fwrk,
"%s 2 %s %s.log\n",
11880 if (addlogext.
Length() > 0) {
11881 fprintf(fwrk,
"%s 2 %s(%s) %s.%s\n",
11883 logfile.
Data(), addlogext.
Data());
11997 if (!dset || !input || !mgr) {
11998 emsg.
Form(
"invalid inputs (%p, %p, %p)", dset, input, mgr);
12008 TString dsns(dsname), enlname;
12010 if (eli !=
kNPOS) {
12011 enlname = dsns(eli + strlen(
"?enl="), dsns.Length());
12012 dsns.Remove(eli, dsns.Length()-eli);
12016 if (dsname.
BeginsWith(
"TFileCollection:")) {
12022 emsg.
Form(
"TFileCollection %s not found in input list", dset->
GetName());
12033 input->
Add(
new TNamed(
"PROOF_LookupOpt", lookupopt.
Data()));
12055 if (validEnl && validSdsn && ((
fc = mgr->
GetDataSet(dsns) ))) {
12078 dsns = dsname.
Data();
12081 while (dsns.Tokenize(dsn1, from1,
"[, ]")) {
12084 while (dsn1.
Tokenize(dsn2, from2,
"|")) {
12087 if (ienl !=
kNPOS) {
12088 enlname = dsn2(ienl + 5, dsn2.
Length());
12125 if (!datasets || datasets->
GetSize() <= 0) {
12126 emsg.
Form(
"no dataset(s) found on the master corresponding to: %s", dsname.
Data());
12131 emsg.
Form(
"dataset pointer is null: corruption? - aborting");
12138 lookupopt =
gEnv->
GetValue(
"Proof.LookupOpt",
"stagedOnly");
12139 input->
Add(
new TNamed(
"PROOF_LookupOpt", lookupopt.
Data()));
12159 if (!dsTree.
IsNull() && dsTree !=
"/") {
12162 if (idx !=
kNPOS) {
12164 tree.Remove(0, idx);
12175 TList *srvmapslist = srvmapsref;
12181 if (srvmapsref && !srvmapslist) {
12182 msg.
Form(
"+++ Info: dataset server mapping(s) DISABLED by user");
12183 }
else if (srvmapsref && srvmapslist && srvmapslist != srvmapsref) {
12184 msg.
Form(
"+++ Info: dataset server mapping(s) modified by user");
12185 }
else if (!srvmapsref && srvmapslist) {
12186 msg.
Form(
"+++ Info: dataset server mapping(s) added by user");
12198 TIter nxds(datasets);
12199 while ((pair = (
TPair *) nxds())) {
12209 " entry list %s not found", os->
GetName()));
12214 " no sub-lists in entry-list!"));
12224 if (!ds->
Add(files, dsTree, availableOnly, missingFiles)) {
12225 emsg.
Form(
"error integrating dataset %s", dataset->
GetName());
12234 if (!dset->
Add(files, dsTree, availableOnly, missingFiles)) {
12235 emsg.
Form(
"error integrating dataset %s", dataset->
GetName());
12238 if (enl) entrylist = enl;
12240 if (missingFiles) {
12243 TIter next(missingFiles);
12245 while ((
file = next())) {
12247 listOfMissingFiles->
Add(
file);
12250 missingFiles->
Clear();
12256 while ((pair = (
TPair *) nxds())) {
12257 if (pair->
Key())
delete pair->
Key();
12264 if (srvmapslist && srvmapslist != srvmapsref) {
12275 if (listOfMissingFiles && listOfMissingFiles->
GetSize() > 0) {
12276 listOfMissingFiles->
SetName(
"MissingFiles");
12277 input->
Add(listOfMissingFiles);
12294 !cachedir || strlen(cachedir) <= 0)
return 0;
12299 if (!data && !inputdata)
return 0;
12306 if (dstname.BeginsWith(
"cache:")) {
12308 dstname.ReplaceAll(
"cache:",
"");
12309 srcname.
Form(
"%s/%s", cachedir, dstname.Data());
12311 emsg.
Form(
"input data file not found in cache (%s)", srcname.
Data());
12319 emsg.
Form(
"problems copying %s to %s", srcname.
Data(), dstname.Data());
12324 if (inputdata && inputdata->
GetSize() > 0) {
12328 inputdata->
Write();
12332 emsg.
Form(
"could not create %s", dstname.Data());
12336 emsg.
Form(
"no input data!");
12340 ::Info(
"TProof::SaveInputData",
"input data saved to %s", dstname.Data());
12345 input->
Remove(inputdata);
12366 if (!inputdata)
return 0;
12370 emsg.
Form(
"input data file not found in sandbox (%s)", fname.
Data());
12376 emsg.
Form(
"TProof object undefined or invalid: protocol error!");
12393 if (!input || !cachedir || strlen(cachedir) <= 0)
return 0;
12397 if (!inputdata)
return 0;
12402 emsg.
Form(
"input data file not found in cache (%s)", fname.
Data());
12408 added->
SetName(
"PROOF_InputObjsFromFile");
12414 emsg.
Form(
"could not get list of object keys from file");
12419 while ((k = (
TKey *)nxk())) {
12436 emsg.
Form(
"could not open %s", fname.
Data());
12449 if (!
gROOT->IsBatch()) {
12453 gROOT->GetPluginManager()->FindHandler(
"TProofProgressLog"))) {
12456 ::Error(
"TProof::LogViewer",
"cannot load the relevant plug-in");
12463 TString u = (url && strlen(url) <= 0) ?
"lite" : url;
12467 if (url && strlen(url) > 0) {
12468 ::Info(
"TProof::LogViewer",
12469 "batch mode: use TProofLog *pl = TProof::Mgr(\"%s\")->GetSessionLogs(%d)", url, idx);
12470 }
else if (url && strlen(url) <= 0) {
12471 ::Info(
"TProof::LogViewer",
12472 "batch mode: use TProofLog *pl = TProof::Mgr(\"lite\")->GetSessionLogs(%d)", idx);
12474 ::Info(
"TProof::LogViewer",
12475 "batch mode: use TProofLog *pl = TProof::Mgr(\"<master>\")->GetSessionLogs(%d)", idx);
12503 Warning(
"ShowMissingFiles",
"no (last) query found: do nothing");
12510 Info(
"ShowMissingFiles",
"no files missing in query %s:%s", xqr->
GetTitle(), xqr->
GetName());
12514 Int_t nmf = 0, ncf = 0;
12515 Long64_t msz = 0, mszzip = 0, mev = 0;
12518 TIter nxf(missing);
12539 if (msz <= 0) msz = -1;
12540 if (mszzip <= 0) mszzip = -1;
12542 if (msz > 0. || mszzip > 0.) {
12543 Printf(
" +++ %d file(s) missing, %d corrupted, i.e. %lld unprocessed events -->"
12544 " about %.2f%% of the total (%lld bytes, %lld zipped)",
12545 nmf, ncf, mev, xf * 100., msz, mszzip);
12547 Printf(
" +++ %d file(s) missing, %d corrupted, i.e. %lld unprocessed events -->"
12548 " about %.2f%% of the total", nmf, ncf, mev, xf * 100.);
12564 Warning(
"GetMissingFiles",
"no (last) query found: do nothing");
12572 Info(
"ShowMissingFiles",
"no files missing in query %s:%s", xqr->
GetTitle(), xqr->
GetName());
12582 while (
gDirectory->FindObject(fcname) && j < 1000)
12589 TIter nxf(missing);
12603 if (pf && strlen(pf) > 0) {
12607 if (withWrks)
SetParameter(
"PROOF_SlaveStatsTrace",
"");
12608 Info(
"SetPerfTree",
"saving of the performance tree enabled (%s)",
fPerfTree.
Data());
12614 Info(
"SetPerfTree",
"saving of the performance tree disabled");
12626 Error(
"SafePerfTree",
"this TProof instance is invalid!");
12632 if (ref && strlen(ref) > 0) {
12634 Error(
"SafePerfTree",
"requested to use query '%s' but player instance undefined!", ref);
12639 Error(
"SafePerfTree",
"TQueryResult instance for query '%s' could not be retrieved", ref);
12643 sref.
Form(
" for requested query '%s'", ref);
12645 if (!outls || (outls && outls->
GetSize() <= 0)) {
12646 Error(
"SafePerfTree",
"outputlist%s undefined or empty", sref.
Data());
12651 if (pf && strlen(pf)) fn = pf;
12652 if (fn.
IsNull()) fn =
"perftree.root";
12654 TFile f(fn,
"RECREATE");
12655 if (
f.IsZombie()) {
12656 Error(
"SavePerfTree",
"could not open file '%s' for writing", fn.
Data());
12661 while ((obj = nxo())) {
12666 if (objname ==
"PROOF_PerfStats" ||
12667 objname ==
"PROOF_PacketsHist" ||
12668 objname ==
"PROOF_EventsHist" ||
12669 objname ==
"PROOF_NodeHist" ||
12670 objname ==
"PROOF_LatencyHist" ||
12671 objname ==
"PROOF_ProcTimeHist" ||
12672 objname ==
"PROOF_CpuTimeHist")
12678 Info(
"SavePerfTree",
"performance information%s saved in %s ...", sref.
Data(), fn.
Data());
static void retrieve(const gsl_integration_workspace *workspace, double *a, double *b, double *r, double *e)
static RooMathCoreReg dummy
R__EXTERN TApplication * gApplication
const Bool_t kIterBackward
void Error(const char *location, const char *msgfmt,...)
static unsigned int total
const Bool_t kSortDescending
R__EXTERN TProofDebug::EProofDebugMask gProofDebugMask
R__EXTERN Int_t gProofDebugLevel
R__EXTERN TProofServ * gProofServ
static Int_t PoDCheckUrl(TString *_cluster)
This a private API function.
const char *const kPROOF_WorkerIdleTO
const char *const kPROOF_PackDir
const char *const kPROOF_ConfFile
const char *const kPROOF_WorkDir
const Long64_t kPROOF_DynWrkPollInt_s
const char *const kPROOF_InputDataFile
const char *const kPROOF_ConfDir
const Int_t kPROOF_Protocol
const char *const kPROOF_TerminateWorker
R__EXTERN TVirtualMutex * gROOTMutex
R__EXTERN TRandom * gRandom
char * Form(const char *fmt,...)
void Printf(const char *fmt,...)
Bool_t R_ISLNK(Int_t mode)
Bool_t R_ISDIR(Int_t mode)
R__EXTERN TSystem * gSystem
#define R__LOCKGUARD(mutex)
static struct mg_connection * fc(struct mg_context *ctx)
TSignalHandler * GetSignalHandler() const
Using a TBrowser one can browse all ROOT objects.
virtual void WriteString(const char *s)
Write string to I/O buffer.
virtual TObject * ReadObject(const TClass *cl)
Read object from I/O buffer.
virtual char * ReadString(char *s, Int_t max)
Read string from I/O buffer.
virtual void WriteObject(const TObject *obj, Bool_t cacheReuse=kTRUE)
Write object to I/O buffer.
A chain is a collection of files containing TTree objects.
Collection abstract base class.
virtual void ls(Option_t *option="") const
List (ls) all objects in this collection.
virtual void Print(Option_t *option="") const
Default print for collections, calls Print(option, 1).
void SetName(const char *name)
virtual Int_t GetEntries() const
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
virtual TObject * Clone(const char *newname="") const
Make a clone of an collection using the Streamer facility.
Bool_t Contains(const char *name) const
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write all objects in this collection.
Manages an element of a TDSet.
const char * GetObjName() const
const char * GetDirectory() const
Return directory where to look for object.
const char * GetMsd() const
const char * GetFileName() const
Long64_t GetFirst() const
This class implements a data set to be used for PROOF processing.
virtual void SetEntryList(TObject *aList)
Set entry (or event) list for this data set.
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 ElementsValid()
Check if all elements are valid.
void SetSrvMaps(TList *srvmaps=0)
Set (or unset) the list for mapping servers coordinate for files.
void Validate()
Validate the TDSet by opening files.
const char * GetType() const
TList * GetListOfElements() const
void SetDirectory(const char *dir)
Set/change directory.
void SetObjName(const char *objname)
Set/change object name.
const char * GetDirectory() const
const char * GetObjName() const
virtual TFileCollection * GetDataSet(const char *uri, const char *server=0)
Utility function used in various methods for user dataset upload.
static TList * GetDataSetSrvMaps()
Static getter for server mapping list.
static TList * ParseDataSetSrvMaps(const TString &srvmaps)
Create a server mapping list from the content of 'srvmaps' Return the list (owned by the caller) or 0...
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.
virtual Bool_t cd(const char *path=0)
Change current directory to "this" directory.
Utility class to draw objects in the feedback list during queries.
A List of entry numbers in a TTree or TChain.
virtual TList * GetLists() const
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=0)
Set the value of a resource or create a new resource.
void cd(const char *dir) const
void put(const char *file, const char *remoteName=0)
Class that contains a list of TFileInfo's and accumulated meta data information about its entries.
void Print(Option_t *option="") const
Prints the contents of the TFileCollection.
const char * GetDefaultTreeName() const
Returns the tree set with SetDefaultTreeName if set Returns the name of the first tree in the meta da...
Int_t Add(TFileInfo *info)
Add TFileInfo to the collection.
virtual void Remove()
Remove file event handler from system file handler list.
virtual void Add()
Add file event handler to system file handler list.
Class describing a generic file including meta information.
TUrl * NextUrl()
Iterator function, start iteration by calling ResetUrl().
TUrl * GetFirstUrl() const
TUrl * GetCurrentUrl() const
Return the current url.
TFileInfoMeta * GetMetaData(const char *meta=0) const
Get meta data object with specified name.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
virtual void Close(Option_t *option="")
Close a file.
static EFileType GetType(const char *name, Option_t *option="", TString *prefix=0)
Resolve the file type as a function of the protocol field in 'name'.
virtual Bool_t IsOpen() const
Returns kTRUE in case file is open and kFALSE if file is not open.
virtual Bool_t Cp(const char *dst, Bool_t progressbar=kTRUE, UInt_t buffersize=1000000)
Allows to copy this file to the dst URL.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose, Int_t netopt=0)
Create / open a file.
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
TObject * FindObject(const char *name) const
Find object using its name.
TObject * Remove(TObject *obj)
Remove object from the list.
void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
const char * GetHostName() const
Book space in a file, create I/O buffers, to fill them, (un)compress them.
virtual const char * GetClassName() const
virtual void Add(TObject *obj)
virtual TObject * After(const TObject *obj) const
Returns the object after object obj.
virtual TObject * Remove(TObject *obj)
Remove object from the list.
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
virtual TObjLink * FirstLink() const
virtual TObject * At(Int_t idx) const
Returns the object at position idx. Returns 0 if idx is out of range.
virtual TObject * Last() const
Return the last object in the list. Returns 0 when list is empty.
virtual void AddAfter(const TObject *after, TObject *obj)
Insert object after object after in the list.
virtual void RecursiveRemove(TObject *obj)
Remove object from this collection and recursively remove the object from all other objects (and coll...
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
virtual TObject * First() const
Return the first object in the list. Returns 0 when list is empty.
virtual void Clear(Option_t *option="")
Remove all objects from the list.
This code implements the MD5 message-digest algorithm.
static TMD5 * FileChecksum(const char *file)
Returns checksum of specified file.
Class supporting a collection of lines with C++ code.
virtual TObjString * AddLine(const char *text)
Add line with text in the list of lines of this macro.
TList * GetListOfLines() const
virtual TObjString * GetLineWith(const char *text) const
Search the first line containing text.
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
void Add(TObject *obj)
This function may not be used (but we need to provide it since it is a pure virtual in TCollection).
TObject * GetValue(const char *keyname) const
Returns a pointer to the value associated with keyname as name of the key.
Bool_t AreAllWorkersAssigned()
Return if the determined number of workers has been already assigned to this merger.
Bool_t AreAllWorkersMerged()
Return if merger has already merged all workers, i.e. if it has finished its merging job.
virtual ~TMergerInfo()
Destructor.
void SetMergedWorker()
Increase number of already merged workers by 1.
void AddWorker(TSlave *sl)
Add new worker to the list of workers to be merged by this merger.
void AddMergedObjects(Int_t objects)
static void EnableSchemaEvolutionForAll(Bool_t enable=kTRUE)
Static function enabling or disabling the automatic schema evolution.
void SetWhat(UInt_t what)
Using this method one can change the message type a-posteriory.
virtual void RemoveAll()
Remove all sockets from the monitor.
virtual void ActivateAll()
Activate all de-activated sockets.
TSocket * Select()
Return pointer to socket for which an event is waiting.
virtual void Activate(TSocket *sock)
Activate a de-activated socket.
virtual void Add(TSocket *sock, Int_t interest=kRead)
Add socket to the monitor's active list.
Int_t GetActive(Long_t timeout=-1) const
Return number of sockets in the active list.
virtual void DeActivateAll()
De-activate all activated sockets.
virtual void DeActivate(TSocket *sock)
De-activate a socket.
TList * GetListOfActives() const
Returns a list with all active sockets.
virtual void Remove(TSocket *sock)
Remove a socket from the monitor.
The TNamed class is the base class for all named ROOT classes.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
virtual const char * GetName() const
Returns name of object.
Collectable string class.
const char * GetName() const
Returns name of object.
const TString & GetString() const
Mother of all ROOT objects.
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 * GetName() const
Returns name of object.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
virtual void SysError(const char *method, const char *msgfmt,...) const
Issue system error message.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
R__ALWAYS_INLINE Bool_t IsZombie() const
@ kSingleKey
write collection with single key
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual const char * GetTitle() const
Returns title of object.
virtual void Print(Option_t *option="") const
This method must be overridden when a class wants to print itself.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Wrapper for PCRE library (Perl Compatible Regular Expressions).
Int_t Match(const TString &s, UInt_t start=0)
Runs a match on s against the regex 'this' was created with.
The PROOF package manager contains tools to manage packages.
void Show(const char *title=0)
Show available packages.
Int_t Build(const char *pack, Int_t opt=TPackMgr::kCheckROOT)
Method to build a package.
Int_t Install(const char *par, Bool_t rmold=kFALSE)
Install package from par (unpack the file in the directory); par can be an URL for remote retrieval.
void ShowEnabled(const char *title=0)
Show enabled packages.
static Int_t FindParPath(TPackMgr *packmgr, const char *pack, TString &par)
Get the full path to PAR, looking also in the global dirs.
static Int_t RegisterGlobalPath(const char *paths)
Parse one or more paths as possible sources of packages Returns number of paths added; or -1 in case ...
Int_t Load(const char *pack, TList *optls=0)
Method to load a package taking an option list Return -1 on error, 0 otherwise.
Int_t Unload(const char *pack)
Method to unload a package.
TList * GetListOfEnabled() const
Get list of enabled packages Returns a pointer to a TList object, transferring ownership to the calle...
Int_t Remove(const char *pack=0, Bool_t dolock=kTRUE)
Remove package 'pack' If 'pack' is null or empty all packages are cleared.
TMD5 * ReadMD5(const char *pack)
Read MD5 checksum of the PAR file from the PROOF-INF/md5.txt file.
Class used by TMap to store (key,value) pairs.
const char * GetName() const
Returns name of object.
Named parameter, streamable and storable.
const AParamType & GetVal() const
const char * GetName() const
Returns name of object.
Long_t ExecPlugin(int nargs, const T &... params)
Int_t LoadPlugin()
Load the plugin library for this handler.
This class implements a plugin library manager.
TPluginHandler * FindHandler(const char *base, const char *uri=0)
Returns the handler if there exists a handler for the specified URI.
Bool_t Notify()
TProof interrupt handler.
const char * Export(Bool_t &changed)
The PROOF manager interacts with the PROOF server coordinator to create or destroy a PROOF session,...
virtual Int_t Reset(Bool_t hard=kFALSE, const char *usr=0)
Send a cleanup request for the sessions associated with the current user.
virtual TList * QuerySessions(Option_t *opt="S")
Get list of sessions accessible to this manager.
static TProofMgr * Create(const char *url, Int_t loglevel=-1, const char *alias=0, Bool_t xpd=kTRUE)
Static method returning the appropriate TProofMgr object using the plugin manager.
virtual Int_t Rm(const char *, const char *=0, const char *=0)
Run 'rm' on 'what'. Locally it is just a call to TSystem::Unlink .
virtual void Find(const char *="~/", const char *=0, const char *=0)
virtual TProof * CreateSession(const char *=0, const char *=0, Int_t=-1)
Create a new remote session (master and associated workers).
virtual Bool_t IsValid() const
virtual Int_t GetFile(const char *, const char *, const char *=0)
virtual TProof * AttachSession(Int_t, Bool_t=kFALSE)
Dummy version provided for completeness.
virtual Bool_t IsProofd() const
virtual TProofDesc * GetProofDesc(Int_t id)
Get TProofDesc instance corresponding to 'id'.
virtual Int_t Stat(const char *, FileStat_t &, const char *=0)
virtual Bool_t IsLite() const
virtual void DiscardSession(TProof *p)
Discard TProofDesc of session 'p' from the internal list.
The purpose of this class is to provide a complete node description for masters, submasters and worke...
const TString & GetMsd() const
const TString & GetImage() const
const TString & GetOrdinal() const
const TString & GetWorkDir() const
Int_t GetPerfIndex() const
const TString & GetNodeName() const
const char * GetName() const
Returns name of object.
Class to steer the merging of files produced on the workers.
const char * GetDir(Bool_t raw=kFALSE) const
const char * GetOutputFileName() const
const char * GetFileName() const
Bool_t IsRetrieve() const
void AttachList(TList *alist)
Attach to list 'alist'.
Container class for processing statistics.
Long64_t GetEntries() const
const char * GetOrdinal() const
const char * GetImage() const
TList * GetEnabledPackages() const
virtual EQueryAction GetWorkers(TList *workers, Int_t &prioritychange, Bool_t resume=kFALSE)
Get list of workers to be used from now on.
virtual void ReleaseWorker(const char *)
const char * GetUser() const
void FlushLogFile()
Reposition the read pointer in the log file to the very end.
TSocket * GetSocket() const
const char * GetGroup() const
void SendAsynMessage(const char *msg, Bool_t lf=kTRUE)
Send an asychronous message to the master / client .
static void ResolveKeywords(TString &fname, const char *path=0)
Replace <ord>, <user>, , <group>, <stag>, <qnum>, <file>, <rver> and <build> placeholders in fname.
TPackMgr * GetPackMgr() const
void SendParallel(Bool_t async=kFALSE)
Send number of parallel nodes to master or client.
const char * GetSessionDir() const
const char * GetWorkDir() const
const char * GetPrefix() const
Bool_t IsTopMaster() const
This class controls a Parallel ROOT Facility, PROOF, cluster.
void HandleLibIncPath(const char *what, Bool_t add, const char *dirs)
Handle lib, inc search paths modification request.
const char * GetSessionTag() const
Int_t Exec(const char *cmd, ESlaves list, Bool_t plusMaster)
Send command to be executed on the PROOF master and/or slaves.
Int_t GetNumberOfInactiveSlaves() const
Return number of inactive slaves, i.e.
void ShowPackages(Bool_t all=kFALSE, Bool_t redirlog=kFALSE)
List contents of package directory.
virtual void ShowData()
List contents of the data directory in the sandbox.
Int_t SendPrint(Option_t *option="")
Send print command to master server.
static TProofMgr * Mgr(const char *url)
Get instance of the effective manager for 'url' Return 0 on failure.
Bool_t CreateMerger(TSlave *sl, Int_t port)
Create a new merger.
Int_t BroadcastGroupPriority(const char *grp, Int_t priority, ESlaves list=kAllUnique)
Broadcast the group priority to all workers in the specified list.
Int_t GetNumberOfQueries()
Number of queries processed by this session.
void ActivateAsyncInput()
Activate the a-sync input handler.
TList * GetOutputNames()
FIXME: to be written.
Bool_t IsEndMaster() const
void DisableGoAsyn()
Signal to disable related switches.
void PutLog(TQueryResult *qr)
Display log of query pq into the log window frame.
void NotifyLogMsg(const char *msg, const char *sfx="\n")
Notify locally 'msg' to the appropriate units (file, stdout, window) If defined, 'sfx' is added after...
void Activate(TList *slaves=0)
Activate slave server list.
Int_t UploadPackage(const char *par, EUploadPackageOpt opt=kUntar, TList *workers=0)
Upload a PROOF archive (PAR file).
TMonitor * fCurrentMonitor
TMonitor * fAllUniqueMonitor
void SetFeedback(TString &opt, TString &optfb, Int_t action)
Extract from opt in optfb information about wanted feedback settings.
Int_t SendCurrentState(ESlaves list=kActive)
Transfer the current state of the master to the active slave servers.
void Close(Option_t *option="")
Close all open slave servers.
TList * fTerminatedSlaveInfos
TList * GetListOfSlaves() const
TMonitor * fUniqueMonitor
Int_t SetParallelSilent(Int_t nodes, Bool_t random=kFALSE)
Tell PROOF how many slaves to use in parallel.
Int_t DisablePackages()
Remove all packages.
Bool_t fProgressDialogStarted
Int_t DownloadPackage(const char *par, const char *dstdir=0)
Download a PROOF archive (PAR file) from the master package repository.
TMap * GetDataSetQuota(const char *optStr="")
returns a map of the quotas of all groups
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.
void ShowQueries(Option_t *opt="")
Ask the master for the list of queries.
Int_t BuildPackage(const char *package, EBuildPackageOpt opt=kBuildAll, Int_t chkveropt=TPackMgr::kCheckROOT, TList *workers=0)
Build specified package.
virtual void Print(Option_t *option="") const
Print status of PROOF cluster.
Int_t GetClientProtocol() const
virtual ~TProof()
Clean up PROOF environment.
void RemoveChain(TChain *chain)
Remove chain from data set.
void SetupWorkersEnv(TList *wrks, Bool_t increasingpool=kFALSE)
Set up packages, loaded macros, include and lib paths ...
static Int_t GetInputData(TList *input, const char *cachedir, TString &emsg)
Get the input data from the file defined in the input list.
TList * fNonUniqueMasters
Int_t SendObject(const TObject *obj, ESlaves list=kActive)
Send object to master or slave servers.
Int_t HandleOutputOptions(TString &opt, TString &target, Int_t action)
Extract from opt information about output handling settings.
TVirtualProofPlayer * fPlayer
void AddFeedback(const char *name)
Add object to feedback list.
Bool_t IsParallel() const
static void LogViewer(const char *url=0, Int_t sessionidx=0)
Start the log viewer window usign the plugin manager.
TVirtualProofPlayer * GetPlayer() const
void CleanGDirectory(TList *ol)
Remove links to objects in list 'ol' from gDirectory.
void DeActivateAsyncInput()
De-activate a-sync input handler.
Int_t BroadcastRaw(const void *buffer, Int_t length, TList *slaves)
Broadcast a raw buffer of specified length to all slaves in the specified list.
static void ResetEnvVars()
Clear the list of environment variables passed to proofserv on the master and slaves.
void AddInputData(TObject *obj, Bool_t push=kFALSE)
Add data objects that might be needed during the processing of the selector (see Process()).
void AskParallel()
Ask the for the number of parallel slaves.
virtual void ClearCache(const char *file=0)
Remove file from all file caches.
virtual void ClearDataSetCache(const char *dataset=0)
Clear the content of the dataset cache, if any (matching 'dataset', if defined).
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.
Int_t CleanupSession(const char *sessiontag)
Send cleanup request for the session specified by tag.
virtual Bool_t CancelStagingDataSet(const char *dataset)
Cancels a dataset staging request.
TObject * GetParameter(const char *par) const
Get specified parameter.
void SetRunStatus(ERunStatus rst)
Long64_t fLastPollWorkers_s
Int_t Archive(Int_t query, const char *url)
Send archive request for the qry-th query in fQueries.
void AskForOutput(TSlave *sl)
Master asks for output from worker sl.
TList * GetListOfPackages()
Get from the master the list of names of the packages available.
TQueryResult * GetQueryResult(const char *ref=0)
Return pointer to the full TQueryResult instance owned by the player and referenced by 'ref'.
Int_t GetNumberOfSlaves() const
Return number of slaves as described in the config file.
void StartupMessage(const char *msg, Bool_t status, Int_t done, Int_t total)
Send startup message.
static void AssertMacroPath(const char *macro)
Make sure that the directory path contained by macro is in the macro path.
Int_t AddIncludePath(const char *incpath, Bool_t onClient=kFALSE, TList *wrks=0, Bool_t doCollect=kTRUE)
Add 'incpath' to the inc path search.
virtual TMap * GetDataSets(const char *uri="", const char *optStr="")
Lists all datasets that match given uri.
PrintProgress_t fPrintProgress
virtual void ShowCache(Bool_t all=kFALSE)
List contents of file cache.
void ClearFeedback()
Clear feedback list.
static TProof * Open(const char *url=0, const char *conffile=0, const char *confdir=0, Int_t loglevel=0)
Start a PROOF session on a specific cluster.
void Browse(TBrowser *b)
Build the PROOF's structure in the browser.
void InterruptCurrentMonitor()
If in active in a monitor set ready state.
void ResetMergePrg()
Reset the merge progress notificator.
void SetPerfTree(const char *pf="perftree.root", Bool_t withWrks=kFALSE)
Enable/Disable saving of the performance tree.
void ClearData(UInt_t what=kUnregistered, const char *dsname=0)
Remove files for the data directory.
void Touch()
Ping PROOF slaves. Returns the number of slaves that responded.
Int_t AssertPath(const char *path, Bool_t writable)
Make sure that 'path' exists; if 'writable' is kTRUE, make also sure that the path is writable.
virtual void ShowStagingStatusDataSet(const char *dataset, const char *optStr="filter:SsCc")
Like GetStagingStatusDataSet, but displays results immediately.
Int_t VerifyDataSetParallel(const char *uri, const char *optStr)
Internal function for parallel dataset verification used TProof::VerifyDataSet and TProofLite::Verify...
const char * GetConfFile() const
Int_t GetRemoteProtocol() const
Int_t ModifyWorkerLists(const char *ord, Bool_t add, Bool_t save)
Modify the worker active/inactive list by making the worker identified by the ordinal number 'ord' ac...
Int_t SetParallel(Int_t nodes=-1, Bool_t random=kFALSE)
Tell PROOF how many slaves to use in parallel.
Int_t GoMoreParallel(Int_t nWorkersToAdd)
Add nWorkersToAdd workers to current list of workers.
virtual void ShowDataSetCache(const char *dataset=0)
Display the content of the dataset cache, if any (matching 'dataset', if defined).
const char * GetImage() const
Int_t FindNextFreeMerger()
Return a merger, which is both active and still accepts some workers to be assigned to it.
Int_t GetRC(const char *RCenv, Int_t &env, const char *ord="0")
Get into 'env' the value of integer RC env variable 'rcenv' on node 'ord'.
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.
static Bool_t GetFileInCmd(const char *cmd, TString &fn)
Static method to extract the filename (if any) form a CINT command.
virtual void ShowDataSets(const char *uri="", const char *optStr="")
Shows datasets in locations that match the uri.
Int_t Collect(const TSlave *sl, Long_t timeout=-1, Int_t endtype=-1, Bool_t deactonfail=kFALSE)
Collect responses from slave sl.
Float_t GetCpuTime() const
void ClearDataProgress(Int_t r, Int_t t)
Progress bar for clear data.
static Int_t SendInputData(TQueryResult *qr, TProof *p, TString &emsg)
Send the input data file to the workers.
void SetPlayer(TVirtualProofPlayer *player)
Set a new PROOF player.
Int_t ClearPackage(const char *package)
Remove a specific package.
Int_t SendInitialState()
Transfer the initial (i.e.
Int_t AddWorkers(TList *wrks)
Works on the master node only.
void GetStatistics(Bool_t verbose=kFALSE)
Get statistics about CPU time, real time and bytes read.
virtual Bool_t RegisterDataSet(const char *name, TFileCollection *dataset, const char *optStr="")
Register the 'dataSet' on the cluster under the current user, group and the given 'dataSetName'.
Int_t Broadcast(const TMessage &mess, TList *slaves)
Broadcast a message to all slaves in the specified list.
void DeleteParameters(const char *wildcard)
Delete the input list parameters specified by a wildcard (e.g.
void PrepareInputDataFile(TString &dataFile)
Prepare the file with the input data objects to be sent the master; the objects are taken from the de...
void InitMembers()
Default initializations.
void RedirectWorker(TSocket *s, TSlave *sl, Int_t output_size)
Redirect output of worker sl to some merger.
void HandleSubmerger(TMessage *mess, TSlave *sl)
Process a message of type kPROOF_SUBMERGER.
void SetInputDataFile(const char *datafile)
Set the file to be used to optimally distribute the input data objects.
Int_t ClearPackages()
Remove all packages.
void SetParameter(const char *par, const char *value)
Set input list parameter.
virtual Bool_t StartSlaves(Bool_t attach=kFALSE)
Start up PROOF slaves.
Int_t Ping()
Ping PROOF. Returns 1 if master server responded.
void SetActive(Bool_t=kTRUE)
TSlave * CreateSubmaster(const char *url, const char *ord, const char *image, const char *msd, Int_t nwk=1)
Create a new TSlave of type TSlave::kMaster.
void SaveActiveList()
Save current list of active workers.
const char * GetDataPoolUrl() const
virtual Int_t SetDataSetTreeName(const char *dataset, const char *treename)
Set/Change the name of the default tree.
void ShowMissingFiles(TQueryResult *qr=0)
Show information about missing files during query described by 'qr' or the last query if qr is null (...
Int_t RemoveIncludePath(const char *incpath, Bool_t onClient=kFALSE)
Remove 'incpath' from the inc path search.
void SetMonitor(TMonitor *mon=0, Bool_t on=kTRUE)
Activate (on == TRUE) or deactivate (on == FALSE) all sockets monitored by 'mon'.
Int_t GetParallel() const
Returns number of slaves active in parallel mode.
Int_t UnloadPackage(const char *package)
Unload specified package.
void RemoveFeedback(const char *name)
Remove object from feedback list.
Int_t Remove(Int_t query, Bool_t all=kFALSE)
Send remove request for the qry-th query in fQueries.
std::recursive_mutex fCloseMutex
Bool_t SendingLogToWindow() const
static TPluginHandler * fgLogViewer
Long64_t GetBytesRead() const
void UpdateDialog()
Final update of the progress dialog.
void AskStatistics()
Ask the for the statistics of the slaves.
virtual void SetAlias(const char *alias="")
Set an alias for this session.
Bool_t fFinalizationRunning
void Detach(Option_t *opt="")
Detach this instance to its proofserv.
void PrintProgress(Long64_t total, Long64_t processed, Float_t procTime=-1., Long64_t bytesread=-1)
Print a progress bar on stderr. Used in batch mode.
TPluginHandler * fProgressDialog
Int_t Init(const char *masterurl, const char *conffile, const char *confdir, Int_t loglevel, const char *alias=0)
Start the PROOF environment.
const char * GetConfDir() const
virtual Long64_t DrawSelect(TDSet *dset, const char *varexp, const char *selection="", Option_t *option="", Long64_t nentries=-1, Long64_t firstentry=0)
Execute the specified drawing action on a data set (TDSet).
Int_t DeactivateWorker(const char *ord, Bool_t save=kTRUE)
Remove the worker identified by the ordinal number 'ord' from the the active list.
void SetRealTimeLog(Bool_t on=kTRUE)
Switch ON/OFF the real-time logging facility.
void cd(Int_t id=-1)
Set session with 'id' the default one.
TFileCollection * GetMissingFiles(TQueryResult *qr=0)
Get a TFileCollection with the files missing in the query described by 'qr' or the last query if qr i...
void ParseConfigField(const char *config)
The config file field may contain special instructions which need to be parsed at the beginning,...
Int_t GetNumberOfBadSlaves() const
Return number of bad slaves.
Int_t Retrieve(Int_t query, const char *path=0)
Send retrieve request for the qry-th query in fQueries.
Int_t BroadcastFile(const char *file, Int_t opt, const char *rfile, TList *wrks)
Broadcast file to all workers in the specified list.
void ShowParameters(const char *wildcard="PROOF_*") const
Show the input list parameters specified by the wildcard.
TMonitor * fActiveMonitor
void SendDataSetStatus(const char *msg, UInt_t n, UInt_t tot, Bool_t st)
Send or notify data set status.
virtual Int_t RemoveDataSet(const char *dataset, const char *optStr="")
Remove the specified dataset from the PROOF cluster.
void LogMessage(const char *msg, Bool_t all)
Log a message into the appropriate window by emitting a signal.
static void Reset(const char *url, Bool_t hard=kFALSE)
Wrapper around TProofMgr::Reset(...).
virtual Int_t PollForNewWorkers()
Asks the PROOF Serv for new workers in Dynamic Startup mode and activates them.
Int_t fLastAssignedMerger
TList * GetQueryResults()
Return pointer to the list of query results in the player.
void ShowFeedback() const
Show items in feedback list.
Int_t GoParallel(Int_t nodes, Bool_t accept=kFALSE, Bool_t random=kFALSE)
Go in parallel mode with at most "nodes" slaves.
void SetQueryMode(EQueryMode mode)
Change query running mode to the one specified by 'mode'.
Int_t UnloadPackages()
Unload all packages.
virtual TVirtualProofPlayer * MakePlayer(const char *player=0, TSocket *s=0)
Construct a TProofPlayer object.
TList * GetListOfActiveSlaves() const
TSignalHandler * fIntHandler
TList * FindDataSets(const char *searchString, const char *optStr="")
Find datasets, returns in a TList all found datasets.
Int_t SavePerfTree(const char *pf=0, const char *qref=0)
Save performance information from TPerfStats to file 'pf'.
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 AddDynamicPath(const char *libpath, Bool_t onClient=kFALSE, TList *wrks=0, Bool_t doCollect=kTRUE)
Add 'libpath' to the lib path search.
TProof()
Protected constructor to be used by classes deriving from TProof (they have to call Init themselves a...
Int_t RemoveWorkers(TList *wrks)
Used for shuting down the workres after a query is finished.
void Progress(Long64_t total, Long64_t processed)
Get query progress information.
Long64_t Finalize(Int_t query=-1, Bool_t force=kFALSE)
Finalize the qry-th query in fQueries.
Int_t RemoveDynamicPath(const char *libpath, Bool_t onClient=kFALSE)
Remove 'libpath' from the lib path search.
void ShowDataSetQuota(Option_t *opt=0)
shows the quota and usage of all groups if opt contains "U" shows also distribution of usage on user-...
void DeleteDrawFeedback(TDrawFeedback *f)
Delete draw feedback object.
virtual TFileCollection * GetStagingStatusDataSet(const char *dataset)
Obtains a TFileCollection showing the staging status of the specified dataset.
Bool_t CheckFile(const char *file, TSlave *sl, Long_t modtime, Int_t cpopt=(kCp|kCpBin))
Check if a file needs to be send to the slave.
Bool_t Prompt(const char *p)
Prompt the question 'p' requiring an answer y,Y,n,N Return kTRUE is the answer was y or Y,...
void SetProgressDialog(Bool_t on=kTRUE)
Enable/Disable the graphic progress dialog.
void GoAsynchronous()
Send GOASYNC message to the master.
TList * GetOutputList()
Get list with all object created during processing (see Process()).
TList * fAvailablePackages
void SetManager(TProofMgr *mgr)
Set manager and schedule its destruction after this for clean operations.
TString Getenv(const char *env, const char *ord="0")
Get value of environment variable 'env' on node 'ord'.
void StopProcess(Bool_t abort, Int_t timeout=-1)
Send STOPPROCESS message to master and workers.
TList * GetEnabledPackages() const
Int_t GetNumberOfActiveSlaves() const
Return number of active slaves, i.e.
TSlave * CreateSlave(const char *url, const char *ord, Int_t perf, const char *image, const char *workdir)
Create a new TSlave of type TSlave::kSlave.
void GetMaxQueries()
Get max number of queries whose full results are kept in the remote sandbox.
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 Int_t AssertDataSet(TDSet *dset, TList *input, TDataSetManager *mgr, TString &emsg)
Make sure that dataset is in the form to be processed.
friend class TProofInputHandler
void Interrupt(EUrgent type, ESlaves list=kActive)
Send interrupt to master or slave servers.
Float_t GetRealTime() const
Int_t UploadDataSet(const char *, TList *, const char *=0, Int_t=0, TList *=0)
*** This function is deprecated and will disappear in future versions *** *** It is just a wrapper ar...
void MarkBad(TSlave *wrk, const char *reason=0)
Add a bad slave server to the bad slave list and remove it from the active list and from the two moni...
Int_t SendGroupView()
Send to all active slaves servers the current slave group size and their unique id.
Int_t RestoreActiveList()
Restore saved list of active workers.
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...
void ShowLog(Int_t qry=-1)
Display on screen the content of the temporary log file.
void ClearInputData(TObject *obj=0)
Remove obj form the input data list; if obj is null (default), clear the input data info.
Int_t SendCommand(const char *cmd, ESlaves list=kActive)
Send command to be executed on the PROOF master and/or slaves.
void Feedback(TList *objs)
Get list of feedback objects.
virtual Bool_t RequestStagingDataSet(const char *dataset)
Allows users to request staging of a particular dataset.
Int_t GetLogLevel() const
TObject * GetOutput(const char *name)
Get specified object that has been produced during the processing (see Process()).
TList * GetListOfSlaveInfos()
Returns list of TSlaveInfo's. In case of error return 0.
virtual TTree * GetTreeHeader(TDSet *tdset)
Creates a tree header (a tree with nonexisting files) object for the DataSet.
virtual void ValidateDSet(TDSet *dset)
Validate a TDSet.
TProofMgr::EServType fServType
Int_t UploadDataSetFromFile(const char *, const char *, const char *=0, Int_t=0, TList *=0)
*** This function is deprecated and will disappear in future versions *** *** It is just a wrapper ar...
static TList * fgProofEnvList
virtual void FindUniqueSlaves()
Add to the fUniqueSlave list the active slaves that have a unique (user) file system image.
const char * GetUser() const
void TerminateWorker(TSlave *wrk)
Ask an active worker 'wrk' to terminate, i.e. to shutdown.
static void SystemCmd(const char *cmd, Int_t fdout)
Exec system command 'cmd'. If fdout > -1, append the output to fdout.
EQueryMode GetQueryMode(Option_t *mode=0) const
Find out the query mode based on the current setting and 'mode'.
TString fActiveSlavesSaved
Int_t LoadPackage(const char *package, Bool_t notOnClient=kFALSE, TList *loadopts=0, TList *workers=0)
Load specified package.
Bool_t fSendGroupView
list returned by kPROOF_GETSLAVEINFO
void ResetProgressDialog(const char *sel, Int_t sz, Long64_t fst, Long64_t ent)
Reset progress dialog.
void SetDrawFeedbackOption(TDrawFeedback *f, Option_t *opt)
Set draw feedback option.
friend class TProofInterruptHandler
virtual TFileCollection * GetDataSet(const char *dataset, const char *optStr="")
Get a list of TFileInfo objects describing the files of the specified dataset.
TDrawFeedback * CreateDrawFeedback()
Draw feedback creation proxy.
void AddChain(TChain *chain)
Add chain to data set.
static const TList * GetEnvVars()
Get environemnt variables.
TSlave * FindSlave(TSocket *s) const
Find slave that has TSocket s. Returns 0 in case slave is not found.
TList * GetListOfEnabledPackages()
Get from the master the list of names of the packages enabled.
TList * GetFeedbackList() const
Return feedback list.
virtual void SendInputDataFile()
Send the input data objects to the master; the objects are taken from the dedicated list and / or the...
virtual TList * GetListOfQueries(Option_t *opt="")
Ask the master for the list of queries.
static void DelEnvVar(const char *name)
Remove an variable from the list of environment variables passed to proofserv on the master and slave...
Int_t BroadcastObject(const TObject *obj, Int_t kind, TList *slaves)
Broadcast an object to all slaves in the specified list.
void SetLogLevel(Int_t level, UInt_t mask=TProofDebug::kAll)
Set server logging level.
TList * fEnabledPackagesOnCluster
virtual Long64_t Process(TDSet *dset, const char *selector, Option_t *option="", Long64_t nentries=-1, Long64_t firstentry=0)
Process a data set (TDSet) using the specified selector (.C) file or Tselector object Entry- or event...
void ClearInput()
Clear input object list.
TList * GetListOfBadSlaves() const
Int_t GetSandbox(TString &sb, Bool_t assert=kFALSE, const char *rc=0)
Set the sandbox path from ' Proof.Sandbox' or the alternative var 'rc'.
Int_t DisablePackage(const char *package)
Remove a specific package.
Int_t GetQueryReference(Int_t qry, TString &ref)
Get reference for the qry-th query in fQueries (as displayed by ShowQueries).
Int_t GetNumberOfUniqueSlaves() const
Return number of unique slaves, i.e.
virtual Bool_t ExistsDataSet(const char *dataset)
Returns kTRUE if 'dataset' exists, kFALSE otherwise.
void ShowDataSet(const char *dataset="", const char *opt="filter:SsCc")
display meta-info for given dataset usi
Int_t HandleInputMessage(TSlave *wrk, TMessage *m, Bool_t deactonfail=kFALSE)
Analyze the received message.
void SetDSet(TDSet *dset)
void AddInput(TObject *obj)
Add objects that might be needed during the processing of the selector (see Process()).
void RecvLogFile(TSocket *s, Int_t size)
Receive the log file of the slave with socket s.
void CloseProgressDialog()
Close progress dialog.
TProofOutputList fOutputList
Int_t GetActiveMergersCount()
Get the active mergers count.
void DataSetStatus(const char *msg, Bool_t status, Int_t done, Int_t total)
Send dataset preparation status.
TMacro * GetLastLog()
Fill a TMacro with the log lines since the last reading (fLogFileR) Return (TMacro *)0 if no line was...
TList * GetInputList()
Get input list.
void ReleaseMonitor(TMonitor *mon)
Release the used monitor to be used, making sure to delete newly created monitors.
void ShowEnabledPackages(Bool_t all=kFALSE)
List which packages are enabled.
void SetMaxDrawQueries(Int_t max)
Set max number of draw queries whose results are saved.
void GetLog(Int_t start=-1, Int_t end=-1)
Ask for remote logs in the range [start, end].
Int_t CollectInputFrom(TSocket *s, Int_t endtype=-1, Bool_t deactonfail=kFALSE)
Collect and analyze available input from socket s.
const char * GetMaster() const
void QueryResultReady(const char *ref)
Notify availability of a query result.
virtual void SaveWorkerInfo()
Save information about the worker set in the file .workers in the working dir.
Int_t EnablePackage(const char *package, Bool_t notOnClient=kFALSE, TList *workers=0)
Enable specified package.
Bool_t IsDataReady(Long64_t &totalbytes, Long64_t &bytesready)
See if the data is ready to be analyzed.
const char * GetGroup() const
virtual Int_t VerifyDataSet(const char *dataset, const char *optStr="")
Verify if all files in the specified dataset are available.
void Emit(const char *signal, const T &arg)
Activate signal with single parameter.
void EmitVA(const char *signal_name, Int_t, const T &... params)
Emit a signal with a varying number of arguments.
A container class for query results.
virtual void SetOutputList(TList *out, Bool_t adopt=kTRUE)
Set / change the output list.
Long64_t GetEntries() const
void SetTermTime(Float_t termtime)
void SetArchived(const char *archfile)
Set (or update) query in archived state.
void SetPrepTime(Float_t preptime)
virtual void SetInputList(TList *in, Bool_t adopt=kTRUE)
Set / change the input list.
TObject * GetInputObject(const char *classname) const
Return first instance of class 'classname' in the input list.
void AddInput(TObject *obj)
Add obj to the input list.
TMacro * GetLogFile() const
Bool_t IsFinalized() const
static const char * GetMacroPath()
Get macro search path. Static utility function.
static void SetMacroPath(const char *newpath)
Set or extend the macro search path.
virtual Double_t Rndm()
Machine independent random number generator.
virtual UInt_t Integer(UInt_t imax)
Returns a random integer uniformly distributed on the interval [ 0, imax-1 ].
Regular expression class.
virtual const char * AsString(TString &out)
Returns short string with relevant information about this security context.
A TSelector object is used by the TTree::Draw, TTree::Scan, TTree::Process to navigate in a TTree and...
Sequenceable collection abstract base class.
virtual void Add()
Add signal handler to system signal handler list.
virtual void Remove()
Remove signal handler from system signal handler list.
Int_t Compare(const TObject *obj) const
Used to sort slaveinfos by ordinal.
SysInfo_t GetSysInfo() const
void SetStatus(ESlaveStatus stat)
const char * GetOrdinal() const
void SetSysInfo(SysInfo_t si)
Setter for fSysInfo.
void SetOrdinal(const char *ord)
const char * GetName() const
Returns name of object.
Bool_t IsEqual(const TObject *obj) const
Used to compare slaveinfos by ordinal.
const char * GetDataDir() const
void Print(Option_t *option="") const
Print slave info.
Class describing a PROOF worker server.
virtual void SetAlias(const char *alias)
Set an alias for this session.
const char * GetWorkDir() const
Int_t GetSlaveType() const
Int_t GetParallel() const
const char * GetImage() const
void SetArchCompiler(const char *ac)
TSocket * GetSocket() const
virtual void SetStatus(Int_t st)
virtual void StopProcess(Bool_t abort, Int_t timeout)
Sent stop/abort request to PROOF server.
virtual void FlushSocket()
const char * GetUser() const
TFileHandler * GetInputHandler() const
const char * GetMsd() const
static TSlave * Create(const char *url, const char *ord, Int_t perf, const char *image, TProof *proof, Int_t stype, const char *workdir, const char *msd, Int_t nwk=1)
Static method returning the appropriate TSlave object for the remote server.
void SetInputHandler(TFileHandler *ih)
Adopt and register input handler for this slave.
virtual void Interrupt(Int_t type)
Send interrupt OOB byte to master or slave servers.
virtual void SetInterruptHandler(Bool_t)
virtual Int_t SetupServ(Int_t stype, const char *conffile)
Init a PROOF slave object.
virtual Int_t Ping()
Ping the remote master or slave servers.
virtual Int_t SendGroupPriority(const char *, Int_t)
const char * GetName() const
Returns name of object.
virtual Bool_t IsValid() const
void SetSessionTag(const char *st)
const char * GetOrdinal() const
const char * GetProofWorkDir() const
void SetROOTVersion(const char *rv)
virtual void Close(Option_t *opt="")
Close slave socket.
virtual Int_t Recv(TMessage *&mess)
Receive a TMessage object.
Int_t GetRemoteProtocol() const
TInetAddress GetInetAddress() const
TSecContext * GetSecContext() const
virtual Int_t SendRaw(const void *buffer, Int_t length, ESendRecvOptions opt=kDefault)
Send a raw buffer of specified length.
virtual Bool_t IsValid() const
virtual Int_t Send(const TMessage &mess)
Send a TMessage object.
A sorted doubly linked list.
Double_t RealTime()
Stop the stopwatch (if it is running) and return the realtime (in seconds) passed between the start a...
void Stop()
Stop the stopwatch.
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
Compare a string to char *cs2.
TString & Insert(Ssiz_t pos, const char *s)
Int_t Atoi() const
Return integer value of string.
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
Double_t Atof() const
Return floating-point value contained in string.
Bool_t IsFloat() const
Returns kTRUE if string contains a floating point or integer number.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
Ssiz_t First(char c) const
Find first occurrence of a character c.
const char * Data() const
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e.
TString & ReplaceAll(const TString &s1, const TString &s2)
Ssiz_t Last(char c) const
Find last occurrence of a character c.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Prepend(const char *cs)
TString & Remove(Ssiz_t pos)
TString & Append(const char *cs)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual const char * GetBuildCompilerVersion() const
Return the build compiler version.
static void ResetErrno()
Static function resetting system error number.
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
static Int_t GetErrno()
Static function returning system error number.
virtual void AddIncludePath(const char *includePath)
Add includePath to the already set include path.
virtual int Chmod(const char *file, UInt_t mode)
Set the file permission bits. Returns -1 in case or error, 0 otherwise.
virtual const char * DirName(const char *pathname)
Return the directory name in pathname.
virtual int GetPid()
Get process id.
virtual int CopyFile(const char *from, const char *to, Bool_t overwrite=kFALSE)
Copy a file.
virtual const char * Getenv(const char *env)
Get environment variable.
virtual const char * GetIncludePath()
Get the list of include path.
virtual TString SplitAclicMode(const char *filename, TString &mode, TString &args, TString &io) const
This method split a filename of the form:
virtual int mkdir(const char *name, Bool_t recursive=kFALSE)
Make a file system directory.
virtual Int_t Exec(const char *shellcmd)
Execute a command.
virtual void SetIncludePath(const char *includePath)
IncludePath should contain the list of compiler flags to indicate where to find user defined header f...
virtual FILE * OpenPipe(const char *command, const char *mode)
Open a pipe.
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.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
virtual FILE * TempFileName(TString &base, const char *dir=0)
Create a secure temporary file by appending a unique 6 letter string to base.
virtual int ClosePipe(FILE *pipe)
Close the pipe.
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
virtual void AddSignalHandler(TSignalHandler *sh)
Add a signal handler to list of system signal handlers.
virtual const char * GetDynamicPath()
Return the dynamic path (used to find shared libraries).
virtual TString GetFromPipe(const char *command)
Execute command and return output in TString.
virtual const char * HostName()
Return the system's host name.
virtual void Unsetenv(const char *name)
Unset environment variable.
virtual Bool_t IsAbsoluteFileName(const char *dir)
Return true if dir is an absolute pathname.
virtual void SetDynamicPath(const char *pathname)
Set the dynamic path to a new value.
virtual const char * WorkingDirectory()
Return working directory.
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
virtual TInetAddress GetHostByName(const char *server)
Get Internet Protocol (IP) address of host.
virtual TSignalHandler * RemoveSignalHandler(TSignalHandler *sh)
Remove a signal handler from list of signal handlers.
virtual void Setenv(const char *name, const char *value)
Set environment variable.
virtual const char * GetBuildArch() const
Return the build architecture.
virtual int Unlink(const char *name)
Unlink, i.e.
virtual UserGroup_t * GetUserInfo(Int_t uid)
Returns all user info in the UserGroup_t structure.
virtual Int_t RedirectOutput(const char *name, const char *mode="a", RedirectHandle_t *h=0)
Redirect standard output (stdout, stderr) to the specified file.
virtual const char * TempDirectory() const
Return a user configured or systemwide directory to create temporary files in.
A TTree represents a columnar dataset.
virtual Long64_t GetMaxEntryLoop() const
This class represents a RFC 3986 compatible URI.
Bool_t SetFragment(const TString &fragment)
Set fragment component of URI:
const TString GetUri() const
Returns the whole URI - an implementation of chapter 5.3 component recomposition.
This class represents a WWW compatible URL.
const char * GetUrl(Bool_t withDeflt=kFALSE) const
Return full URL.
const char * GetFile() const
void SetUser(const char *user)
void SetProtocol(const char *proto, Bool_t setDefaultPort=kFALSE)
Set protocol and, optionally, change the port accordingly.
const char * GetUser() const
const char * GetHost() const
void SetOptions(const char *opt)
const char * GetHostFQDN() const
Return fully qualified domain name of url host.
const char * GetOptions() const
void SetHost(const char *host)
const char * GetProtocol() const
void SetPasswd(const char *pw)
The packetizer is a load balancing object created for each query.
virtual Int_t AddProcessed(TSlave *, TProofProgressStatus *, Double_t, TList **)
virtual void MarkBad(TSlave *, TProofProgressStatus *, TList **)
Abstract interface for the PROOF player.
virtual TDSetElement * GetNextPacket(TSlave *slave, TMessage *r)=0
virtual void AddEventsProcessed(Long64_t ev)=0
virtual void AddInput(TObject *inp)=0
virtual TQueryResult * GetCurrentQuery() const =0
virtual void AddOutput(TList *out)=0
virtual TList * GetInputList() const =0
virtual TObject * GetOutput(const char *name) const =0
virtual void SetDrawFeedbackOption(TDrawFeedback *f, Option_t *opt)=0
virtual void SetMaxDrawQueries(Int_t max)=0
virtual Long64_t GetEventsProcessed() const =0
virtual Long64_t DrawSelect(TDSet *set, const char *varexp, const char *selection, Option_t *option="", Long64_t nentries=-1, Long64_t firstentry=0)=0
virtual TQueryResult * GetQueryResult(const char *ref)=0
virtual void SetMerging(Bool_t on=kTRUE)=0
virtual EExitStatus GetExitStatus() const =0
virtual void Progress(Long64_t total, Long64_t processed)=0
virtual void AddQueryResult(TQueryResult *q)=0
static TVirtualProofPlayer * Create(const char *player, TProof *p, TSocket *s=0)
Create a PROOF player.
virtual void UpdateAutoBin(const char *name, Double_t &xmin, Double_t &xmax, Double_t &ymin, Double_t &ymax, Double_t &zmin, Double_t &zmax)=0
virtual Int_t AddOutputObject(TObject *obj)=0
virtual Bool_t JoinProcess(TList *workers)=0
virtual TList * GetListOfResults() const =0
virtual void ClearInput()=0
virtual void HandleRecvHisto(TMessage *mess)=0
virtual void RemoveQueryResult(const char *ref)=0
virtual void StopProcess(Bool_t abort, Int_t timeout=-1)=0
virtual Long64_t Finalize(Bool_t force=kFALSE, Bool_t sync=kFALSE)=0
virtual Long64_t Process(TDSet *set, const char *selector, Option_t *option="", Long64_t nentries=-1, Long64_t firstentry=0)=0
virtual void StoreFeedback(TObject *slave, TList *out)=0
virtual TDrawFeedback * CreateDrawFeedback(TProof *p)=0
virtual TVirtualPacketizer * GetPacketizer() const
virtual void DeleteDrawFeedback(TDrawFeedback *f)=0
virtual TList * GetOutputList() const =0
virtual void SetInitTime()=0
virtual void SetCurrentQuery(TQueryResult *q)=0
static constexpr double nm
static constexpr double s
static constexpr double pi
static constexpr double pc
Int_t Nint(T x)
Round to nearest integer. Rounds half integers to the nearest even integer.
Double_t Sqrt(Double_t x)