22#include "RConfigure.h" 
   48#if (defined(__FreeBSD__) && (__FreeBSD__ < 4)) || \ 
   49    (defined(__APPLE__) && (!defined(MAC_OS_X_VERSION_10_3) || \ 
   50     (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_3))) 
   52#define lockf(fd, op, sz)   flock((fd), (op)) 
   54#define F_LOCK             (LOCK_EX | LOCK_NB) 
   57#define F_ULOCK             LOCK_UN 
   88#include "compiledata.h" 
  131static const char *__crashreporter_info__ = 0;
 
  132asm(
".desc ___crashreporter_info__, 0x10");
 
  168Bool_t TProofServTerminationHandler::Notify()
 
  170   Printf(
"Received SIGTERM: terminating");
 
  171   fServ->HandleTermination();
 
  189Bool_t TProofServInterruptHandler::Notify()
 
  191   fServ->HandleUrgentData();
 
  212Bool_t TProofServSigPipeHandler::Notify()
 
  214   fServ->HandleSigPipe();
 
  233Bool_t TProofServInputHandler::Notify()
 
  235   fServ->HandleSocketInput();
 
  262         Error(
"TProofServLogHandler", 
"executing command in pipe");
 
  266      Error(
"TProofServLogHandler",
 
  267            "undefined command (%p) or socket (%p)", (
int *)cmd, 
s);
 
  285      Error(
"TProofServLogHandler", 
"undefined file (%p) or socket (%p)", 
f, 
s);
 
  298      fgCmdRtn = WIFEXITED(rc) ? WEXITSTATUS(rc) : -1;
 
  316         if ((plf = strchr(
line, 
'\n')))
 
  320         if (
fPfx.Length() > 0) {
 
  323         } 
else if (
fgPfx.Length() > 0) {
 
  358                                                     const char *pfx, 
Bool_t on)
 
  366         Error(
"TProofServLogHandlerGuard",
"invalid handler");
 
  370         Error(
"TProofServLogHandlerGuard",
"undefined command");
 
  378                                                     const char *pfx, 
Bool_t on)
 
  386         Error(
"TProofServLogHandlerGuard",
"invalid handler");
 
  390         Error(
"TProofServLogHandlerGuard",
"undefined file");
 
  424      printf(
"TShutdownTimer::Notify: checking activity on the input socket\n");
 
  434         printf(
"TShutdownTimer::Notify: input socket: %p: did not show any activity" 
  435                         " during the last %d mins: aborting\n", xs, 
fTimeout);
 
  441            printf(
"TShutdownTimer::Notify: input socket: %p: show activity" 
  442                   " %ld secs ago\n", xs, dt / 60000);
 
  472      spid.Form(
"%d", pid);
 
  492            pid = waitpid(p->
GetVal(), &status, WNOHANG);
 
  493         } 
while (pid < 0 && errno == EINTR);
 
  496         pid = _cwait(&status, (intptr_t)p->
GetVal(), 0);
 
  498         if (pid > 0 && pid == p->
GetVal()) {
 
  522   Info (
"Notify", 
"session idle for more then %lld secs: terminating", 
Long64_t(
fTime)/1000);
 
  528         Warning(
"Notify", 
"problems updating session status (errno: %d)", -uss_rc);
 
  532         msg.Form(
"\n//\n// PROOF session at %s (%s) terminated because idle for more than %lld secs\n" 
  533                  "// Please IGNORE any error message possibly displayed below\n//",
 
  536         msg.Form(
"\n//\n// PROOF session at %s (%s) terminated because idle for more than %lld secs\n//",
 
  544      Warning(
"Notify", 
"fProofServ undefined!");
 
  571      Printf(
"proofserv: command line testing: OK");
 
  583   if (fgVirtMemMax < 0 && gSystem->Getenv(
"PROOF_VIRTMEMMAX")) {
 
  585      if (mmx < kMaxLong && mmx > 0)
 
  589   if (fgVirtMemMax < 0 && gSystem->Getenv(
"ROOTPROOFASHARD")) {
 
  591      if (mmx < kMaxLong && mmx > 0)
 
  596   if (fgResMemMax < 0 && gSystem->Getenv(
"PROOF_RESMEMMAX")) {
 
  598      if (mmx < kMaxLong && mmx > 0)
 
  606         Warning(
"TProofServ", 
"requested memory fraction threshold to stop processing" 
  607                               " (MemStop) out of range [0,1] - ignoring");
 
  611         Warning(
"TProofServ", 
"requested memory fraction threshold for warning and finer monitoring" 
  612                               " (MemHWM) out of range [0,MemStop] - ignoring");
 
  626   if (argc && *argc >= 4)
 
  627      if (!strcmp(argv[3], 
"test"))
 
  631   if (argc && *argc < 2) {
 
  632      Error(
"TProofServ", 
"Must have at least 1 arguments (see  proofd).");
 
  719   TString logmx = 
gEnv->
GetValue(
"ProofServ.LogFileMaxSize", 
"");
 
  720   if (!logmx.IsNull()) {
 
  722      if (!logmx.IsDigit()) {
 
  723         if (logmx.EndsWith(
"K")) {
 
  726         } 
else if (logmx.EndsWith(
"M")) {
 
  729         } 
if (logmx.EndsWith(
"G")) {
 
  734      if (logmx.IsDigit()) {
 
  740         Warning(
"TProofServ", 
"bad formatted log file size limit ignored: '%s'", logmx.Data());
 
  755   TString slog = 
gEnv->
GetValue(
"ProofServ.LogToSysLog", 
"");
 
  756   if (!(slog.IsNull())) {
 
  757      if (slog.IsDigit()) {
 
  760         char c = (slog[0] == 
'M' || slog[0] == 
'm') ? 
'm' : 
'a';
 
  761         c = (slog[0] == 
'W' || slog[0] == 
'w') ? 
'w' : 
c;
 
  768               Warning(
"TProofServ", 
"request for syslog logging ineffective!");
 
  783   if (enableSchemaEvolution) {
 
  786      Info(
"TProofServ", 
"automatic schema evolution in TMessage explicitly disabled");
 
  799   if (opensock.Length() <= 0)
 
  801   Int_t sock = opensock.Atoi();
 
  803      Fatal(
"CreateServer", 
"Invalid socket descriptor number (%d)", sock);
 
  827      Info(
"CreateServer", 
"Service %s ConfDir %s IsMaster %d\n",
 
  841   TString pfx = (
IsMaster() ? 
"Mst-" : 
"Wrk-");
 
  914      TString master = 
"proof://__master__";
 
  918         master += 
a.GetPort();
 
  924         Error(
"CreateServer", 
"no plugin manager found");
 
  933         Error(
"CreateServer", 
"no plugin found for TProof with a" 
  934                             " config file of '%s'", 
fConfFile.Data());
 
  941      if (
h->LoadPlugin() == -1) {
 
  942         Error(
"CreateServer", 
"plugin for TProof could not be loaded");
 
  949      fProof = 
reinterpret_cast<TProof*
>(
h->ExecPlugin(5, master.Data(),
 
  954         Error(
"CreateServer", 
"plugin for TProof could not be executed");
 
  977      msg.Form(
"Warning: client version is too old: automatic schema evolution is ineffective.\n" 
  978               "         This may generate compatibility problems between streamed objects.\n" 
  979               "         The advise is to move to ROOT >= 5.21/02 .");
 
  991            Info(
"CreateServer", 
" idle timer started (%d secs)", idle_to);
 
  993         Info(
"CreateServer", 
" idle timer not started (no idle timeout requested)");
 
 1037      motdname += 
"/etc/proof/noproof";
 
 1039   if ((motd = fopen(motdname, 
"r"))) {
 
 1042      while ((
c = getc(motd)) != EOF)
 
 1051   lastname = TString(
GetWorkDir()) + 
"/.prooflast";
 
 1054   Long_t id, flags, modtime, lasttime = 0;
 
 1059   if (time(0) - lasttime > (time_t)86400)
 
 1068      motdname += 
"/etc/proof/motd";
 
 1071      if (modtime > lasttime || show) {
 
 1072         if ((motd = fopen(motdname, 
"r"))) {
 
 1075            while ((
c = getc(motd)) != EOF)
 
 1085   Int_t fd = creat(last, 0600);
 
 1086   if (fd >= 0) 
close(fd);
 
 1100      Error(
"Get", 
"problems sending request");
 
 1118            Error(
"Get", 
"command %d cannot be executed while processing", what);
 
 1119         } 
else if (xrc == -2) {
 
 1120            Error(
"Get", 
"unknown command %d ! Protocol error?", what);
 
 1138      Info(
"RestartComputeTime", 
"compute time restarted after %f secs (%d entries)",
 
 1167         Error(
"GetNextPacket", 
"no progress status object");
 
 1184      req << cacheSize << learnent;
 
 1189      req << totalEntries;
 
 1196         Info(
"GetNextPacket",
"cacheSize: %lld, learnent: %d", cacheSize, learnent);
 
 1204          << bytesRead << totalEntries;
 
 1212      Error(
"GetNextPacket",
"Send() failed, returned %d", rc);
 
 1220         Warning(
"GetNextPacket", 
"problems saving partial results");
 
 1231         Error(
"GetNextPacket",
"Recv() failed, returned %d", rc);
 
 1236      TString 
file, dir, obj;
 
 1247               PDB(kLoop, 2) 
Info(
"GetNextPacket", 
"'%s' '%s' '%s' %lld %lld",
 
 1248                                 e->GetFileName(), 
e->GetDirectory(),
 
 1249                                 e->GetObjName(), 
e->GetFirst(),
e->GetNum());
 
 1251               PDB(kLoop, 2) 
Info(
"GetNextPacket", 
"Done");
 
 1261            PDB(kLoop, 2) 
Info(
"GetNextPacket:kPROOF_STOPPROCESS",
"received");
 
 1267               Error(
"GetNextPacket", 
"command %d cannot be executed while processing", what);
 
 1268            } 
else if (xrc == -2) {
 
 1269               Error(
"GetNextPacket", 
"unknown command %d ! Protocol error?", what);
 
 1288   Bool_t xtest = (argc && *argc > 3 && !strcmp(argv[3], 
"test")) ? 
kTRUE : 
kFALSE;
 
 1291   if (xtest && !(isatty(0) == 0 || isatty(1) == 0)) {
 
 1292      Printf(
"proofserv: command line testing: OK");
 
 1296   if (!argc || (argc && *argc <= 1)) {
 
 1297      Fatal(
"GetOptions", 
"Must be started from proofd with arguments");
 
 1301   if (!strcmp(argv[1], 
"proofserv")) {
 
 1304   } 
else if (!strcmp(argv[1], 
"proofslave")) {
 
 1308      Fatal(
"GetOptions", 
"Must be started as 'proofserv' or 'proofslave'");
 
 1316      Fatal(
"GetOptions", 
"ROOTCONFDIR shell variable not set");
 
 1347         Error(
"HandleSocketInput", 
"retrieving message from input socket");
 
 1368               emsg.Form(
"HandleSocketInput: command %d cannot be executed while processing", what);
 
 1369            } 
else if (rc == -3) {
 
 1370               emsg.Form(
"HandleSocketInput: message %d undefined! Protocol error?", what);
 
 1372               emsg.Form(
"HandleSocketInput: unknown command %d! Protocol error?", what);
 
 1375         } 
else if (rc == 2) {
 
 1379               Info(
"HandleSocketInput", 
"message of type %d enqueued; sz: %d",
 
 1389               Info(
"HandleSocketInput", 
"processing enqueued message of type %d; left: %d",
 
 1399   } 
catch (std::bad_alloc &) {
 
 1401      exmsg.Form(
"caught exception 'bad_alloc' (memory leak?) %s %lld",
 
 1403   } 
catch (std::exception &exc) {
 
 1405      exmsg.Form(
"caught standard exception '%s' %s %lld",
 
 1409      exmsg.Form(
"caught exception throwing %d %s %lld",
 
 1411   } 
catch (
const char *str) {
 
 1413      exmsg.Form(
"caught exception throwing '%s' %s %lld",
 
 1417      exmsg.Form(
"caught exception <unknown> %s %lld",
 
 1422   if (!exmsg.IsNull()) {
 
 1424      Error(
"HandleSocketInput", 
"%s", exmsg.Data());
 
 1435      exmsg.Form(
"high-memory footprint detected during Process(...) - terminating");
 
 1436      Error(
"HandleSocketInput", 
"%s", exmsg.Data());
 
 1451      if (rc == 0 && ngwrks == 0 && !masterOnly && !dynamicStartup) {
 
 1452         SendAsynMessage(
" *** No workers left: cannot continue! Terminating ... *** ");
 
 1479   if (!mess) 
return -3;
 
 1483      Info(
"HandleSocketInput", 
"processing message type %d from '%s'",
 
 1488   Int_t rc = 0, lirc = 0;
 
 1506                  Info(
"HandleSocketInput:kMESS_CINT", 
"processing: %s...", str);
 
 1525         if (pslb) slb = str;
 
 1557            sscanf(str, 
"%d %u", &
fLogLevel, &mask);
 
 1562               Info(
"HandleSocketInput:kPROOF_LOGLEVEL", 
"debug level set to %d (mask: 0x%x)",
 
 1593         Warning(
"HandleSocketInput:kPROOF_STATUS",
 
 1594               "kPROOF_STATUS message is obsolete");
 
 1596            Warning(
"HandleSocketInput:kPROOF_STATUS", 
"problem sending of request");
 
 1613                  Info(
"HandleSocketInput:kPROOF_STOP", 
"request for worker %s", ord.Data());
 
 1617                  Info(
"HandleSocketInput:kPROOF_STOP", 
"got request to terminate");
 
 1630            PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_STOPPROCESS",
"enter");
 
 1637               Info(
"HandleSocketInput:kPROOF_STOPPROCESS",
 
 1638                    "recursive mode: enter %d, %ld", aborted, timeout);
 
 1652            PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_PROCESS",
"enter");
 
 1662            PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_SENDOUTPUT",
 
 1663                                 "worker was asked to send output to master");
 
 1666               Error(
"HandleSocketInput:kPROOF_SENDOUTPUT", 
"problems sending output list");
 
 1711               Info(
"HandleSocketInput:kPROOF_MAXQUERIES", 
"Enter");
 
 1723               Info(
"HandleSocketInput:kPROOF_CLEANUPSESSION", 
"Enter");
 
 1727               Printf(
"Session %s cleaned up", stag.Data());
 
 1729               Printf(
"Could not cleanup session %s", stag.Data());
 
 1739         {  
PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_GETENTRIES", 
"Enter");
 
 1743            TString        objname(
"undef");
 
 1747               (*mess) >> isTree >> filename >> dir >> objname;
 
 1748               PDB(kGlobal, 2) 
Info(
"HandleSocketInput:kPROOF_GETENTRIES",
 
 1749                                    "Report size of object %s (%s) in dir %s in file %s",
 
 1750                                    objname.Data(), isTree ? 
"T" : 
"O",
 
 1751                                    dir.Data(), filename.Data());
 
 1753               PDB(kGlobal, 2) 
Info(
"HandleSocketInput:kPROOF_GETENTRIES",
 
 1754                                    "Found %lld %s", entries, isTree ? 
"entries" : 
"objects");
 
 1759            answ << entries << objname;
 
 1762            PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_GETENTRIES", 
"Done");
 
 1787               sscanf(str, 
"%1023s %d %ld %d", 
name, &bin, &size, &fw);
 
 1789               sscanf(str, 
"%1023s %d %ld", 
name, &bin, &size);
 
 1793            if (fnam.BeginsWith(
"cache:")) {
 
 1803               if (!fnam.BeginsWith(
fCacheDir.Data())) {
 
 1816                     Info(
"HandleSocketInput",
"forwarding file: %s", fnam.Data());
 
 1817                  if (
fProof->
SendFile(fnam, opt, (copytocache ? 
"cache" : 
"")) < 0) {
 
 1818                     Error(
"HandleSocketInput", 
"forwarding file: %s", fnam.Data());
 
 1832            (*mess) >> start >> end;
 
 1834               Info(
"HandleSocketInput:kPROOF_LOGFILE",
 
 1835                    "Logfile request - byte range: %d - %d", start, end);
 
 1866            PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_CACHE",
"enter");
 
 1879                  Warning(
"HandleSocketInput:kPROOF_WORKERLISTS",
 
 1880                        "Action meaning-less on worker nodes: protocol error?");
 
 1891            PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_GETSLAVEINFO", 
"Enter");
 
 1904                        Error(
"HandleSocketInput:kPROOF_GETSLAVEINFO",
 
 1905                              "adding a list of worker nodes returned: %d", ret);
 
 1908                     Error(
"HandleSocketInput:kPROOF_GETSLAVEINFO",
 
 1909                           "getting list of worker nodes returned: %d", retVal);
 
 1929               answ << (
TList *)info;
 
 1935            PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_GETSLAVEINFO", 
"Done");
 
 1946            PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_GETTREEHEADER", 
"Enter");
 
 1953               Error(
"HandleSocketInput:kPROOF_GETTREEHEADER", 
"could not create TProofPlayer instance!");
 
 1956            PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_GETTREEHEADER", 
"Done");
 
 1959            answ << TString(
"Failed") << (
TObject *)0;
 
 1966         {  
PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_GETOUTPUTLIST", 
"Enter");
 
 1967            TList* outputList = 0;
 
 1971                  outputList = 
new TList();
 
 1973               outputList = 
new TList();
 
 1978                  while ( (o = next()) ) {
 
 1988            PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_GETOUTPUTLIST", 
"Done");
 
 1995               Info(
"HandleSocketInput:kPROOF_VALIDATE_DSET", 
"Enter");
 
 2008               Info(
"HandleSocketInput:kPROOF_VALIDATE_DSET", 
"Done");
 
 2018            PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_DATA_READY", 
"Enter");
 
 2021               Long64_t totalbytes = 0, bytesready = 0;
 
 2023               answ << dataready << totalbytes << bytesready;
 
 2025               Error(
"HandleSocketInput:kPROOF_DATA_READY",
 
 2026                     "This message should not be sent to slaves");
 
 2030            PDB(kGlobal, 1) 
Info(
"HandleSocketInput:kPROOF_DATA_READY", 
"Done");
 
 2046               Error(
"HandleSocketInput", 
"old client: no or incompatible dataset support");
 
 2071               Info(
"HandleSocketInput:kPROOF_REALTIMELOG",
 
 2072                    "setting real-time logging %s", (on ? 
"ON" : 
"OFF"));
 
 2095               Error(
"HandleSocketInput", 
"no queries enqueued");
 
 2108                  Error(
"HandleSocketInput", 
"adding a list of worker nodes returned: %d", ret);
 
 2121                  Error(
"HandleSocketInput", 
"error getting list of worker nodes");
 
 2123                  Warning(
"HandleSocketInput", 
"query was re-queued!");
 
 2125                  Error(
"HandleSocketInput", 
"unexpected answer: %d", retVal);
 
 2146                               " idle or undefined player - ignoring");
 
 2172               smsg.Form(
"Echo response from %s:%s: %s",
 
 2180               TString tmpfn = 
"echo-out-";
 
 2183                  Error(
"HandleSocketInput", 
"Can't redirect output");
 
 2198               smsg.Form(
"*** Echo response from %s:%s ***\n",
 
 2205                  smsg.Append( 
line->String() );
 
 2221         Error(
"HandleSocketInput", 
"unknown command %d", what);
 
 2246   Int_t mergedWorkers = 0;
 
 2248   PDB(kSubmerger, 1)  
Info(
"AcceptResults", 
"enter");
 
 2256   Int_t numworkers = 0;
 
 2261         Info(
"AcceptResults", 
"interrupt!");
 
 2269         if (sw && sw != (
TSocket *)(-1)) {
 
 2273               Info(
"AcceptResults", 
"connection from a worker accepted on merger %s ",
 
 2276            if (++numworkers >= connections)
 
 2280               Info(
"AcceptResults", 
"spurious signal found of merging socket");
 
 2283         if (
s->Recv(mess) < 0) {
 
 2284            Error(
"AcceptResults", 
"problems receiving message");
 
 2288            Info(
"AcceptResults", 
"message received: %d ", (mess ? mess->
What() : 0));
 
 2290            Error(
"AcceptResults", 
"message received: %p ", mess);
 
 2299            PDB(kSubmerger, 2) 
Info(
"AcceptResults", 
" type %d ", 
type);
 
 2303                  Info(
"AcceptResults",
 
 2304                       "a new worker has been mergerd. Total merged workers: %d",
 
 2310               PDB(kSubmerger, 2)  
Info(
"AcceptResults", 
"removing %p (has been merged)", o);
 
 2313               PDB(kSubmerger, 2) 
Info(
"AcceptResults", 
"%p not merged yet", o);
 
 2321   for (
Int_t i =0; i< size; ++i){
 
 2323      PDB(kSubmerger, 2) 
Info(
"AcceptResults", 
"closing socket");
 
 2330   PDB(kSubmerger, 2) 
Info(
"AcceptResults", 
"exit: %d", result);
 
 2340   Int_t n, nch, wasted = 0;
 
 2342   const Int_t kBufSize = 1024;
 
 2343   char waste[kBufSize];
 
 2349      Info(
"HandleUrgentData", 
"handling oob...");
 
 2370         if (nch > kBufSize) nch = kBufSize;
 
 2373            Error(
"HandleUrgentData", 
"error receiving waste");
 
 2378         Error(
"HandleUrgentData", 
"error receiving OOB");
 
 2384      Info(
"HandleUrgentData", 
"got OOB byte: %d\n", oob_byte);
 
 2391         Info(
"HandleUrgentData", 
"*** Hard Interrupt");
 
 2408                  Error(
"HandleUrgentData", 
"error sending OOB");
 
 2419            if (nch > kBufSize) nch = kBufSize;
 
 2422               Error(
"HandleUrgentData", 
"error receiving waste (2)");
 
 2432         Info(
"HandleUrgentData", 
"Soft Interrupt");
 
 2439            Error(
"HandleUrgentData", 
"soft interrupt flushed stream");
 
 2450         Info(
"HandleUrgentData", 
"Shutdown Interrupt");
 
 2461         Error(
"HandleUrgentData", 
"unexpected OOB byte");
 
 2481         Info(
"HandleSigPipe", 
"keepAlive probe failed");
 
 2490      Info(
"HandleSigPipe", 
"keepAlive probe failed");
 
 2526   TString sdir = (dir && strlen(dir) > 0) ? dir : 
fSessionDir.Data();
 
 2533   if ((freopen(logfile, mode, stdout)) == 0)
 
 2534      SysError(
"RedirectOutput", 
"could not freopen stdout (%s)", logfile);
 
 2536   if ((dup2(fileno(stdout), fileno(stderr))) < 0)
 
 2537      SysError(
"RedirectOutput", 
"could not redirect stderr");
 
 2539   if ((
fLogFile = fopen(logfile, 
"r")) == 0)
 
 2540      SysError(
"RedirectOutput", 
"could not open logfile '%s'", logfile);
 
 2544      Warning(
"RedirectOutput", 
"no way to tell master (or client) where" 
 2545              " to upload packages");
 
 2557   if (!dd.BeginsWith(
"proofserv")) {
 
 2558      Int_t ic = dd.Index(
":");
 
 2560         dd.Replace(0, ic, 
"proofserv");
 
 2584   if (size <= 0) 
return 0;
 
 2589      SysError(
"ReceiveFile", 
"error opening file %s", 
file);
 
 2593   const Int_t kMAXBUF = 16384;  
 
 2594   char buf[kMAXBUF], cpy[kMAXBUF];
 
 2599   while (filesize < size) {
 
 2600      left = 
Int_t(size - filesize);
 
 2612               Int_t k = 0, i = 0, j = 0;
 
 2619                  cpy[j++] = buf[i++];
 
 2623               w = write(fd, 
q, 
r);
 
 2625               w = write(fd, p, 
r);
 
 2629               SysError(
"ReceiveFile", 
"error writing to file %s", 
file);
 
 2637         Error(
"ReceiveFile", 
"error during receiving file %s", 
file);
 
 2645   if (chmod(
file, 0644) != 0)
 
 2646      Warning(
"ReceiveFile", 
"error setting mode 0644 on file %s", 
file);
 
 2685   off_t ltot=0, lnow=0;
 
 2690      ltot = lseek(fileno(stdout),   (off_t) 0, SEEK_END);
 
 2693      if (ltot >= 0 && lnow >= 0) {
 
 2696            if (end <= start || end > ltot)
 
 2698            left = (
Int_t)(end - start);
 
 2703            left = (
Int_t)(ltot - lnow);
 
 2710         SysError(
"SendLogFile", 
"error sending kPROOF_LOGFILE");
 
 2714      const Int_t kMAXBUF = 32768;  
 
 2716      Int_t wanted = (left > kMAXBUF) ? kMAXBUF : left;
 
 2719         while ((len = read(
fLogFileDes, buf, wanted)) < 0 &&
 
 2724            SysError(
"SendLogFile", 
"error reading log file");
 
 2728         if (end == ltot && len == wanted)
 
 2732            SysError(
"SendLogFile", 
"error sending log file");
 
 2738         wanted = (left > kMAXBUF) ? kMAXBUF : left;
 
 2740      } 
while (len > 0 && left > 0);
 
 2744   if (adhoc && lnow >=0 )
 
 2751      mess << status << (
Int_t) 1;
 
 2754      SysError(
"SendLogFile", 
"error sending kPROOF_LOGDONE");
 
 2758   PDB(kGlobal, 1) 
Info(
"SendLogFile", 
"kPROOF_LOGDONE sent");
 
 2775   mess << bytesread << realtime << cputime << workdir;
 
 2786   Int_t nparallel = 0;
 
 2789         Info(
"SendParallel", 
"Will invoke AskParallel()");
 
 2792         Info(
"SendParallel", 
"Will invoke GetParallel()");
 
 2799   mess << nparallel << async;
 
 2818      Error(
"Setup", 
"failed to send proof server startup message");
 
 2826      Error(
"Setup", 
"failed to receive remote proof protocol");
 
 2830      Error(
"Setup", 
"failed to send local proof protocol");
 
 2838         Error(
"Setup", 
"OldAuthSetup: failed to setup authentication");
 
 2857         Error(
"Setup", 
"failed to receive ordinal and config info");
 
 2879      conffile.Remove(0, 1 + conffile.Index(
":"));
 
 2886            if (tmpWorkDir != 
"")
 
 2890         Info(
"Setup", 
"invalid config file %s (missing or unreadable",
 
 2916      Info(
"Setup", 
"working directory set to %s", 
fWorkDir.Data());
 
 2920   if (host.Index(
".") != 
kNPOS)
 
 2921      host.Remove(host.Index(
"."));
 
 2938      Error(
"Setup", 
"common setup failed");
 
 2970   TString paths = 
gEnv->
GetValue(
"ProofServ.BinPaths", 
"");
 
 2971   if (paths.Length() > 0) {
 
 2973      if (paths.Contains(
"^<compiler>"))
 
 2975      else if (paths.Contains(
"<compiler>"))
 
 2979         TString compiler = COMPILER;
 
 2980         if (compiler.Index(
"is ") != 
kNPOS)
 
 2981            compiler.Remove(0, compiler.Index(
"is ") + 3);
 
 2984            if (!bindir.IsNull()) bindir += 
":";
 
 2986         } 
else if (icomp == -1) {
 
 2987            if (!path.IsNull()) path += 
":";
 
 2993      if (paths.Contains(
"^<sysbin>"))
 
 2995      else if (paths.Contains(
"<sysbin>"))
 
 2999            if (!bindir.IsNull()) bindir += 
":";
 
 3000            bindir += 
"/bin:/usr/bin:/usr/local/bin";
 
 3001         } 
else if (isysb == -1) {
 
 3002            if (!path.IsNull()) path += 
":";
 
 3003            path += 
"/bin:/usr/bin:/usr/local/bin";
 
 3008   if (!bindir.IsNull()) bindir += 
":";
 
 3009   path.Insert(0, bindir);
 
 3016         Error(
"SetupCommon", 
"can not change to PROOF directory %s",
 
 3025            Error(
"SetupCommon", 
"can not change to PROOF directory %s",
 
 3042      Info(
"SetupCommon", 
"cache directory set to %s", 
fCacheDir.Data());
 
 3046                         TString(
fCacheDir).ReplaceAll(
"/",
"%").Data()));
 
 3051   TString packdir = 
gEnv->
GetValue(
"ProofServ.PackageDir",
 
 3060   const char *k = (
IsMaster()) ? 
"Mst" : 
"Wrk";
 
 3061   noth.Form(
"%s-%s", k, 
fOrdinal.Data());
 
 3064      Info(
"SetupCommon", 
"package directory set to %s", packdir.Data());
 
 3079         Warning(
"SetupCommon", 
"problems creating path '%s' (errno: %d)",
 
 3083      Info(
"SetupCommon", 
"data directory set to %s", 
fDataDir.Data());
 
 3087   TString dataDirOpts = 
gEnv->
GetValue(
"ProofServ.DataDirOpts",
"");
 
 3088   if (!dataDirOpts.IsNull()) {
 
 3091      if ((
IsMaster() && !dataDirOpts.Contains(
"M")) ||
 
 3096         if (dataDirOpts.Contains(
"g")) 
m = 0775;
 
 3097         if (dataDirOpts.Contains(
"a") || dataDirOpts.Contains(
"o")) 
m = 0777;
 
 3099            Info(
"SetupCommon", 
"requested mode for data directories is '%o'", 
m);
 
 3104         if (
fDataDir.BeginsWith(
"/")) p = 
"/";
 
 3105         while (
fDataDir.Tokenize(subp, from, 
"/")) {
 
 3106            if (subp.IsNull()) 
continue;
 
 3111                     Warning(
"SetupCommon", 
"problems setting mode '%o' on path '%s' (errno: %d)",
 
 3118               Warning(
"SetupCommon", 
"problems stat-ing path '%s' (errno: %d; datadir: %s)",
 
 3127   TString globpack = 
gEnv->
GetValue(
"Proof.GlobalPackageDirs",
"");
 
 3131   Info(
"SetupCommon", 
" %d global package directories registered", nglb);
 
 3140         Error(
"SetupCommon", 
"can not change to working directory '%s'",
 
 3169                       TString(
fQueryDir).ReplaceAll(
"/",
"%").Data()));
 
 3189      TString dsms = 
gEnv->
GetValue(
"Proof.DataSetManager", 
"");
 
 3190      if (!dsms.IsNull()) {
 
 3193         while (dsms.Tokenize(dsm, from, 
",")) {
 
 3195               Warning(
"SetupCommon", 
"a valid dataset manager already initialized");
 
 3196               Warning(
"SetupCommon", 
"support for multiple managers not yet available");
 
 3200            if (
gROOT->GetPluginManager()) {
 
 3202               h = 
gROOT->GetPluginManager()->FindHandler(
"TDataSetManager", dsm);
 
 3203               if (
h && 
h->LoadPlugin() != -1) {
 
 3207                                                            fUser.Data(), dsm.Data()));
 
 3213            Warning(
"SetupCommon", 
"dataset manager plug-in initialization failed");
 
 3214            SendAsynMessage(
"TXProofServ::SetupCommon: dataset manager plug-in initialization failed");
 
 3219         TString opts(
"Av:");
 
 3220         TString dsetdir = 
gEnv->
GetValue(
"ProofServ.DataSetDir", 
"");
 
 3221         if (dsetdir.IsNull()) {
 
 3230            h = 
gROOT->GetPluginManager()->FindHandler(
"TDataSetManager", 
"file");
 
 3231            if (
h && 
h->LoadPlugin() == -1) 
h = 0;
 
 3235            TString oo = 
TString::Format(
"dir:%s opt:%s", dsetdir.Data(), opts.Data());
 
 3240            Warning(
"SetupCommon", 
"default dataset manager plug-in initialization failed");
 
 3245      TString dsReqCfg = 
gEnv->
GetValue(
"Proof.DataSetStagingRequests", 
"");
 
 3246      if (!dsReqCfg.IsNull()) {
 
 3247         TPMERegexp reReqDir(
"(^| )(dir:)?([^ ]+)( |$)");
 
 3249         if (reReqDir.
Match(dsReqCfg) == 5) {
 
 3251            dsDirFmt.Form(
"dir:%s perms:open", reReqDir[3].Data());
 
 3257                  "failed init of dataset staging requests repository");
 
 3262              "specify, with [dir:]<path>, a valid path for staging requests");
 
 3265         Warning(
"SetupCommon", 
"no repository for staging requests available");
 
 3271   if (quotas.IsNull())
 
 3273   if (quotas.IsNull())
 
 3275   if (!quotas.IsNull()) {
 
 3279      while (quotas.Tokenize(tok, from, 
" ")) {
 
 3281         if (tok.BeginsWith(
"maxquerykept=")) {
 
 3282            tok.ReplaceAll(
"maxquerykept=",
"");
 
 3287                    "parsing 'maxquerykept' :ignoring token %s : not a digit", tok.Data());
 
 3290         const char *ksz[2] = {
"hwmsz=", 
"maxsz="};
 
 3291         for (
Int_t j = 0; j < 2; j++) {
 
 3292            if (tok.BeginsWith(ksz[j])) {
 
 3293               tok.ReplaceAll(ksz[j],
"");
 
 3295               if (!tok.IsDigit()) {
 
 3298                  const char *
s[3] = {
"k", 
"m", 
"g"};
 
 3299                  Int_t i = 0, ki = 1024;
 
 3301                     if (tok.EndsWith(
s[i++]))
 
 3306                  tok.Remove(tok.Length()-1);
 
 3308               if (tok.IsDigit()) {
 
 3310                     fHWMBoxSize = (fact > 0) ? tok.Atoi() * fact : tok.Atoi();
 
 3312                     fMaxBoxSize = (fact > 0) ? tok.Atoi() * fact : tok.Atoi();
 
 3314                  TString ssz(ksz[j], strlen(ksz[j])-1);
 
 3315                  Info(
"SetupCommon", 
"parsing '%s' : ignoring token %s", ssz.Data(), tok.Data());
 
 3325         Warning(
"SetupCommon", 
"problems applying fMaxQueries");
 
 3329      TString vac = 
gROOT->GetVersion();
 
 3331      TString rtag = 
gEnv->
GetValue(
"ProofServ.RootVersionTag", 
"");
 
 3332      if (rtag.Length() > 0)
 
 3344   while (all_vars.Tokenize(
name, from, 
",")) {
 
 3345      if (!
name.IsNull()) {
 
 3355      } 
else if (!(
fUser.IsNull()) && 
fGroup.IsNull()) {
 
 3357      } 
else if (
fUser.IsNull() && !(
fGroup.IsNull())) {
 
 3367      Info(
"SetupCommon", 
"successfully completed");
 
 3387      Info(
"Terminate", 
"process memory footprint: %ld/%ld kB virtual, %ld/%ld kB resident ",
 
 3421        Info(
"Terminate", 
"data directory '%s' has been removed", 
fDataDir.Data());
 
 3428   while ((fh = next())) {
 
 3429      TProofServInputHandler *ih = 
dynamic_cast<TProofServInputHandler *
>(fh);
 
 3446   if (!path || strlen(path) <= 0) 
return kFALSE;
 
 3452      const char *ent = 0;
 
 3454         if (!strcmp(ent, 
".") || !strcmp(ent, 
"..")) 
continue;
 
 3455         fpath.Form(
"%s/%s", path, ent);
 
 3472      Warning(
"UnlinkDataDir", 
"data directory '%s' is empty but could not be removed", path);
 
 3503   if (!oldAuthSetupHook) {
 
 3505      TString authlib = 
"libRootAuth";
 
 3511            Error(
"OldAuthSetup", 
"can't load %s",authlib.Data());
 
 3515         Error(
"OldAuthSetup", 
"can't locate %s",authlib.Data());
 
 3524         Error(
"OldAuthSetup", 
"can't find OldProofServAuthSetup");
 
 3540                                               TDSet *dset, 
const char *selec,
 
 3557                                                  fst, dset, selec, elist);
 
 3575   Int_t startlog = lseek(fileno(stdout), (off_t) 0, SEEK_END);
 
 3579   Info(
"SetQueryRunning", 
"starting query: %d", pq->
GetSeqNum());
 
 3582   TString parlist = 
"";
 
 3607      Info(
"HandleArchive", 
"Enter");
 
 3611   (*mess) >> queryref >> path;
 
 3613   if (slb) slb->Form(
"%s %s", queryref.Data(), path.Data());
 
 3616   if (queryref == 
"Default") {
 
 3618      Info(
"HandleArchive",
 
 3628   if (path.Length() <= 0) {
 
 3630         Info(
"HandleArchive",
 
 3631              "archive paths are not defined - do nothing");
 
 3635         path.Form(
"%s/session-%s-%d.root",
 
 3639         path.ReplaceAll(
":q",
"-");
 
 3646   if (!pqr || qry < 0) {
 
 3647      TString fout = qdir;
 
 3648      fout += 
"/query-result.root";
 
 3654         TIter nxk(
f->GetListOfKeys());
 
 3656         while ((k = (
TKey *)nxk())) {
 
 3666         Info(
"HandleArchive",
 
 3667              "file cannot be open (%s)",fout.Data());
 
 3674      PDB(kGlobal, 1) 
Info(
"HandleArchive",
 
 3675                           "archive path for query #%d: %s",
 
 3682      if (!farc || !(farc->IsOpen())) {
 
 3683         Info(
"HandleArchive",
 
 3684              "archive file cannot be open (%s)",path.Data());
 
 3698      if (qry > -1 && 
fQMgr)
 
 3702      Info(
"HandleArchive",
 
 3703           "results of query %s archived to file %s",
 
 3704           queryref.Data(), path.Data());
 
 3723      emsg.Form(
"file collection undefined!");
 
 3766      Info(
"HandleProcess", 
"Enter");
 
 3773   TString filename, opt;
 
 3780   (*mess) >> dset >> filename >> input >> opt >> 
nentries >> 
first >> evl >> sync;
 
 3791   if ((!hasNoData) && elist)
 
 3801                                 fPrefix.Data(), emsg.Data()));
 
 3802            Error(
"HandleProcess", 
"AssertDataSet: %s", emsg.Data());
 
 3807      } 
else if (hasNoData) {
 
 3812            if (!dsn.Contains(
":") || dsn.BeginsWith(
"dataset:")) {
 
 3813               dsn.ReplaceAll(
"dataset:", 
"");
 
 3817                  emsg.Form(
"dataset manager not initialized!");
 
 3822                     emsg.Form(
"requested dataset '%s' does not exists", dsn.Data());
 
 3829                        fcmap->
SetName(
"PROOF_FilesToProcess");
 
 3834               if (!emsg.IsNull()) {
 
 3836                                                  fPrefix.Data(), emsg.Data()));
 
 3837                  Error(
"HandleProcess", 
"%s", emsg.Data());
 
 3853      if (dset) input->
Add(dset);
 
 3854      if (elist) input->
Add(elist);
 
 3858      input->
Clear(
"nodelete");
 
 3863         Warning(
"HandleProcess", 
"could not save input data: %s", emsg.Data());
 
 3889            Error(
"HandleProcess", 
"error getting list of worker nodes");
 
 3896            Info(
"HandleProcess", 
"query %d enqueued", pq->
GetSeqNum());
 
 3898            Error(
"HandleProcess", 
"Adding a list of worker nodes returned: %d",
 
 3907            Error(
"HandleProcess", 
"error getting list of worker nodes");
 
 3914            Info(
"HandleProcess", 
"query %d enqueued", pq->
GetSeqNum());
 
 3916            Error(
"HandleProcess", 
"unknown return value: %d", retVal);
 
 3927      if (!sync || enqueued) {
 
 3935         Info(
"HandleProcess",
 
 4002         Warning(
"HandleProcess", 
"could not get input data: %s", emsg.Data());
 
 4006         Warning(
"HandleProcess", 
"could not get query sequential number!");
 
 4010      while ((nord = input->
FindObject(
"PROOF_Ordinal")))
 
 4017      while ((o = next())) {
 
 4018         PDB(kGlobal, 2) 
Info(
"HandleProcess", 
"adding: %s", o->
GetName());
 
 4026      while ((obj = nxt())){
 
 4030            Info(
"HandleProcess", 
"selector obj for '%s' found", selector_obj->
ClassName());
 
 4046         Info(
"HandleProcess", 
"calling fPlayer->Process() with selector object: %s", selector_obj->
ClassName());
 
 4050         Info(
"HandleProcess", 
"calling fPlayer->Process() with selector name: %s", filename.Data());
 
 4062            m << status << abort;
 
 4075         Info(
"TProofServ::Handleprocess",
 
 4076              "worker %s has finished processing with %d objects in output list",
 
 4096         if (!isSubMerging) {
 
 4116               Info(
"HandleProcess", 
"controlled mode: worker %s has finished," 
 4117                                     " sizes sent to master", 
fOrdinal.Data());
 
 4123                  Info(
"HandleProcess", 
"submerging disabled because of high-memory case");
 
 4126               PDB(kGlobal, 2) 
Info(
"HandleProcess", 
"merging mode check: %d", isSubMerging);
 
 4142               Int_t merge_port = 0;
 
 4145                     Info(
"HandleProcess", 
"possible port for merging connections: %d",
 
 4149               msg_osize << merge_port;
 
 4158               PDB(kSubmerger, 2) 
Info(
"HandleProcess", 
"worker %s has finished", 
fOrdinal.Data());
 
 4163               PDB(kGlobal, 2)  
Info(
"HandleProcess", 
"sending result directly to master");
 
 4165                  Warning(
"HandleProcess",
"problems sending output list");
 
 4187            Warning(
"HandleProcess",
"the output list is empty!");
 
 4189            Warning(
"HandleProcess", 
"problems sending output list");
 
 4206      while ((obj = nex())) {
 
 4218            TFile *
f = 
dynamic_cast<TFile *
>(added->
Last());
 
 4222               while ((o = nxo())) { input->
Remove(o); }
 
 4239   PDB(kGlobal, 1) 
Info(
"HandleProcess", 
"done");
 
 4250   PDB(kOutput, 2) 
Info(
"SendResults", 
"enter");
 
 4261         msg.Form(
"%s: merging output objects ... done                                     ",
 
 4265         msg.Form(
"%s: objects merged; sending output: %d objs", 
fPrefix.Data(), olsz);
 
 4270         if (sock->
Send(mbuf) < 0) 
return -1;
 
 4276      Int_t totsz = 0, objsz = 0;
 
 4278      while ((o = nxo())) {
 
 4282                    "message has %d bytes: limit of %lld bytes reached - sending ...",
 
 4295               msg.Form(
"%s: objects merged; sending obj %d/%d (%d bytes)   ",
 
 4299            if (sock->
Send(mbuf) < 0) 
return -1;
 
 4306         mbuf << (
Int_t) ((
ns >= olsz) ? 2 : 1);
 
 4321            msg.Form(
"%s: objects merged; sending obj %d/%d (%d bytes)     ",
 
 4325         if (sock->
Send(mbuf) < 0) 
return -1;
 
 4329         msg.Form(
"%s: grand total: sent %d objects, size: %d bytes                            ",
 
 4341         msg.Form(
"%s: merging output objects ... done                                     ",
 
 4345         msg.Form(
"%s: objects merged; sending output: %d objs", 
fPrefix.Data(), olsz);
 
 4350         if (sock->
Send(mbuf) < 0) 
return -1;
 
 4354      Int_t totsz = 0, objsz = 0;
 
 4357      while ((o = nxo())) {
 
 4374            msg.Form(
"%s: objects merged; sending obj %d/%d (%d bytes)   ",
 
 4378         if (sock->
Send(mbuf) < 0) 
return -1;
 
 4383         msg.Form(
"%s: grand total: sent %d objects, size: %d bytes       ",
 
 4397      msg.Form(
"%s: sending output: %d objs, %d bytes", 
fPrefix.Data(), olsz, blen);
 
 4399      if (sock->
Send(mbuf) < 0) 
return -1;
 
 4403         PDB(kGlobal, 2) 
Info(
"SendResults", 
"sending output list");
 
 4405         PDB(kGlobal, 2) 
Info(
"SendResults", 
"notifying failure or abort");
 
 4410   PDB(kOutput,2) 
Info(
"SendResults", 
"done");
 
 4423   TString filename, opt;
 
 4450      Ssiz_t id = opt.Last(
'#');
 
 4451      if (
id != 
kNPOS && 
id < opt.Length() - 1) {
 
 4452         filename += opt(
id + 1, opt.Length());
 
 4462         Error(
"ProcessNext", 
"no TDset object: cannot continue");
 
 4484      while ((obj = nxt())){
 
 4488            Info(
"ProcessNext", 
"found object for selector '%s'", obj->
ClassName());
 
 4495      Error(
"ProcessNext", 
"empty waiting queries list!");
 
 4534   input->
Add(
new TNamed(
"PROOF_QueryTag", qid.Data()));
 
 4545         PDB(kSubmerger, 2) 
Info(
"ProcessNext", 
"PROOF_UseMergers set to %d", smg);
 
 4551               if ((o = input->
FindObject(
"PROOF_MergersByHost"))) { input->
Remove(o); 
delete o; }
 
 4553               PDB(kSubmerger, 2) 
Info(
"ProcessNext", 
"submergers setup by host/node");
 
 4562   while ((o = next())) {
 
 4573      Info(
"ProcessNext", 
"calling fPlayer->Process() with selector object: %s", selector_obj->
ClassName());
 
 4577      Info(
"ProcessNext", 
"calling fPlayer->Process() with selector name: %s", filename.Data());
 
 4592         m << status << abort;
 
 4608            Warning(
"ProcessNext", 
"problems registering produced datasets: %s", emsg.Data());
 
 4629      while ((xo = nxo())) {
 
 4639            if (oopt.BeginsWith(
"of:")) {
 
 4640               oopt.Replace(0, 3, 
"");
 
 4651   Info(
"ProcessNext", 
"adding info about dataset '%s' in the light query result", dset->
GetName());
 
 4658         Info(
"ProcessNext", 
"sending results");
 
 4661         Warning(
"ProcessNext", 
"problems sending output list");
 
 4666         Warning(
"ProcessNext",
"the output list is empty!");
 
 4668         Warning(
"ProcessNext", 
"problems sending output list");
 
 4678      if (!(pq->
IsDraw()) && pqr) {
 
 4705      ::
Info(
"TProofServ::RegisterDataSets",
 
 4706             "enter: %d objs in the output list", (out ? out->
GetSize() : -1));
 
 4708   if (!in || !out || !dsm) {
 
 4709      ::Error(
"TProofServ::RegisterDataSets", 
"invalid inputs: %p, %p, %p", in, out, dsm);
 
 4717   while ((o = nxo())) {
 
 4735         if (regopt.Contains(
":sortidx:")) {
 
 4737            regopt.ReplaceAll(
":sortidx:", 
"");
 
 4744               const char *vfmsg = regopt.Contains(
"V") ? 
" and verifying" : 
"";
 
 4745               msg.Form(
"Registering%s dataset '%s' ... ", vfmsg, ds->
GetName());
 
 4754                  ::Warning(
"TProofServ::RegisterDataSets",
 
 4755                            "failure registering or verifying dataset '%s'", ds->
GetName());
 
 4756                  msg.Form(
"Registering%s dataset '%s' ... failed! See log for more details", vfmsg, ds->
GetName());
 
 4758                  ::Info(
"TProofServ::RegisterDataSets", 
"dataset '%s' successfully registered%s",
 
 4759                                                         ds->
GetName(), (strlen(vfmsg) > 0) ? 
" and verified" : 
"");
 
 4760                  msg.Form(
"Registering%s dataset '%s' ... OK", vfmsg, ds->
GetName());
 
 4767                  ::Info(
"TProofServ::RegisterDataSets", 
"printing collection");
 
 4771               ::Warning(
"TProofServ::RegisterDataSets", 
"collection '%s' is empty", o->
GetName());
 
 4774            ::Info(
"TProofServ::RegisterDataSets", 
"dataset registration not allowed");
 
 4781   while ((o = nxrm())) out->
Remove(o);
 
 4785   while((o = nxtg())) {
 
 4791   PDB(kDataset, 1) ::
Info(
"TProofServ::RegisterDataSets", 
"exit");
 
 4802      Info(
"HandleQueryList", 
"Enter");
 
 4808   Int_t ntot = 0, npre = 0, ndraw= 0;
 
 4813         Int_t idx = qdir.Index(
"session-");
 
 4841               Warning(
"HandleQueryList", 
"unable to clone TProofQueryResult '%s:%s'",
 
 4851   m << npre << ndraw << ql;
 
 4865      Info(
"HandleRemove", 
"Enter");
 
 4868   (*mess) >> queryref;
 
 4870   if (slb) *slb = queryref;
 
 4872   if (queryref == 
"cleanupqueue") {
 
 4876      Info(
"HandleRemove", 
"%d queries removed from the waiting list", pend);
 
 4881   if (queryref == 
"cleanupdir") {
 
 4887      Info(
"HandleRemove", 
"%d directories removed", nd);
 
 4912      Warning(
"HandleRemove", 
"query result manager undefined!");
 
 4916   Info(
"HandleRemove",
 
 4917        "query %s could not be removed (unable to lock session)", queryref.Data());
 
 4929      Info(
"HandleRetrieve", 
"Enter");
 
 4932   (*mess) >> queryref;
 
 4934   if (slb) *slb = queryref;
 
 4941   TString fout = qdir;
 
 4942   fout += 
"/query-result.root";
 
 4948      TIter nxk(
f->GetListOfKeys());
 
 4950      while ((k = (
TKey *)nxk())) {
 
 4959                  if ((
d = 
dynamic_cast<TDSet *
>(o)))
 
 4968               static const char *clb[4] = { 
"bytes", 
"KB", 
"MB", 
"GB" };
 
 4969               while (qsz > 1000. && ilb < 3) {
 
 4978               Info(
"HandleRetrieve",
 
 4979                    "query not found in file %s",fout.Data());
 
 4989      Info(
"HandleRetrieve",
 
 4990           "file cannot be open (%s)",fout.Data());
 
 5009   (*mess) >> 
type >> add >> path;
 
 5013   if ((
type != 
"lib") && (
type != 
"inc")) {
 
 5014      Error(
"HandleLibIncPath",
"unknown action type: %s", 
type.Data());
 
 5019   path.ReplaceAll(
",",
" ");
 
 5023   if (path.Length() > 0 && path != 
"-") {
 
 5024      if (!(op = path.Tokenize(
" "))) {
 
 5025         Error(
"HandleLibIncPath",
"decomposing path %s", path.Data());
 
 5032      if (
type == 
"lib") {
 
 5039            TString xlib = lib->
GetName();
 
 5046               if (newlibpath.BeginsWith(
".:"))
 
 5048               if (newlibpath.Index(xlib) == 
kNPOS) {
 
 5053               Info(
"HandleLibIncPath",
 
 5054                    "libpath %s does not exist or cannot be read - not added", xlib.Data());
 
 5069            TString xinc = inc->
GetName();
 
 5074               if (curincpath.Index(xinc) == 
kNPOS)
 
 5077               Info(
"HandleLibIncPath",
 
 5078                    "incpath %s does not exist or cannot be read - not added", xinc.Data());
 
 5089      if (
type == 
"lib") {
 
 5096            TString xlib = lib->
GetName();
 
 5117            newincpath.ReplaceAll(
gInterpreter->GetIncludePath(),
"");
 
 5142   (*mess) >> filenam >> md5;
 
 5146   if (slb) *slb = filenam;
 
 5148   if (filenam.BeginsWith(
"-")) {
 
 5154      TString packnam = filenam;
 
 5155      packnam.Remove(packnam.Length() - 4);  
 
 5158      if (md5local && md5 == (*md5local)) {
 
 5161               Error(
"HandleCheckFile", 
"failure cleaning %s", packnam.Data());
 
 5169               Info(
"HandleCheckFile",
 
 5170                    "package %s installed on node", filenam.Data());
 
 5173               Error(
"HandleCheckFile", 
"gunzip not found");
 
 5175               Error(
"HandleCheckFile", 
"package %s did not unpack into %s",
 
 5176                                        filenam.Data(), packnam.Data());
 
 5187            Error(
"HandleCheckFile",
 
 5188                  "package %s not yet on node", filenam.Data());
 
 5206            Info(
"HandleCheckFile",
 
 5207                  "problems uploading package %s", parpath.Data());
 
 5212   } 
else if (filenam.BeginsWith(
"+") || filenam.BeginsWith(
"=")) {
 
 5213      filenam.Remove(0,1);
 
 5215      TString parname = filenam;
 
 5222                     "problems installing package %s", filenam.Data());
 
 5230      if (md5local && md5 == (*md5local)) {
 
 5234            Info(
"HandleCheckFile",
 
 5235                 "package %s already on node", parname.Data());
 
 5238            TString par = filenam;
 
 5245                          "problems uploading package %s", par.Data());
 
 5253            Info(
"HandleCheckFile",
 
 5254                 "package %s not yet on node", filenam.Data());
 
 5261      TString cachef = 
fCacheDir + 
"/" + filenam;
 
 5265      if (md5local && md5 == (*md5local)) {
 
 5268            Info(
"HandleCheckFile", 
"file %s already on node", filenam.Data());
 
 5273            Info(
"HandleCheckFile", 
"file %s not yet on node", filenam.Data());
 
 5287      Info(
"HandleCache", 
"Enter");
 
 5299   const char *k = (
IsMaster()) ? 
"Mst" : 
"Wrk";
 
 5300   noth.Form(
"%s-%s", k, 
fOrdinal.Data());
 
 5303   TString packagedir, package, pdir, ocwd, 
file;
 
 5319         if (slb) slb->Form(
"%d %d", 
type, all);
 
 5325         if (
file.IsNull() || 
file == 
"*") {
 
 5333         if (slb) slb->Form(
"%d %s", 
type, 
file.Data());
 
 5341         if (slb) slb->Form(
"%d %d", 
type, all);
 
 5349         if (slb) slb->Form(
"%d %d", 
type, status);
 
 5358         if (slb) slb->Form(
"%d %s %d", 
type, package.Data(), status);
 
 5367                            noth.Data(), package.Data()));
 
 5380                       "kBuildPackage: problems forwarding package %s to workers", package.Data());
 
 5382                                       noth.Data(), package.Data()));
 
 5390                    "kBuildPackage: package %s exists and has PROOF-INF directory", package.Data());
 
 5397            status = packmgr->
Build(package.Data(), chkveropt);
 
 5408               Info(
"HandleCache", 
"package %s successfully built", package.Data());
 
 5410         if (slb) slb->Form(
"%d %s %d %d", 
type, package.Data(), status, chkveropt);
 
 5419         if ((status = 
fPackMgr->
Load(package.Data(), optls)) < 0) {
 
 5423                                                 noth.Data(), package.Data(), optls,
 
 5424                                                 (optls && optls->GetSize() > 0) ? optls->GetSize() : 0));
 
 5429               if (optls && optls->GetSize() > 0) {
 
 5439               Info(
"HandleCache", 
"package %s successfully loaded", package.Data());
 
 5442         if (slb) slb->Form(
"%d %s %d", 
type, package.Data(), status);
 
 5447         {  TString title(
"*** Enabled packages ***");
 
 5449               title.Form(
"*** Enabled packages on %s %s on %s",
 
 5450                          (
IsMaster()) ? 
"master" : 
"worker",
 
 5458         if (slb) slb->Form(
"%d %d", 
type, all);
 
 5465         if (slb) slb->Form(
"%d %d", 
type, all);
 
 5472         if (slb) slb->Form(
"%d %s", 
type, 
file.Data());
 
 5479         if (slb) slb->Form(
"%d %d", 
type, all);
 
 5484         if (slb) slb->Form(
"%d", 
type);
 
 5490         if (slb) slb->Form(
"%d %s", 
type, package.Data());
 
 5497         if (slb) slb->Form(
"%d %s %d", 
type, package.Data(), chkveropt);
 
 5504         if (slb) slb->Form(
"%d %s %d", 
type, package.Data(), status);
 
 5511         if (slb) slb->Form(
"%d %s", 
type, package.Data());
 
 5517         if (slb) slb->Form(
"%d %s %d", 
type, package.Data(), status);
 
 5523         if (slb) slb->Form(
"%d %s", 
type, package.Data());
 
 5533         if (slb) slb->Form(
"%d", 
type);
 
 5539            msg << 
type << pack;
 
 5544         if (slb) slb->Form(
"%d", 
type);
 
 5562            TString pack(package);
 
 5564            if ((from = pack.Index(
",")) != 
kNPOS) pack.Remove(from);
 
 5565            Info(
"HandleCache", 
"loading macro %s ...", pack.Data());
 
 5580            if (slb) slb->Form(
"%d %s", 
type, package.Data());
 
 5584         Error(
"HandleCache", 
"unknown type %d", 
type);
 
 5598      Info(
"HandleWorkerLists", 
"Enter");
 
 5608         if (ord != 
"*" && !ord.BeginsWith(
GetOrdinal()) && ord != 
"restore") 
break;
 
 5617                  if (nactnew == nactmax) {
 
 5618                     PDB(kGlobal, 1) 
Info(
"HandleWorkerList", 
"all workers (re-)activated");
 
 5621                        PDB(kGlobal, 1) 
Info(
"HandleWorkerList", 
"%d workers could not be (re-)activated", nactmax - nactnew);
 
 5623               } 
else if (ord == 
"restore") {
 
 5625                     PDB(kGlobal, 1) 
Info(
"HandleWorkerList",
"active worker(s) restored");
 
 5627                     Error(
"HandleWorkerList", 
"some active worker(s) could not be restored; check logs");
 
 5630                  if (nactnew == (nact + nwc)) {
 
 5632                        PDB(kGlobal, 1) 
Info(
"HandleWorkerList",
"worker(s) %s (re-)activated", ord.Data());
 
 5635                        Error(
"HandleWorkerList", 
"some worker(s) could not be (re-)activated;" 
 5636                                                  " # of actives: %d --> %d (nwc: %d)",
 
 5637                                                  nact, nactnew, nwc);
 
 5639                     rc = (nwc < 0) ? nwc : -1;
 
 5643               PDB(kGlobal, 1) 
Info(
"HandleWorkerList",
"all workers are already active");
 
 5646            Warning(
"HandleWorkerList",
"undefined PROOF session: protocol error?");
 
 5651         if (ord != 
"*" && !ord.BeginsWith(
GetOrdinal()) && ord != 
"restore") 
break;
 
 5659                     PDB(kGlobal, 1) 
Info(
"HandleWorkerList",
"all workers deactivated");
 
 5662                        PDB(kGlobal, 1) 
Info(
"HandleWorkerList",
"%d workers could not be deactivated", nactnew);
 
 5665                  if (nactnew == (nact - nwc)) {
 
 5667                        PDB(kGlobal, 1) 
Info(
"HandleWorkerList",
"worker(s) %s deactivated", ord.Data());
 
 5670                        Error(
"HandleWorkerList", 
"some worker(s) could not be deactivated:" 
 5671                                                  " # of actives: %d --> %d (nwc: %d)",
 
 5672                                                  nact, nactnew, nwc);
 
 5674                     rc = (nwc < 0) ? nwc : -1;
 
 5678               PDB(kGlobal, 1) 
Info(
"HandleWorkerList",
"all workers are already inactive");
 
 5681            Warning(
"HandleWorkerList",
"undefined PROOF session: protocol error?");
 
 5685         Warning(
"HandleWorkerList",
"unknown action type (%d)", 
type);
 
 5705         Info(
"GetWorkers", 
"using PROOF config file: %s", 
fConfFile.Data());
 
 5712              "no appropriate master line found in %s", 
fConfFile.Data());
 
 5765         TString lvl = 
gEnv->
GetValue(
"Root.ErrorIgnoreLevel", 
"Print");
 
 5792   const char *
type   = 0;
 
 5795   Int_t ipos = (location) ? strlen(location) : 0;
 
 5801   if (level >= 
kInfo) {
 
 5803      char *
ps = location ? (
char *) strrchr(location, 
'|') : (
char *)0;
 
 5805         ipos = (int)(
ps - (
char *)location);
 
 5821      type = 
"*** Break ***";
 
 5839   if (!location || ipos == 0 ||
 
 5852                                  type, ipos, location, msg);
 
 5862   if (__crashreporter_info__)
 
 5863      delete [] __crashreporter_info__;
 
 5864   __crashreporter_info__ = 
StrDup(buf);
 
 5916         Printf(
" +++ Latest processing times: %f s (CPU: %f s)",
 
 5945   TString sqlserv = 
gEnv->
GetValue(
"ProofServ.QueryLogDB",
"");
 
 5946   TString sqluser = 
gEnv->
GetValue(
"ProofServ.QueryLogUser",
"");
 
 5947   TString sqlpass = 
gEnv->
GetValue(
"ProofServ.QueryLogPasswd",
"");
 
 5949   Int_t priority = 100;
 
 5955   sql.Form(
"SELECT priority WHERE group='%s' FROM proofpriority", 
fGroup.Data());
 
 5961      Error(
"GetPriority", 
"failed to connect to SQL server %s as %s %s",
 
 5962            sqlserv.Data(), sqluser.Data(), sqlpass.Data());
 
 5963      printf(
"%s\n", sql.Data());
 
 5968         Error(
"GetPriority", 
"query into proofpriority failed");
 
 5969         Printf(
"%s", sql.Data());
 
 5976            Error(
"GetPriority", 
"first row is header is NULL");
 
 6000      Info(
"SendAsynMessage",
"%s", (msg ? msg : 
"(null)"));
 
 6004      m << TString(msg) << lf;
 
 6006         Warning(
"SendAsynMessage", 
"could not send message '%s'", msg);
 
 6019   off_t lend = lseek(fileno(stdout), (off_t)0, SEEK_END);
 
 6020   if (lend >= 0) lseek(
fLogFileDes, lend, SEEK_SET);
 
 6037            if (truncsz < 100) {
 
 6038               emsg.Form(
"+++ WARNING +++: %s: requested truncate size too small" 
 6044            while (ftruncate(fileno(stdout), truncsz) != 0 &&
 
 6049               Error(
"TruncateLogFile", 
"truncating to %lld bytes; file size is %lld bytes (errno: %d)",
 
 6051               emsg.Form(
"+++ WARNING +++: %s: problems truncating log file to %lld bytes; file size is %lld bytes" 
 6055               Info(
"TruncateLogFile", 
"file truncated to %lld bytes (80%% of %lld); file size was %lld bytes ",
 
 6057               emsg.Form(
"+++ WARNING +++: %s: log file truncated to %lld bytes (80%% of %lld)",
 
 6063         emsg.Form(
"+++ WARNING +++: %s: could not stat log file descriptor" 
 6076   Error(
"HandleException", 
"caugth exception triggered by signal '%d' %s %lld",
 
 6080   emsg.Form(
"%s: caught exception triggered by signal '%d' %s %lld",
 
 6094      Info(
"HandleDataSets", 
"enter");
 
 6098      Warning(
"HandleDataSets", 
"no data manager is available to fullfil the request");
 
 6103   TString dsUser, dsGroup, dsName, dsTree, uri, opt;
 
 6119            if (slb) slb->Form(
"%d %s", 
type, uri.Data());
 
 6131               if (slb) slb->Form(
"%d %s %s", 
type, uri.Data(), opt.Data());
 
 6136                  Error(
"HandleDataSets", 
"can not save an empty list.");
 
 6144               Info(
"HandleDataSets", 
"dataset registration not allowed");
 
 6145               if (slb) slb->Form(
"%d notallowed", 
type);
 
 6156               Error(
"HandleDataSets",
 
 6157                  "no dataset staging request repository available");
 
 6162            TString validUri = uri;
 
 6163            while (reInvalid.
Substitute(validUri, 
"_")) {}
 
 6168               Warning(
"HandleDataSets", 
"staging of %s already requested",
 
 6175            if (!
fc || (
fc->GetNFiles() == 0)) {
 
 6176               Error(
"HandleDataSets", 
"empty dataset or no dataset returned");
 
 6187               for (
Int_t i=0; i<nToErase; i++)
 
 6198               Error(
"HandleDataSets",
 
 6199                  "can't register staging request for %s", uri.Data());
 
 6204            Info(
"HandleDataSets",
 
 6205               "Staging request registered for %s", uri.Data());
 
 6215               Error(
"HandleDataSets",
 
 6216                  "no dataset staging request repository available");
 
 6234               Info(
"HandleDataSets", 
"no pending staging request for %s",
 
 6244               Error(
"HandleDataSets",
 
 6245                  "no dataset staging request repository available");
 
 6263            (*mess) >> uri >> opt;
 
 6264            if (slb) slb->Form(
"%d %s %s", 
type, uri.Data(), opt.Data());
 
 6272            (*mess) >> uri >> opt;
 
 6273            if (slb) slb->Form(
"%d %s %s", 
type, uri.Data(), opt.Data());
 
 6277            if (kLite != 
kNPOS) {
 
 6279               opt.Remove(kLite, strlen(
":lite:"));
 
 6283            if (returnMap && !opt.IsNull()) {
 
 6288               TIter nxd(returnMap);
 
 6291                  if ((xfc = 
fc->GetFilesOnServer(opt.Data()))) {
 
 6299                  Info(
"HandleDataSets", 
"no dataset found on server '%s'", opt.Data());
 
 6316            (*mess) >> uri >> opt;
 
 6317            if (slb) slb->Form(
"%d %s %s", 
type, uri.Data(), opt.Data());
 
 6333               if (slb) slb->Form(
"%d %s", 
type, uri.Data());
 
 6339               Info(
"HandleDataSets", 
"dataset creation / removal not allowed");
 
 6340               if (slb) slb->Form(
"%d notallowed", 
type);
 
 6348               (*mess) >> uri >> opt;
 
 6349               if (slb) slb->Form(
"%d %s %s", 
type, uri.Data(), opt.Data());
 
 6359               Info(
"HandleDataSets", 
"dataset verification not allowed");
 
 6367               if (slb) slb->Form(
"%d", 
type);
 
 6369               if (groupQuotaMap) {
 
 6376               Info(
"HandleDataSets", 
"quota control disabled");
 
 6377               if (slb) slb->Form(
"%d disabled", 
type);
 
 6385               if (slb) slb->Form(
"%d", 
type);
 
 6390               Info(
"HandleDataSets", 
"quota control disabled");
 
 6391               if (slb) slb->Form(
"%d disabled", 
type);
 
 6399               if (slb) slb->Form(
"%d %s", 
type, uri.Data());
 
 6402               Info(
"HandleDataSets", 
"kSetDefaultTreeName: modification of dataset info not allowed");
 
 6403               if (slb) slb->Form(
"%d notallowed", 
type);
 
 6410            (*mess) >> uri >> opt;
 
 6411            if (slb) slb->Form(
"%d %s %s", 
type, uri.Data(), opt.Data());
 
 6412            if (opt == 
"show") {
 
 6415            } 
else if (opt == 
"clear") {
 
 6419               Error(
"HandleDataSets", 
"kCache: unknown action: %s", opt.Data());
 
 6425         Error(
"HandleDataSets", 
"unknown type %d", 
type);
 
 6452                  Info(
"HandleSubmerger", 
"kSendOutput: interrupting ...");
 
 6463               Int_t merger_id = -1;
 
 6464               (*mess) >> merger_id >> 
name >> port;
 
 6466                  Info(
"HandleSubmerger",
"worker %s redirected to merger #%d %s:%d", 
fOrdinal.Data(), merger_id, 
name.Data(), port);
 
 6471                  PDB(kSubmerger, 2) 
Info(
"HandleSubmerger",
 
 6472                                          "kSendOutput: worker asked for sending output to merger #%d %s:%d",
 
 6473                                          merger_id, 
name.Data(), port);
 
 6476                     msg.Form(
"worker %s cannot send results to merger #%d at %s:%d", 
GetPrefix(), merger_id, 
name.Data(), port);
 
 6477                     PDB(kSubmerger, 2) 
Info(
"HandleSubmerger",
 
 6478                                             "kSendOutput: %s - inform the master", msg.Data());
 
 6492                     PDB(kSubmerger, 2) 
Info(
"HandleSubmerger", 
"kSendOutput: worker sent its output");
 
 6499                  if (
name == 
"master") {
 
 6500                     PDB(kSubmerger, 2) 
Info(
"HandleSubmerger",
 
 6501                                             "kSendOutput: worker was asked for sending output to master");
 
 6503                        Warning(
"HandleSubmerger", 
"problems sending output list");
 
 6509                  } 
else if (!t || !(t->
IsValid())) {
 
 6510                     msg.Form(
"worker %s could not open a valid socket to merger #%d at %s:%d",
 
 6512                     PDB(kSubmerger, 2) 
Info(
"HandleSubmerger",
 
 6513                                             "kSendOutput: %s - inform the master", msg.Data());
 
 6528               Error(
"HandleSubmerger", 
"kSendOutput: received not on worker");
 
 6539               Int_t merger_id = -1;
 
 6541               Int_t connections = 0;
 
 6542               (*mess) >> merger_id  >> connections;
 
 6544                  Info(
"HandleSubmerger", 
"worker %s established as merger", 
fOrdinal.Data());
 
 6547                  Info(
"HandleSubmerger",
 
 6548                       "kBeMerger: worker asked for being merger #%d for %d connections",
 
 6549                       merger_id, connections);
 
 6554                  PDB(kSubmerger, 2) 
Info(
"HandleSubmerger",
 
 6555                                          "kBeMerger: mergerPlayer created (%p) ", mergerPlayer);
 
 6563                        Info(
"HandleSubmerger", 
"kBeMerger: all outputs from workers accepted");
 
 6566                        Info(
"",
"adding own output to the list on %s", 
fOrdinal.Data());
 
 6575                     while ((o = nxo())) {
 
 6581                                 Info(
"HandleSocketInput", 
"removing merged object (%p)", o);
 
 6586                     PDB(kSubmerger, 2) 
Info(
"HandleSubmerger",
"kBeMerger: own outputs added");
 
 6587                     PDB(kSubmerger, 2) 
Info(
"HandleSubmerger",
"starting delayed merging on %s", 
fOrdinal.Data());
 
 6594                     PDB(kSubmerger, 2) 
Info(
"HandleSubmerger", 
"delayed merging on %s finished ", 
fOrdinal.Data());
 
 6595                     PDB(kSubmerger, 2) 
Info(
"HandleSubmerger", 
"%s sending results to master ", 
fOrdinal.Data());
 
 6598                        Warning(
"HandleSubmerger",
"kBeMerger: problems sending output list");
 
 6602                     PDB(kSubmerger, 2) 
Info(
"HandleSubmerger",
"kBeMerger: results sent to master");
 
 6619                  Warning(
"HandleSubmerger",
"kBeMerger: problems craeting the merger player!");
 
 6628               Error(
"HandleSubmerger",
"kSendOutput: received not on worker");
 
 6642            PDB(kSubmerger, 2)  
Info(
"HandleSubmerger", 
"kStopMerging");
 
 6644               Info(
"HandleSubmerger", 
"kStopMerging: interrupting ...");
 
 6660   Info(
"HandleFork", 
"fork cloning not implemented");
 
 6674   if ((pid = fork()) < 0) {
 
 6675      Error(
"Fork", 
"failed to fork");
 
 6680   if (!pid) 
return pid;
 
 6694   Warning(
"Fork", 
"Functionality not provided under windows");
 
 6709   if (fname.Contains(
"<user>")) {
 
 6715         fname.ReplaceAll(
"<user>", 
"nouser");
 
 6719   if (fname.Contains(
"<u>")) {
 
 6722         fname.ReplaceAll(
"<u>", u);
 
 6725         fname.ReplaceAll(
"<u>", u);
 
 6727         fname.ReplaceAll(
"<u>", 
"n");
 
 6731   if (fname.Contains(
"<group>")) {
 
 6737         fname.ReplaceAll(
"<group>", 
"default");
 
 6741   if (fname.Contains(
"<stag>")) {
 
 6747         ::Warning(
"TProofServ::ResolveKeywords", 
"session tag undefined: ignoring");
 
 6751   if (fname.Contains(
"<ord>")) {
 
 6755         ::Warning(
"TProofServ::ResolveKeywords", 
"ordinal number undefined: ignoring");
 
 6758   if (fname.Contains(
"<qnum>")) {
 
 6762         ::Warning(
"TProofServ::ResolveKeywords", 
"query seqeuntial number undefined: ignoring");
 
 6765   if (fname.Contains(
"<file>") && path && strlen(path) > 0) {
 
 6766      fname.ReplaceAll(
"<file>", path);
 
 6769   if (fname.Contains(
"<rver>")) {
 
 6771      fname.ReplaceAll(
"<rver>", 
v);
 
 6774   if (fname.Contains(
"<build>")) {
 
 6777      fname.ReplaceAll(
"<build>", 
b);
 
 6792   std::lock_guard<std::recursive_mutex> lock(
fQMtx);
 
 6808      fprintf(fs, 
"%d", st);
 
 6811         Info(
"UpdateSessionStatus", 
"status (=%d) update in path: %s", st, 
fAdminPath.Data());
 
 6824   std::lock_guard<std::recursive_mutex> lock(
fQMtx);
 
 6833   std::lock_guard<std::recursive_mutex> lock(
fQMtx);
 
 6842   std::lock_guard<std::recursive_mutex> lock(
fQMtx);
 
 6852   std::lock_guard<std::recursive_mutex> lock(
fQMtx);
 
 6862   std::lock_guard<std::recursive_mutex> lock(
fQMtx);
 
 6873   std::lock_guard<std::recursive_mutex> lock(
fQMtx);
 
 6886   std::lock_guard<std::recursive_mutex> lock(
fQMtx);
 
 6891      while ((o = nxq())) {
 
 6958      if (!dsrv.EndsWith(
"/")) dsrv += 
"/";
 
 6976      if (!pfx.IsNull() && !strncmp(u.
GetFile(), pfx.Data(), pfx.Length())) {
 
 6978         if (srvp == 
"root" || srvp == 
"xrd") path.Remove(0, pfx.Length());
 
 6992   const char *pname = 
GetName();
 
 7000      SysError(
"Lock", 
"cannot open lock file %s", pname);
 
 7007#if !defined(R__WIN32) && !defined(R__WINGCC) 
 7008   if (lockf(
fLockId, F_LOCK, (off_t) 1) == -1) {
 
 7009      SysError(
"Lock", 
"error locking %s", pname);
 
 7035#if !defined(R__WIN32) && !defined(R__WINGCC) 
 7036   if (lockf(
fLockId, F_ULOCK, (off_t)1) == -1) {
 
const Bool_t kIterBackward
void Error(const char *location, const char *msgfmt,...)
R__EXTERN Int_t gErrorAbortLevel
R__EXTERN Int_t gErrorIgnoreLevel
void Warning(const char *location, const char *msgfmt,...)
ErrorHandlerFunc_t SetErrorHandler(ErrorHandlerFunc_t newhandler)
Set an errorhandler function. Returns the old handler.
void Throw(int code)
If an exception context has been set (using the TRY and RETRY macros) jump back to where it was set.
R__EXTERN TProofDebug::EProofDebugMask gProofDebugMask
R__EXTERN Int_t gProofDebugLevel
TApplication * GetTProofServ(Int_t *argc, char **argv, FILE *flog)
static volatile Int_t gProofServDebug
static void SendAsynMsg(const char *msg)
Int_t(* OldProofServAuthSetup_t)(TSocket *, Bool_t, Int_t, TString &, TString &, TString &)
const char *const kPROOF_QueryDir
const char *const kPROOF_DataSetDir
const char *const kPROOF_DataDir
const char *const kPROOF_CacheLockFile
const char *const kPROOF_CacheDir
const char *const kPROOF_PackDir
const char *const kPROOF_WorkDir
const char *const kPROOF_QueryLockFile
R__EXTERN TProof * gProof
const Int_t kPROOF_Protocol
char * StrDup(const char *str)
Duplicate the string str.
Bool_t R_ISDIR(Int_t mode)
R__EXTERN TSystem * gSystem
static struct mg_connection * fc(struct mg_context *ctx)
This class creates the ROOT Application Environment that interfaces to the windowing system eventloop...
virtual Long_t ProcessFile(const char *file, Int_t *error=0, Bool_t keep=kFALSE)
virtual Long_t ProcessLine(const char *line, Bool_t sync=kFALSE, Int_t *error=0)
virtual void Run(Bool_t retrn=kFALSE)
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.
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 Int_t GetSize() const
Return the capacity of the collection, i.e.
Manages an element of a TDSet.
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.
static Long64_t GetEntries(Bool_t isTree, const char *filename, const char *path, TString &objname)
Returns number of entries in tree or objects in file.
Int_t GetNumOfFiles()
Return the number of files in the dataset.
void Validate()
Validate the TDSet by opening files.
void SetWriteV3(Bool_t on=kTRUE)
Set/Reset the 'OldStreamer' bit in this instance and its elements.
TList * GetListOfElements() const
const char * GetObjName() const
Int_t WriteDataSet(const char *group, const char *user, const char *dsName, TFileCollection *dataset, UInt_t option=0, TMD5 *checksum=0)
Writes indicated dataset.
TFileCollection * GetDataSet(const char *uri, const char *srv=0)
Utility function used in various methods for user dataset upload.
Bool_t ExistsDataSet(const char *group, const char *user, const char *dsName)
Checks if the indicated dataset exits.
Bool_t RemoveDataSet(const char *group, const char *user, const char *dsName)
Removes the indicated dataset.
virtual TFileCollection * GetDataSet(const char *uri, const char *server=0)
Utility function used in various methods for user dataset upload.
Int_t ScanDataSet(const char *uri, const char *opt)
Scans the dataset indicated by 'uri' following the 'opts' directives.
virtual TMap * GetDataSets(const char *uri, UInt_t=TDataSetManager::kExport)
Returns all datasets for the <group> and <user> specified by <uri>.
virtual Bool_t ExistsDataSet(const char *uri)
Checks if the indicated dataset exits.
virtual TMap * GetGroupQuotaMap()
virtual void ShowDataSets(const char *uri="*", const char *opt="")
Prints formatted information about the dataset 'uri'.
virtual void ShowQuota(const char *opt)
Display quota information.
virtual Bool_t RemoveDataSet(const char *uri)
Removes the indicated dataset.
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 Int_t ClearCache(const char *uri)
Clear cached information matching uri.
virtual Int_t RegisterDataSet(const char *uri, TFileCollection *dataSet, const char *opt)
Register a dataset, perfoming quota checkings, if needed.
virtual Int_t ShowCache(const char *uri)
Show cached information matching uri.
A List of entry numbers in a TTree or TChain.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
virtual Int_t ReadFile(const char *fname, EEnvLevel level)
Read and parse the resource file for a certain level.
virtual TEnvRec * Lookup(const char *n) const
Loop over all resource records and return the one with name.
A TEventList object is a list of selected events (entries) in a TTree.
Class that contains a list of TFileInfo's and accumulated meta data information about its entries.
void Sort(Bool_t useindex=kFALSE)
Sort the collection.
void Print(Option_t *option="") const
Prints the contents of the TFileCollection.
virtual Bool_t Notify()
Notify when event occurred on descriptor associated with this handler.
virtual Bool_t ReadNotify()
Notify when something can be read from the descriptor associated with this handler.
Class describing a generic file including meta information.
Bool_t RemoveUrlAt(Int_t i)
Remove URL at given position. Returns kTRUE on success, kFALSE on error.
TUrl * GetCurrentUrl() const
Return the current url.
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'.
static Long64_t GetFileBytesRead()
Static function returning the total number of bytes read from all files.
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.
Bool_t Notify()
Handle expiration of the idle timer. The session will just be terminated.
This class represents an Internet Protocol (IP) address.
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 * Remove(TObject *obj)
Remove object from the list.
virtual TObject * FindObject(const char *name) const
Delete a TObjLink object.
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 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 Int_t ReadFile(const char *filename)
Read lines in filename in this macro.
void SaveSource(FILE *fp)
Save macro source in file pointer fp.
TList * GetListOfLines() const
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
void DeleteAll()
Remove all (key,value) pairs from the map AND delete the keys AND values when they are allocated on t...
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.
TObject * FindObject(const char *keyname) const
Check if a (key,value) pair exists with keyname as name of the key.
static void EnableSchemaEvolutionForAll(Bool_t enable=kTRUE)
Static function enabling or disabling the automatic schema evolution.
void Reset()
Reset the message buffer so we can use (i.e. fill) it again.
void SetCompressionSettings(Int_t settings=ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose)
Int_t Compress()
Compress the message.
TClass * GetClass() const
virtual void RemoveAll()
Remove all sockets from the monitor.
TSocket * Select()
Return pointer to socket for which an event is waiting.
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.
TList * GetListOfDeActives() const
Returns a list with all de-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 const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
Collectable string class.
const char * GetName() const
Returns name of object.
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 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.
R__ALWAYS_INLINE Bool_t IsZombie() const
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 void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
virtual void Print(Option_t *option="") const
This method must be overridden when a class wants to print itself.
@ kInvalidObject
if object ctor succeeded but object should not be used
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Wrapper for PCRE library (Perl Compatible Regular Expressions).
Int_t Substitute(TString &s, const TString &r, Bool_t doDollarSubst=kTRUE)
Substitute matching part of s with r, dollar back-ref substitution is performed if doDollarSubst is t...
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 SetLogger(TPackMgrLog_t logger)
Bool_t IsInDir(const char *path)
Method to check if 'path' is in the managed directory Return kTRUE or kFALSE.
void Show(const char *title=0)
Show available packages.
void GetEnabledPackages(TString &packlist)
Method to get a semi-colon separated list with the names of the enabled 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.
Int_t GetParPath(const char *pack, TString &path)
Method to get the path of the PAR file for package 'pack'.
Int_t Unpack(const char *pack, TMD5 *sum=0)
Read MD5 checksum of the PAR file from the PROOF-INF/md5.txt file.
TMD5 * GetMD5(const char *pack)
Get MD5 checksum of the PAR file corresponding to given package Returns a pointer to a TMD5 object,...
void ShowEnabled(const char *title=0)
Show enabled packages.
TList * GetList() const
Get list of available packages Returns a pointer to a TList object, transferring ownership to the cal...
Int_t Clean(const char *pack)
Clean dir for package 'pack' Return -1 in case of error, 0 otherwise.
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...
static TPackMgr * GetPackMgr(const char *pack, TPackMgr *packmgr=nullptr)
Get the package manager having 'pack'; priority is given to packmgr, if defined.
void SetPrefix(const char *pfx)
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.
const char * GetTitle() const
Returns title of object.
Class used by TMap to store (key,value) pairs.
Named parameter, streamable and storable.
const AParamType & GetVal() const
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.
Int_t Unlock()
Unlock the directory.
Int_t Lock()
Locks the directory.
The purpose of this class is to provide a complete node description for masters, submasters and worke...
const TString & GetImage() const
const TString & GetWorkDir() const
Container class for processing statistics.
void Print(Option_t *option="") const
Dump the content.
Long64_t GetEntries() const
void SetLearnTime(Double_t learnTime)
void IncCPUTime(Double_t procTime)
void IncProcTime(Double_t procTime)
Long64_t GetBytesRead() const
TQueryResult version adapted to PROOF neeeds.
void SetRunning(Int_t startlog, const char *par, Int_t nwrks)
Call when running starts.
The purpose of this class is to provide a standard interface to static config files.
TString GetFileName() const
TProofNodeInfo * GetMaster()
Get the master node.
TList * GetSubmasters()
Get the list of submaster nodes.
TList * GetWorkers()
Get the list of worker nodes.
virtual Bool_t IsValid() const
TProofServLogHandlerGuard(const char *cmd, TSocket *s, const char *pfx="", Bool_t on=kTRUE)
Init a guard for executing a command in a pipe.
TProofServLogHandler * fExecHandler
virtual ~TProofServLogHandlerGuard()
Close a guard for executing a command in a pipe.
Bool_t Notify()
Handle available message in the open file.
virtual ~TProofServLogHandler()
Handle available message in the open file.
TProofServLogHandler(const char *cmd, TSocket *s, const char *pfx="")
Execute 'cmd' in a pipe and handle output messages from the related file.
static Int_t GetCmdRtn()
Static method to get the return code from the execution of a command via the pipe.
static void SetDefaultPrefix(const char *pfx)
Static method to set the default prefix.
Class providing the PROOF server.
const char * GetOrdinal() const
virtual ~TProofServ()
Cleanup.
void SetIdle(Bool_t st=kTRUE)
Change the idle status.
const char * GetConfDir() const
void TruncateLogFile()
Truncate the log file to the 80% of the required max size if this is set.
Int_t CatMotd()
Print message of the day (in the file pointed by the env PROOFMOTD or from fConfDir/etc/proof/motd).
Int_t GetPriority()
Get the processing priority for the group the user belongs too.
void SendStatistics()
Send statistics of slave server to master or client.
const char * GetImage() const
virtual Int_t CreateServer()
Finalize the server setup.
virtual EQueryAction GetWorkers(TList *workers, Int_t &prioritychange, Bool_t resume=kFALSE)
Get list of workers to be used from now on.
Int_t GetQuerySeqNum() const
Bool_t IsWaiting()
Return kTRUE if the session is waiting for the OK to start processing.
void Print(Option_t *option="") const
Print status of slave server.
static void ErrorHandler(Int_t level, Bool_t abort, const char *location, const char *msg)
The PROOF error handler function.
static Long_t fgResMemMax
TMonitor * fMergingMonitor
const char * GetUser() const
virtual void HandleProcess(TMessage *mess, TString *slb=0)
Handle processing request.
void FlushLogFile()
Reposition the read pointer in the log file to the very end.
Int_t CleanupWaitingQueries(Bool_t del=kTRUE, TList *qls=0)
Cleanup the waiting queries list.
static FILE * fgErrorHandlerFile
static Bool_t IsActive()
Static function that returns kTRUE in case we are a PROOF server.
static TProofServ * This()
Static function returning pointer to global object gProofServ.
static void GetLocalServer(TString &dsrv)
Extract LOCALDATASERVER info in 'dsrv'.
virtual void HandleRemove(TMessage *mess, TString *slb=0)
Handle remove request.
static void SetLastEntry(Long64_t lastentry)
Set the last entry before exception.
virtual void HandleArchive(TMessage *mess, TString *slb=0)
Handle archive request.
static Float_t GetMemHWM()
MemHWM getter.
Bool_t IsParallel() const
True if in parallel mode.
TProofLockPath * fQueryLock
static void FilterLocalroot(TString &path, const char *url="root://dum/")
If 'path' is local and 'dsrv' is Xrootd, apply 'path.Localroot' settings, if any.
static FILE * SetErrorHandlerFile(FILE *ferr)
Set the file stream where to log (default stderr).
virtual void HandleFork(TMessage *mess)
Cloning itself via fork. Not implemented.
virtual void HandleSigPipe()
Called when the client is not alive anymore (i.e.
void RedirectOutput(const char *dir=0, const char *mode="w")
Redirect stdout to a log file.
static void SetLastMsg(const char *lastmsg)
Set the message to be sent back in case of exceptions.
virtual void DeletePlayer()
Delete player instance.
virtual void ProcessNext(TString *slb=0)
process the next query from the queue of submitted jobs.
TSocket * GetSocket() const
virtual void HandleUrgentData()
Handle Out-Of-Band data sent by the master or client.
void SetQueryRunning(TProofQueryResult *pq)
Set query in running state.
TProofQueryResult * NextQuery()
Get the next query from the waiting list.
Int_t SetupCommon()
Common part (between TProofServ and TXProofServ) of the setup phase.
Int_t SendResults(TSocket *sock, TList *outlist=0, TQueryResult *pq=0)
Sends all objects from the given list to the specified socket.
const char * GetGroup() const
TDSetElement * GetNextPacket(Long64_t totalEntries=-1)
Get next range of entries to be processed on this server.
Bool_t IsEndMaster() 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.
Int_t ReceiveFile(const char *file, Bool_t bin, Long64_t size)
Receive a file, either sent by a client or a master server.
virtual Int_t HandleWorkerLists(TMessage *mess)
Handle here all requests to modify worker lists.
static Int_t RegisterDataSets(TList *in, TList *out, TDataSetManager *dsm, TString &e)
Register TFileCollections in 'out' as datasets according to the rules in 'in'.
TVirtualProofPlayer * fPlayer
virtual void HandleQueryList(TMessage *mess)
Handle request for list of queries.
const char * GetDataDir() const
virtual void HandleCheckFile(TMessage *mess, TString *slb=0)
Handle file checking request.
TProofLockPath * fCacheLock
TProofServ(Int_t *argc, char **argv, FILE *flog=0)
Main constructor.
virtual Int_t HandleCache(TMessage *mess, TString *slb=0)
Handle here all cache and package requests.
std::recursive_mutex fQMtx
virtual void HandleSocketInput()
Handle input coming from the client or from the master server.
virtual void MakePlayer()
Make player instance.
virtual void HandleSubmerger(TMessage *mess)
Handle a message of type kPROOF_SUBMERGER.
virtual Int_t HandleLibIncPath(TMessage *mess)
Handle lib, inc search paths modification request.
TShutdownTimer * fShutdownTimer
Bool_t IsIdle()
Return the idle status.
TDataSetManagerFile * fDataSetStgRepo
Int_t GetSessionStatus()
Return the status of this session: 0 idle 1 running 2 being terminated (currently unused) 3 queued 4 ...
virtual Int_t HandleDataSets(TMessage *mess, TString *slb=0)
Handle here requests about datasets.
TServerSocket * fMergingSocket
void GetOptions(Int_t *argc, char **argv)
Get and handle command line options.
virtual Int_t Setup()
Print the ProofServ logo on standard output.
static Long_t fgVirtMemMax
TFileHandler * fInputHandler
void SendParallel(Bool_t async=kFALSE)
Send number of parallel nodes to master or client.
Int_t GetCompressionLevel() const
static Long_t GetResMemMax()
ResMemMax getter.
Int_t QueueQuery(TProofQueryResult *pq)
Add a query to the waiting list Returns the number of queries in the list.
TIdleTOTimer * fIdleTOTimer
static Int_t fgLogToSysLog
virtual Int_t Fork()
Fork a child.
static Long_t GetVirtMemMax()
VirtMemMax getter.
Bool_t UnlinkDataDir(const char *path)
Scan recursively the datadir and unlink it if empty Return kTRUE if it can be unlinked,...
Int_t GetProtocol() const
Bool_t AcceptResults(Int_t connections, TVirtualProofPlayer *mergerPlayer)
Accept and merge results from a set of workers.
TDataSetManager * fDataSetManager
TQueryResultManager * fQMgr
void Reset(const char *dir)
Reset PROOF environment to be ready for execution of next command.
virtual void Terminate(Int_t status)
Terminate the proof server.
virtual void HandleException(Int_t sig)
Exception handler: we do not try to recover here, just exit.
Int_t OldAuthSetup(TString &wconf)
Setup authentication related stuff for old versions.
static TString fgSysLogEntity
Int_t WaitingQueries()
Return the number of waiting queries.
void Run(Bool_t retrn=kFALSE)
Main server eventloop.
const char * GetWorkDir() const
const char * GetPrefix() const
static TString fgSysLogService
void LogToMaster(Bool_t on=kTRUE)
TReaperTimer * fReaperTimer
static Long64_t fgLastEntry
const char * GetSessionTag() const
virtual void SendLogFile(Int_t status=0, Int_t start=-1, Int_t end=-1)
Send log file to master.
static Float_t GetMemStop()
MemStop getter.
Bool_t IsTopMaster() const
void RestartComputeTime()
Reset the compute time.
TProofQueryResult * MakeQueryResult(Long64_t nentries, const char *opt, TList *inl, Long64_t first, TDSet *dset, const char *selec, TObject *elist)
Create a TProofQueryResult instance for this query.
virtual void HandleRetrieve(TMessage *mess, TString *slb=0)
Handle retrieve request.
Int_t UpdateSessionStatus(Int_t xst=-1)
Update the session status in the relevant file.
TObject * Get(const char *namecycle)
Get object with name "name;cycle" (e.g.
static TMap * GetDataSetNodeMap(TFileCollection *fc, TString &emsg)
Get a map {server-name, list-of-files} for collection 'fc' to be used in TPacketizerFile.
const char * GetService() const
This class controls a Parallel ROOT Facility, PROOF, cluster.
const char * GetSessionTag() const
void ShowPackages(Bool_t all=kFALSE, Bool_t redirlog=kFALSE)
List contents of package directory.
Bool_t IsEndMaster() const
Int_t UploadPackage(const char *par, EUploadPackageOpt opt=kUntar, TList *workers=0)
Upload a PROOF archive (PAR file).
Int_t SendCurrentState(ESlaves list=kActive)
Transfer the current state of the master to the active slave servers.
TList * GetListOfSlaves() const
Int_t DisablePackages()
Remove all packages.
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.
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.
TList * GetListOfInactiveSlaves() const
static Int_t GetInputData(TList *input, const char *cachedir, TString &emsg)
Get the input data from the file defined in the input list.
Bool_t IsParallel() const
TVirtualProofPlayer * GetPlayer() const
void AskParallel()
Ask the for the number of parallel slaves.
virtual void ClearCache(const char *file=0)
Remove file from all file caches.
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.
TObject * GetParameter(const char *par) const
Get specified parameter.
void SetRunStatus(ERunStatus rst)
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 void ShowCache(Bool_t all=kFALSE)
List contents of file cache.
Int_t SetParallel(Int_t nodes=-1, Bool_t random=kFALSE)
Tell PROOF how many slaves to use in parallel.
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.
Float_t GetCpuTime() const
void SetPlayer(TVirtualProofPlayer *player)
Set a new PROOF player.
Int_t ClearPackage(const char *package)
Remove a specific package.
Int_t AddWorkers(TList *wrks)
Works on the master node only.
Int_t ClearPackages()
Remove all packages.
void SetActive(Bool_t=kTRUE)
Int_t RemoveIncludePath(const char *incpath, Bool_t onClient=kFALSE)
Remove 'incpath' from the inc path search.
Int_t GetParallel() const
Returns number of slaves active in parallel mode.
Int_t UnloadPackage(const char *package)
Unload specified package.
Long64_t GetBytesRead() const
void AskStatistics()
Ask the for the statistics of the slaves.
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.
Int_t Ping(ESlaves list)
Ping PROOF slaves. Returns the number of slaves that responded.
Int_t UnloadPackages()
Unload all packages.
virtual TVirtualProofPlayer * MakePlayer(const char *player=0, TSocket *s=0)
Construct a TProofPlayer object.
TList * GetListOfActiveSlaves() const
virtual Int_t Load(const char *macro, Bool_t notOnClient=kFALSE, Bool_t uniqueOnly=kTRUE, TList *wrks=0)
Load the specified macro on master, workers and, if notOnClient is kFALSE, on the client.
Int_t AddDynamicPath(const char *libpath, Bool_t onClient=kFALSE, TList *wrks=0, Bool_t doCollect=kTRUE)
Add 'libpath' to the lib path search.
Int_t RemoveWorkers(TList *wrks)
Used for shuting down the workres after a query is finished.
Int_t RemoveDynamicPath(const char *libpath, Bool_t onClient=kFALSE)
Remove 'libpath' from the lib path search.
TList * GetOutputList()
Get list with all object created during processing (see Process()).
void StopProcess(Bool_t abort, Int_t timeout=-1)
Send STOPPROCESS message to master and workers.
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.
void Interrupt(EUrgent type, ESlaves list=kActive)
Send interrupt to master or slave servers.
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...
Int_t SendCommand(const char *cmd, ESlaves list=kActive)
Send command to be executed on the PROOF master and/or slaves.
TList * GetListOfSlaveInfos()
Returns list of TSlaveInfo's. In case of error return 0.
virtual void ValidateDSet(TDSet *dset)
Validate a TDSet.
const char * GetUser() const
void TerminateWorker(TSlave *wrk)
Ask an active worker 'wrk' to terminate, i.e. to shutdown.
Int_t LoadPackage(const char *package, Bool_t notOnClient=kFALSE, TList *loadopts=0, TList *workers=0)
Load specified package.
void SetLogLevel(Int_t level, UInt_t mask=TProofDebug::kAll)
Set server logging level.
TList * GetListOfBadSlaves() const
Int_t DisablePackage(const char *package)
Remove a specific package.
void ShowEnabledPackages(Bool_t all=kFALSE)
List which packages are enabled.
Bool_t UseDynamicStartup() const
Bool_t IsDataReady(Long64_t &totalbytes, Long64_t &bytesready)
See if the data is ready to be analyzed.
const char * GetGroup() const
Class managing the query-result area.
void SaveQuery(TProofQueryResult *qr, const char *fout=0)
Save current status of query 'qr' to file name fout.
Bool_t FinalizeQuery(TProofQueryResult *pq, TProof *proof, TVirtualProofPlayer *player)
Final steps after Process() to complete the TQueryResult instance.
void RemoveQuery(TQueryResult *qr, Bool_t soft=kFALSE)
Remove everything about query qr.
TList * PreviousQueries() const
Int_t CleanupQueriesDir()
Remove all queries results referring to previous sessions.
Int_t ApplyMaxQueries(Int_t mxq)
Scan the queries directory and remove the oldest ones (and relative dirs, if empty) in such a way onl...
TProofQueryResult * LocateQuery(TString queryref, Int_t &qry, TString &qdir)
Locate query referenced by queryref.
Int_t CleanupSession(const char *sessiontag)
Cleanup query dir qdir.
Int_t DrawQueries() const
Int_t LockSession(const char *sessiontag, TProofLockPath **lck)
Try locking query area of session tagged sessiontag.
void IncrementDrawQueries()
void ScanPreviousQueries(const char *dir)
Scan the queries directory for the results of previous queries.
A container class for query results.
Long64_t GetEntries() const
void SetArchived(const char *archfile)
Set (or update) query in archived state.
TMacro * GetSelecImp() const
TQueryResult * CloneInfo()
Return an instance of TQueryResult containing only the local info fields, i.e.
virtual void SetProcessInfo(Long64_t ent, Float_t cpu=0., Long64_t siz=-1, Float_t inittime=0., Float_t proctime=0.)
Set processing info.
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.
TMacro * GetSelecHdr() const
const char * GetOptions() const
Long64_t GetFirst() const
Int_t fSeqNum
query unique sequential number
Float_t GetUsedCPU() const
Long64_t GetBytes() const
static const TString & GetBinDir()
Get the binary directory in the installation. Static utility function.
static const char * GetMacroPath()
Get macro search path. Static utility function.
static Bool_t Initialized()
Return kTRUE if the TROOT object has been initialized.
Bool_t Notify()
Check if any of the registered children has changed its state.
void AddPid(Int_t pid)
Add an entry for 'pid' in the internal list.
virtual ~TReaperTimer()
Destructor.
virtual TSQLRow * Next()=0
virtual const char * GetField(Int_t field)=0
virtual TSQLResult * Query(const char *sql)=0
static TSQLServer * Connect(const char *db, const char *uid, const char *pw)
The db should be of the form: <dbms>://<host>[:<port>][/<database>], e.g.
A TSelector object is used by the TTree::Draw, TTree::Scan, TTree::Process to navigate in a TTree and...
virtual Int_t GetLocalPort()
Get port # to which server socket is bound. In case of error returns -1.
virtual TSocket * Accept(UChar_t Opt=0)
Accept a connection on a server socket.
TShutdownTimer(TProofServ *p, Int_t delay)
Construtor.
Bool_t Notify()
Handle expiration of the shutdown timer.
virtual Bool_t Notify()
Notify when signal occurs.
void SetSysInfo(SysInfo_t si)
Setter for fSysInfo.
Option_t * GetOption() const
virtual Int_t SetOption(ESockOptions opt, Int_t val)
Set socket options.
TTimeStamp GetLastUsage()
virtual Int_t Recv(TMessage *&mess)
Receive a TMessage object.
virtual void Close(Option_t *opt="")
Close the socket.
virtual Int_t RecvRaw(void *buffer, Int_t length, ESendRecvOptions opt=kDefault)
Receive a raw buffer of specified length bytes.
virtual Int_t SendRaw(const void *buffer, Int_t length, ESendRecvOptions opt=kDefault)
Send a raw buffer of specified length.
void SetCompressionSettings(Int_t settings=ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose)
Used to specify the compression level and algorithm: settings = 100 * algorithm + level.
virtual Int_t SendObject(const TObject *obj, Int_t kind=kMESS_OBJECT)
Send an object.
virtual Bool_t IsValid() const
virtual Int_t Send(const TMessage &mess)
Send a TMessage object.
Double_t RealTime()
Stop the stopwatch (if it is running) and return the realtime (in seconds) passed between the start a...
void Start(Bool_t reset=kTRUE)
Start the stopwatch.
Double_t CpuTime()
Stop the stopwatch (if it is running) and return the cputime (in seconds) passed between the start an...
void Stop()
Stop the stopwatch.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
virtual int Umask(Int_t mask)
Set the process file creation mode mask.
virtual Int_t GetGid(const char *group=0)
Returns the group's id. If group = 0, returns current user's group.
virtual void AddFileHandler(TFileHandler *fh)
Add a file handler to the list of system file handlers.
virtual const char * GetBuildCompilerVersion() const
Return the build compiler version.
virtual TInetAddress GetSockName(int sock)
Get Internet Protocol (IP) address of host and port #.
virtual Func_t DynFindSymbol(const char *module, const char *entry)
Find specific entry point in specified library.
virtual void Syslog(ELogLevel level, const char *mess)
Send mess to syslog daemon.
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 ~.
virtual void Openlog(const char *name, Int_t options, ELogFacility facility)
Open connection to system log daemon.
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 void FreeDirectory(void *dirp)
Free a directory.
virtual void * OpenDirectory(const char *name)
Open a directory. Returns 0 if directory does not exist.
virtual int GetPid()
Get process id.
virtual const char * Getenv(const char *env)
Get environment variable.
virtual const char * GetIncludePath()
Get the list of include path.
virtual int mkdir(const char *name, Bool_t recursive=kFALSE)
Make a file system directory.
virtual int MakeDirectory(const char *name)
Make a directory.
virtual Int_t Exec(const char *shellcmd)
Execute a command.
virtual int GetSysInfo(SysInfo_t *info) const
Returns static system info, like OS type, CPU type, number of CPUs RAM size, etc into the SysInfo_t s...
virtual const char * HomeDirectory(const char *userName=0)
Return the user's home directory.
virtual void SetIncludePath(const char *includePath)
IncludePath should contain the list of compiler flags to indicate where to find user defined header f...
virtual TFileHandler * RemoveFileHandler(TFileHandler *fh)
Remove a file handler from the list of file handlers.
virtual int Load(const char *module, const char *entry="", Bool_t system=kFALSE)
Load a shared library.
virtual TSeqCollection * GetListOfFileHandlers() const
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 const char * GetDirEntry(void *dirp)
Get a directory entry. Returns 0 if no more entries.
virtual void ExitLoop()
Exit from event loop.
virtual Bool_t ChangeDirectory(const char *path)
Change directory.
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 GetProcInfo(ProcInfo_t *info) const
Returns cpu and memory used by this process into the ProcInfo_t structure.
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 void Exit(int code, Bool_t mode=kTRUE)
Exit the application.
virtual const char * HostName()
Return the system's host name.
virtual void SetDynamicPath(const char *pathname)
Set the dynamic path to a new value.
virtual void Sleep(UInt_t milliSec)
Sleep milliSec milli seconds.
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 Int_t GetUid(const char *user=0)
Returns the user's id. If user = 0, returns current user's id.
virtual void Setenv(const char *name, const char *value)
Set environment variable.
virtual const char * GetBuildArch() const
Return the build architecture.
virtual void Abort(int code=0)
Abort the application.
virtual int Unlink(const char *name)
Unlink, i.e.
virtual void StackTrace()
Print a stack trace.
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.
char * DynamicPathName(const char *lib, Bool_t quiet=kFALSE)
Find a dynamic library called lib using the system search paths.
The TTimeStamp encapsulates seconds and ns since EPOCH.
const char * AsString(const Option_t *option="") const
Return the date & time as a string.
Handles synchronous and a-synchronous timer events.
virtual void Start(Long_t milliSec=-1, Bool_t singleShot=kFALSE)
Starts the timer with a milliSec timeout.
virtual void TurnOn()
Add the timer to the system timer list.
void Reset()
Reset the timer.
This class represents a WWW compatible URL.
const char * GetFile() const
const char * GetHostFQDN() const
Return fully qualified domain name of url host.
const char * GetProtocol() const
Abstract interface for the PROOF player.
virtual void AddInput(TObject *inp)=0
virtual TQueryResult * GetCurrentQuery() const =0
virtual Int_t GetLearnEntries()=0
virtual TList * GetInputList() const =0
virtual void UpdateProgressInfo()=0
virtual Long64_t GetEventsProcessed() const =0
virtual void SetMerging(Bool_t on=kTRUE)=0
virtual EExitStatus GetExitStatus() const =0
virtual void AddQueryResult(TQueryResult *q)=0
virtual void MergeOutput(Bool_t=kFALSE)=0
static TVirtualProofPlayer * Create(const char *player, TProof *p, TSocket *s=0)
Create a PROOF player.
virtual Int_t AddOutputObject(TObject *obj)=0
virtual void HandleGetTreeHeader(TMessage *mess)=0
virtual void RemoveQueryResult(const char *ref)=0
virtual Int_t SavePartialResults(Bool_t queryend=kFALSE, Bool_t force=kFALSE)=0
virtual void StopProcess(Bool_t abort, Int_t timeout=-1)=0
virtual Long64_t Process(TDSet *set, const char *selector, Option_t *option="", Long64_t nentries=-1, Long64_t firstentry=0)=0
virtual TProofProgressStatus * GetProgressStatus() const =0
virtual void SetOutputFilePath(const char *fp)=0
virtual TList * GetOutputList() const =0
virtual void SetCurrentQuery(TQueryResult *q)=0
virtual Long64_t GetCacheSize()=0
static constexpr double nm
static constexpr double s
static constexpr double pc
static constexpr double pi
static constexpr double ps
static constexpr double ns