28#include "RConfigure.h"
135 Init(url, conffile, confdir, loglevel, alias);
139 if (!
gROOT->GetListOfProofs()->FindObject(
this))
140 gROOT->GetListOfProofs()->Add(
this);
155 const char *confdir,
Int_t loglevel,
const char *)
166 if (!conffile || !conffile[0])
168 if (!confdir || !confdir[0])
177 Error(
"Init",
"could not create/assert sandbox for this session");
184 if (sockpathdir(sockpathdir.
Length()-1) ==
'/') sockpathdir.
Remove(sockpathdir.
Length()-1);
188 Error(
"Init",
"Unix socket path '%s' is too long (%d bytes):",
190 Error(
"Init",
"use 'ProofLite.SockPathDir' to create it under a directory different"
191 " from '%s'", sockpathdir.
Data());
222 if (dynconf.
Length() > 0) {
265 Warning(
"Init",
"problems applying fMaxQueries");
268 Warning(
"Init",
"problems initializing the dataset manager");
323 Warning(
"Init",
"fork-based workers startup is not available on Windows - ignoring");
335 Info(
"Init",
" %d global package directories registered", nglb);
340 Error(
"Init",
"problems setting up workers");
366 gROOT->GetListOfSockets()->Add(
this);
411 TString sysname =
"system.rootrc";
421 ::Error(
"TProofLite::GetNumberOfWorkers",
422 "PROOF-Lite disabled by the system administrator: sorry!");
429 if (url && strlen(url)) {
433 nw.
Remove(0, in + strlen(
"workers="));
437 if ((nWorkers = nw.
Atoi()) <= 0) {
438 ::Warning(
"TProofLite::GetNumberOfWorkers",
439 "number of workers specified by 'workers='"
440 " is non-positive: using default");
453 if ((nWorkers = nw.
Atoi()) == 0) {
454 ::Warning(
"TProofLite::GetNumberOfWorkers",
455 "number of workers specified by 'workers='"
456 " is non-positive: using default");
471 if (notify) notify =
kFALSE;
477 ::Warning(
"TProofLite::GetNumberOfWorkers",
"number of PROOF-Lite workers limited by"
478 " the system administrator to %d",
fgWrksMax);
500 Error(
"SetupWorkers",
501 "unable to create server socket for internal communications");
512 Int_t nWrksDone = 0, nWrksTot = -1;
520 for (; ord < nWrksTot; ord++) {
524 fullord.
Form(
"%s.%d", o, ord);
534 NotifyStartUp(
"Opening connections to workers", ++nWrksDone, nWrksTot);
539 Warning(
"SetupWorkers",
"standard startup: workers already started");
547 for (; ord < nWrksTot; ord++) {
551 fullord.
Form(
"%s.%d", o, ord + 1);
552 if (!clones.
IsNull()) clones +=
" ";
560 NotifyStartUp(
"Opening connections to workers", ++nWrksDone, nWrksTot);
575 while (started.
GetSize() > 0 && nSelects < nWrksTot) {
582 if (xs == (
TSocket *) -1)
continue;
589 if (s->
Recv(msg) < 0) {
590 Warning(
"SetupWorkers",
"problems receiving message from accepted socket!");
607 gROOT->GetListOfSockets()->Remove(s);
625 if (startedWorkers) startedWorkers->
Add(wrk);
627 NotifyStartUp(
"Setting up worker servers", ++nWrksDone, nWrksTot);
634 Warning(
"SetupWorkers",
"received empty message from accepted socket!");
647 gROOT->GetPluginManager()->FindHandler(
"TProofProgressDialog")))
672 snprintf(msg, 512,
"%s: OK (%d workers) \n",
675 snprintf(msg, 512,
"%s: %d out of %d (%d %%)\r",
676 action, done, tot, frac);
678 fprintf(stderr,
"%s", msg);
687 if (!ord || strlen(ord) <= 0) {
688 Error(
"SetProofServEnv",
"ordinal string undefined");
694 FILE *frc = fopen(rcfile.
Data(),
"w");
696 Error(
"SetProofServEnv",
"cannot open rc file %s", rcfile.
Data());
701 fprintf(frc,
"# The session working dir\n");
702 fprintf(frc,
"ProofServ.SessionDir: %s/worker-%s\n",
fWorkDir.
Data(), ord);
705 fprintf(frc,
"# Session tag\n");
706 fprintf(frc,
"ProofServ.SessionTag: %s\n",
GetName());
709 fprintf(frc,
"# Proof Log/Debug level\n");
710 fprintf(frc,
"Proof.DebugLevel: %d\n",
gDebug);
713 fprintf(frc,
"# Ordinal number\n");
714 fprintf(frc,
"ProofServ.Ordinal: %s\n", ord);
717 fprintf(frc,
"# ROOT Version tag\n");
718 fprintf(frc,
"ProofServ.RootVersionTag: %s\n",
gROOT->GetVersion());
723 Warning(
"SetProofServEnv",
"problems getting sandbox string for worker");
724 fprintf(frc,
"# Users sandbox\n");
725 fprintf(frc,
"ProofServ.Sandbox: %s\n", sandbox.
Data());
728 fprintf(frc,
"# Users cache\n");
732 fprintf(frc,
"# Users packages\n");
736 fprintf(frc,
"# Server image\n");
737 fprintf(frc,
"ProofServ.Image: %s\n",
fImage.
Data());
740 fprintf(frc,
"# Open socket\n");
744 fprintf(frc,
"# Client Protocol\n");
752 FILE *fenv = fopen(envfile.
Data(),
"w");
754 Error(
"SetProofServEnv",
"cannot open env file %s", envfile.
Data());
765 fprintf(fenv,
"export ROOTPROOFLOGFILE=%s\n", logfile.
Data());
767 fprintf(fenv,
"export ROOTRCFILE=%s\n", rcfile.
Data());
769 fprintf(fenv,
"export ROOTVERSIONTAG=%s\n",
gROOT->GetVersion());
771 fprintf(fenv,
"export ROOTPROOFLITE=%d\n",
fNWorkers);
773 fprintf(fenv,
"export LOCALDATASERVER=\"file://\"\n");
779 while ((env = (
TNamed *)nxenv())) {
782 fprintf(fenv,
"export %s=%s\n", env->
GetName(), senv.
Data());
783 if (namelist.
Length() > 0)
787 fprintf(fenv,
"export PROOF_ALLVARS=%s\n", namelist.
Data());
804 if (!logfile)
return;
807 if (s.
Contains(
"<logfilewrk>") && logfile) {
837 var =
dynamic_cast<TNamed *
>(envVars->
FindObject(
"PROOF_SLAVE_CPUPIN_ORDER"));
838 if (var) cpuPinList = var->
GetTitle();
850 if (cpuPinList.
IsNull() || (cpuPinList ==
"*")) {
860 for (
Int_t i=0; cpuPinList.
Tokenize(tok, from,
"\\+"); i++) {
862 n = (tok.
Atoi() % nCpus);
929 lastsess.
Form(
"%s/last-lite-session", sessdir.
Data());
956 Printf(
"*** PROOF-Lite cluster %s(sequential mode)", ord.
Data());
972 Printf(
"ROOT version|rev|tag: %s", ver.
Data());
988 Printf(
"List of workers:");
990 while (
TSlave* sl =
dynamic_cast<TSlave*
>(nextslave())) {
1033 Info(
"SetQueryRunning",
"starting query: %d", pq->
GetSeqNum());
1054 const char *selection,
Option_t *option,
1061 Info(
"DrawSelect",
"not idle, asynchronous Draw not supported");
1089 TString opt(option), optfb, outfile;
1091 if (opt.Contains(
"fb=") || opt.Contains(
"feedback="))
SetFeedback(opt, optfb, 0);
1098 Info(
"Process",
"asynchronous mode not yet supported in PROOF-Lite");
1104 Info(
"Process",
"not idle: cannot accept queries");
1115 Error(
"Process",
"invalid sesion or query-result manager undefined!");
1132 Error(
"Process",
"from AssertDataSet: %s", emsg.
Data());
1136 Error(
"Process",
"no files to process!");
1139 }
else if (hasNoData) {
1148 emsg.
Form(
"dataset manager not initialized!");
1153 emsg.
Form(
"requested dataset '%s' does not exists", dsn.
Data());
1160 fcmap->
SetName(
"PROOF_FilesToProcess");
1166 Error(
"HandleProcess",
"%s", emsg.
Data());
1173 TString selec(selector), varexp, selection, objname;
1175 if (selec.BeginsWith(
"draw:")) {
1180 Error(
"Process",
"draw query: error parsing arguments '%s', '%s', '%s'",
1181 varexp.
Data(), selection.
Data(), opt.Data());
1226 if (!
gROOT->IsBatch()) {
1275 TList *startedWorkers = 0;
1277 startedWorkers =
new TList;
1287 if (selector && strlen(selector)) {
1326 Emit(
"StopProcess(Bool_t)", abort);
1351 Warning(
"ProcessNext",
"problems registering produced datasets: %s", err.
Data());
1373 if (!(pq->
IsDraw()) && memqueries >= 0) {
1383 msg.
Form(
"Lite-0: all output objects have been merged ");
1384 fprintf(stderr,
"%s\n", msg.
Data());
1400 if (sst) rv = sst->
GetVal();
1429 if (
gROOT->GetPluginManager()) {
1431 h =
gROOT->GetPluginManager()->FindHandler(
"TDataSetManager", dsm);
1432 if (
h &&
h->LoadPlugin() != -1) {
1436 user.Data(), dsm.
Data()));
1441 Warning(
"InitDataSetManager",
"dataset manager plug-in initialization failed");
1456 h =
gROOT->GetPluginManager()->FindHandler(
"TDataSetManager",
"file");
1457 if (
h &&
h->LoadPlugin() == -1)
h = 0;
1462 group.Data(), user.Data(),
1466 Warning(
"InitDataSetManager",
"default dataset manager plug-in initialization failed");
1472 Info(
"InitDataSetManager",
"datasetmgr Cq: %d, Ar: %d, Av: %d, Ti: %d, Sb: %d",
1482 if (!dsReqCfg.
IsNull()) {
1483 TPMERegexp reReqDir(
"(^| )(dir:)?([^ ]+)( |$)");
1485 if (reReqDir.
Match(dsReqCfg) == 5) {
1487 dsDirFmt.
Form(
"dir:%s perms:open", reReqDir[3].Data());
1490 Warning(
"InitDataSetManager",
"failed init of dataset staging requests repository");
1494 Warning(
"InitDataSetManager",
"specify, with [dir:]<path>, a valid path for staging requests");
1497 Warning(
"InitDataSetManager",
"no repository for staging requests available");
1544 if (!macro || !macro[0]) {
1545 Error(
"Load",
"need to specify a macro name");
1551 while (macs.Tokenize(mac, from,
",")) {
1576 return TProof::Load(macro, notOnClient, uniqueOnly, wrks);
1607 Info(
"CopyMacroToCache",
"enter: names: %s, %s", macro,
name.Data());
1611 Error(
"CopyMacroToCache",
"file %s not found or not readable",
name.Data());
1631 const char *hext[] = {
".h",
".hh",
"" };
1634 while (strlen(hext[i]) > 0) {
1635 hname =
name(0, dot);
1639 if (!checkedext.
IsNull()) checkedext +=
",";
1640 checkedext += hext[i];
1644 if (hname.
IsNull() && headerRequired == 1) {
1645 Error(
"CopyMacroToCache",
"header file for %s not found or not readable "
1646 "(checked extensions: %s)",
name.Data(), checkedext.
Data());
1649 if (headerRequired < 0)
1663 if (md5 && md5cache && (*md5 == *md5cache))
1664 useCacheBinaries =
kTRUE;
1669 if (md5h && md5hcache && (*md5h != *md5hcache))
1670 useCacheBinaries =
kFALSE;
1681 dot = vername.
Last(
'.');
1684 vername +=
".binversion";
1688 if (useCacheBinaries) {
1690 FILE *
f = fopen(
Form(
"%s/%s", cacheDir.
Data(), vername.
Data()),
"r");
1696 if (!
f ||
v !=
gROOT->GetVersion() ||
r !=
gROOT->GetGitCommit())
1697 useCacheBinaries =
kFALSE;
1702 dot = binname.
Last(
'.');
1710 if (useCacheBinaries) {
1717 if (!strncmp(
e, binname.
Data(), binname.
Length()) ||
1729 Info(
"CopyMacroToCache",
1730 "retrieving %s from cache", fncache.
Data());
1744 Error(
"CopyMacroToCache",
"could not create a selector from %s", macro);
1757 if (!strncmp(
e, binname.
Data(), binname.
Length()) ||
1769 Info(
"CopyMacroToCache",
"caching %s ...",
e);
1783 FILE *
f = fopen(
Form(
"%s/%s", cacheDir.
Data(), vername.
Data()),
"w");
1785 fputs(
gROOT->GetVersion(),
f);
1786 fputs(
Form(
"\n%s",
gROOT->GetGitCommit()),
f);
1792 if (!useCacheBinaries) {
1795 Info(
"CopyMacroToCache",
"caching %s ...",
name.Data());
1800 Info(
"CopyMacroToCache",
"caching %s ...", hname.
Data());
1825 if (maxold < 0)
return 0;
1835 if (!strncmp(
e,
"session-", 8) && !strstr(
e,
GetName())) {
1838 if (i !=
kNPOS)
d.Remove(i);
1840 if (i !=
kNPOS)
d.Remove(0,i+1);
1850 while (olddirs->
GetSize() > maxold) {
1851 if (notify &&
gDebug > 0)
1852 Printf(
"Cleaning sandbox at: %s", sandbox.
Data());
1878 Int_t ntot = 0, npre = 0, ndraw= 0;
1911 Warning(
"GetListOfQueries",
"unable to clone TProofQueryResult '%s:%s'",
1946 Info(
"RegisterDataSet",
"dataset manager not available");
1950 if (!uri || strlen(uri) <= 0) {
1951 Info(
"RegisterDataSet",
"specifying a dataset name is mandatory");
1959 parallelverify =
kTRUE;
1969 Error(
"RegisterDataSet",
"can not save an empty list.");
1976 Info(
"RegisterDataSet",
"dataset registration not allowed");
1981 Error(
"RegisterDataSet",
"dataset was not saved");
1984 if (!parallelverify)
return result;
1989 Error(
"RegisterDataSet",
"problems verifying dataset '%s'", uri);
2005 Info(
"ExistsDataSet",
"dataset manager not available");
2009 if (!dataset || strlen(dataset) <= 0) {
2010 Info(
"SetDataSetTreeName",
"specifying a dataset name is mandatory");
2014 if (!treename || strlen(treename) <= 0) {
2015 Info(
"SetDataSetTreeName",
"specifying a tree name is mandatory");
2034 Info(
"ExistsDataSet",
"dataset manager not available");
2038 if (!uri || strlen(uri) <= 0) {
2039 Error(
"ExistsDataSet",
"dataset name missing");
2053 Info(
"GetDataSets",
"dataset manager not available");
2058 if (srvex && strlen(srvex) > 0) {
2073 Info(
"GetDataSet",
"dataset manager not available");
2087 Info(
"GetDataSet",
"dataset manager not available");
2091 if (!uri || strlen(uri) <= 0) {
2092 Info(
"GetDataSet",
"specifying a dataset name is mandatory");
2107 Info(
"RemoveDataSet",
"dataset manager not available");
2117 Info(
"RemoveDataSet",
"dataset creation / removal not allowed");
2134 Error(
"RequestStagingDataSet",
"invalid dataset specified");
2139 Error(
"RequestStagingDataSet",
"no dataset staging request repository available");
2143 TString dsUser, dsGroup, dsName, dsTree;
2151 Warning(
"RequestStagingDataSet",
"staging of %s already requested", dataset);
2157 if (!
fc || (
fc->GetNFiles() == 0)) {
2158 Error(
"RequestStagingDataSet",
"empty dataset or no dataset returned");
2169 for (
Int_t i=0; i<nToErase; i++)
2179 Error(
"RequestStagingDataSet",
"can't register staging request for %s", dataset);
2184 Info(
"RequestStagingDataSet",
"Staging request registered for %s", dataset);
2198 Error(
"CancelStagingDataSet",
"invalid dataset specified");
2203 Error(
"CancelStagingDataSet",
"no dataset staging request repository available");
2226 Error(
"GetStagingStatusDataSet",
"invalid dataset specified");
2231 Error(
"GetStagingStatusDataSet",
"no dataset staging request repository available");
2243 Info(
"GetStagingStatusDataSet",
"no pending staging request for %s", dataset);
2258 Info(
"VerifyDataSet",
"dataset manager not available");
2269 Info(
"VerifyDataSet",
"dataset verification not allowed");
2317 if (dataFile.
Length() > 0) {
2328 Warning(
"SendInputDataFile",
"problems copying '%s' to '%s'",
2343 Info(
"Remove",
"Enter: %s, %d", ref, all);
2353 if (queryref ==
"cleanupdir") {
2359 Info(
"Remove",
"%d directories removed", nd);
2382 Warning(
"Remove",
"query result manager undefined!");
2387 "query %s could not be removed (unable to lock session)", queryref.
Data());
2401 Error(
"GetTreeHeader",
"undefined TDSet");
2410 PDB(kGlobal, 1)
Info(
"GetTreeHeader",
"empty TDSet");
2415 t = (
TTree*)
f->Get(
e->GetObjName());
2422 while ((
e = dset->
Next()) != 0) {
2427 entries +=
t1->GetEntries();
2462 Error(
"FindUniqueSlaves",
"first object in fActiveSlaves not a TSlave: embarrasing!");
2497 if (!dirname)
return;
2505 const char *ent = 0;
2507 fn.
Form(
"%s/%s", dirname, ent);
2541 Info(
"PollForNewWorkers",
"max reached: %d workers started",
fNWorkers);
2555 Int_t nWrksDone = 0, nWrksTot = -1;
2562 for (; ord < nWrksTot; ord++) {
2565 fullord =
Form(
"0.%d", ord);
2575 Info(
"PollForNewWorkers",
"additional worker '%s' started", fullord.
Data());
2578 NotifyStartUp(
"Opening connections to workers", ++nWrksDone, nWrksTot);
2592 while (started.
GetSize() > 0 && nSelects < nWrksTot) {
2599 if (xs == (
TSocket *) -1)
continue;
2606 if (s->
Recv(msg) < 0) {
2607 Warning(
"PollForNewWorkers",
"problems receiving message from accepted socket!");
2623 gROOT->GetListOfSockets()->Remove(s);
2641 addedWorkers->
Add(wrk);
2643 NotifyStartUp(
"Setting up added worker servers", ++nWrksDone, nWrksTot);
2650 Warning(
"PollForNewWorkers",
"received empty message from accepted socket!");
2678 Info(
"PollForNewWorkers",
"Will send the PROCESS message to selected workers");
2686 TIter naw(addedWorkers);
2687 while ((wrk = (
TSlave *)naw())) {
2691 delete addedWorkers;
R__EXTERN TApplication * gApplication
const Bool_t kSortDescending
R__EXTERN TProofServ * gProofServ
const char *const kPROOF_QueryDir
const char *const kPROOF_DataSetDir
const char *const kPROOF_CacheLockFile
const char *const kPROOF_CacheDir
const char *const kPROOF_PackDir
const char *const kPROOF_ConfFile
const char *const kPROOF_QueryLockFile
R__EXTERN TProof * gProof
const char *const kPROOF_ConfDir
const Int_t kPROOF_Protocol
R__EXTERN TVirtualMutex * gROOTMutex
char * Form(const char *fmt,...)
void Printf(const char *fmt,...)
Bool_t R_ISREG(Int_t mode)
Bool_t R_ISDIR(Int_t mode)
R__EXTERN TSystem * gSystem
#define R__LOCKGUARD(mutex)
static struct mg_connection * fc(struct mg_context *ctx)
TSignalHandler * GetSignalHandler() const
void SetName(const char *name)
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 TDSetElement * Next(Long64_t totalEntries=-1)
Returns next TDSetElement.
virtual void Reset()
Reset or initialize access to the elements.
TObject * GetEntryList() const
TList * GetListOfElements() 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 void ShowDataSets(const char *uri="*", const char *opt="")
Prints formatted information about the dataset 'uri'.
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 TMap * GetSubDataSets(const char *uri, const char *excludeservers)
Partition dataset 'ds' accordingly to the servers.
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.
The TEnv class reads config files, by default named .rootrc.
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.
Class that contains a list of TFileInfo's and accumulated meta data information about its entries.
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.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
virtual void Add(TObject *obj)
virtual TObject * Remove(TObject *obj)
Remove object from the list.
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
virtual 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.
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
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.
virtual void DeActivateAll()
De-activate all activated sockets.
The TNamed class is the base class for all named ROOT classes.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
Collectable string class.
Mother of all ROOT objects.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
@ 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 GetEnabledPackages(TString &packlist)
Method to get a semi-colon separated list with the names of the enabled packages.
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 ...
const char * GetDir() const
Named parameter, streamable and storable.
const AParamType & GetVal() const
Longptr_t ExecPlugin(int nargs, const T &... params)
Int_t LoadPlugin()
Load the plugin library for this handler.
This class starts a PROOF session on the local machine: no daemons, client and master merged,...
Long64_t Process(TDSet *dset, const char *sel, Option_t *o="", Long64_t nent=-1, Long64_t fst=0)
Process a data set (TDSet) using the specified selector (.C) file.
TProofLockPath * fQueryLock
static Int_t GetNumberOfWorkers(const char *url=0)
Static method to determine the number of workers giving priority to users request.
void ClearCache(const char *file=0)
Remove files from all file caches.
Int_t CreateSandbox()
Create the sandbox for this session.
Int_t SetDataSetTreeName(const char *dataset, const char *treename)
Set/Change the name of the default tree.
Bool_t RegisterDataSet(const char *dsName, TFileCollection *ds, const char *opt="")
Register the 'dataSet' on the cluster under the current user, group and the given 'dataSetName'.
TQueryResultManager * fQMgr
TTree * GetTreeHeader(TDSet *tdset)
Creates a tree header (a tree with nonexisting files) object for the DataSet.
Int_t InitDataSetManager()
Initialize the dataset manager from directives or from defaults Return 0 on success,...
TServerSocket * fServSock
void ClearDataSetCache(const char *dataset=0)
Clear the content of the dataset cache, if any (matching 'dataset', if defined).
TDataSetManagerFile * fDataSetStgRepo
Int_t SetProofServEnv(const char *ord)
Create environment files for worker 'ord'.
Int_t PollForNewWorkers()
Simulate dynamic addition, for test purposes.
Long64_t DrawSelect(TDSet *dset, const char *varexp, const char *selection="", Option_t *option="", Long64_t nentries=-1, Long64_t firstentry=0)
Execute the specified drawing action on a data set (TDSet).
void NotifyStartUp(const char *action, Int_t done, Int_t tot)
Notify setting-up operation message.
void SetQueryRunning(TProofQueryResult *pq)
Set query in running state.
Int_t CleanupSandbox()
Remove old sessions dirs keep at most 'Proof.MaxOldSessions' (default 10)
Int_t VerifyDataSet(const char *uri, const char *=0)
Verify if all files in the specified dataset are available.
void FindUniqueSlaves()
Add to the fUniqueSlave list the active slaves that have a unique (user) file system image.
Bool_t ExistsDataSet(const char *uri)
Returns kTRUE if 'dataset' described by 'uri' exists, kFALSE otherwise.
Bool_t RequestStagingDataSet(const char *dataset)
Allows users to request staging of a particular dataset.
void ShowData()
List contents of the data directory in the sandbox.
TDataSetManager * fDataSetManager
virtual ~TProofLite()
Destructor.
TFileCollection * GetDataSet(const char *uri, const char *=0)
Get a list of TFileInfo objects describing the files of the specified dataset.
void ShowDataSets(const char *uri="", const char *=0)
Shows datasets in locations that match the uri By default shows the user's datasets and global ones.
Int_t Remove(const char *ref, Bool_t all)
Handle remove request.
TFileCollection * GetStagingStatusDataSet(const char *dataset)
Obtains a TFileCollection showing the staging status of the specified dataset.
Int_t Init(const char *masterurl, const char *conffile, const char *confdir, Int_t loglevel, const char *alias=0)
Start the PROOF environment.
TList * GetListOfQueries(Option_t *opt="")
Get the list of queries.
void Print(Option_t *option="") const
Print status of PROOF-Lite cluster.
Int_t RemoveDataSet(const char *uri, const char *=0)
Remove the specified dataset from the PROOF cluster.
TMap * GetDataSets(const char *uri="", const char *=0)
lists all datasets that match given uri
void ShowDataDir(const char *dirname)
List contents of the data directory 'dirname'.
void ResolveKeywords(TString &s, const char *ord, const char *logfile)
Resolve some keywords in 's' <logfilewrk>, <user>, <rootsys>, <cpupin>
Bool_t CancelStagingDataSet(const char *dataset)
Cancels a dataset staging request.
Int_t fDynamicStartupNMax
Int_t CopyMacroToCache(const char *macro, Int_t headerRequired=0, TSelector **selector=0, Int_t opt=0, TList *wrks=0)
Copy a macro, and its possible associated .h[h] file, to the cache directory, from where the workers ...
Int_t fDynamicStartupStep
TProofQueryResult * MakeQueryResult(Long64_t nent, const char *opt, Long64_t fst, TDSet *dset, const char *selec)
Create a TProofQueryResult instance for this query.
void ShowDataSetCache(const char *dataset=0)
Display the content of the dataset cache, if any (matching 'dataset', if defined).
void ShowCache(Bool_t all=kFALSE)
List contents of file cache.
void SendInputDataFile()
Make sure that the input data objects are available to the workers in a dedicated file in the cache; ...
Int_t SetupWorkers(Int_t opt=0, TList *wrks=0)
Start up PROOF workers.
TProofLockPath * fCacheLock
Int_t Load(const char *macro, Bool_t notOnClient=kFALSE, Bool_t uniqueOnly=kTRUE, TList *wrks=0)
Copy the specified macro in the cache directory.
Int_t Unlock()
Unlock the directory.
Int_t Lock()
Locks the directory.
The PROOF manager interacts with the PROOF server coordinator to create or destroy a PROOF session,...
TQueryResult version adapted to PROOF neeeds.
void SetRunning(Int_t startlog, const char *par, Int_t nwrks)
Call when running starts.
const char * GetOrdinal() const
static void ResolveKeywords(TString &fname, const char *path=0)
Replace <ord>, <user>, <u>, <group>, <stag>, <qnum>, <file>, <rver> and <build> placeholders in fname...
static Int_t RegisterDataSets(TList *in, TList *out, TDataSetManager *dsm, TString &e)
Register TFileCollections in 'out' as datasets according to the rules in 'in'.
static TMap * GetDataSetNodeMap(TFileCollection *fc, TString &emsg)
Get a map {server-name, list-of-files} for collection 'fc' to be used in TPacketizerFile.
Int_t GetNumberOfInactiveSlaves() const
Return number of inactive slaves, i.e.
void ActivateAsyncInput()
Activate the a-sync input handler.
TMonitor * fCurrentMonitor
TMonitor * fAllUniqueMonitor
void SetFeedback(TString &opt, TString &optfb, Int_t action)
Extract from opt in optfb information about wanted feedback settings.
Int_t SendCurrentState(ESlaves list=kActive)
Transfer the current state of the master to the active slave servers.
TList * fTerminatedSlaveInfos
TMonitor * fUniqueMonitor
Bool_t fProgressDialogStarted
Int_t GetClientProtocol() const
void SetupWorkersEnv(TList *wrks, Bool_t increasingpool=kFALSE)
Set up packages, loaded macros, include and lib paths ...
TList * fNonUniqueMasters
Int_t HandleOutputOptions(TString &opt, TString &target, Int_t action)
Extract from opt information about output handling settings.
TVirtualProofPlayer * fPlayer
Bool_t IsParallel() const
void AskParallel()
Ask the for the number of parallel slaves.
void SetRunStatus(ERunStatus rst)
Long64_t fLastPollWorkers_s
TQueryResult * GetQueryResult(const char *ref=0)
Return pointer to the full TQueryResult instance owned by the player and referenced by 'ref'.
Int_t GetNumberOfSlaves() const
Return number of slaves as described in the config file.
void SetPerfTree(const char *pf="perftree.root", Bool_t withWrks=kFALSE)
Enable/Disable saving of the performance tree.
Int_t AssertPath(const char *path, Bool_t writable)
Make sure that 'path' exists; if 'writable' is kTRUE, make also sure that the path is writable.
Int_t VerifyDataSetParallel(const char *uri, const char *optStr)
Internal function for parallel dataset verification used TProof::VerifyDataSet and TProofLite::Verify...
Int_t SetParallel(Int_t nodes=-1, Bool_t random=kFALSE)
Tell PROOF how many slaves to use in parallel.
Int_t Collect(const TSlave *sl, Long_t timeout=-1, Int_t endtype=-1, Bool_t deactonfail=kFALSE)
Collect responses from slave sl.
Float_t GetCpuTime() const
Int_t SendInitialState()
Transfer the initial (i.e.
Int_t Broadcast(const TMessage &mess, TList *slaves)
Broadcast a message to all slaves in the specified list.
void PrepareInputDataFile(TString &dataFile)
Prepare the file with the input data objects to be sent the master; the objects are taken from the de...
void InitMembers()
Default initializations.
void SetParameter(const char *par, const char *value)
Set input list parameter.
void SetActive(Bool_t=kTRUE)
Int_t GetParallel() const
Returns number of slaves active in parallel mode.
Long64_t GetBytesRead() const
void UpdateDialog()
Final update of the progress dialog.
void AskStatistics()
Ask the for the statistics of the slaves.
TPluginHandler * fProgressDialog
void ParseConfigField(const char *config)
The config file field may contain special instructions which need to be parsed at the beginning,...
Int_t GetNumberOfBadSlaves() const
Return number of bad slaves.
TMonitor * fActiveMonitor
Int_t GoParallel(Int_t nodes, Bool_t accept=kFALSE, Bool_t random=kFALSE)
Go in parallel mode with at most "nodes" slaves.
virtual TVirtualProofPlayer * MakePlayer(const char *player=0, TSocket *s=0)
Construct a TProofPlayer object.
TSignalHandler * fIntHandler
Int_t SavePerfTree(const char *pf=0, const char *qref=0)
Save performance information from TPerfStats to file 'pf'.
virtual Int_t Load(const char *macro, Bool_t notOnClient=kFALSE, Bool_t uniqueOnly=kTRUE, TList *wrks=0)
Load the specified macro on master, workers and, if notOnClient is kFALSE, on the client.
Int_t RemoveWorkers(TList *wrks)
Used for shuting down the workres after a query is finished.
TList * fAvailablePackages
Int_t GetNumberOfActiveSlaves() const
Return number of active slaves, i.e.
TSlave * CreateSlave(const char *url, const char *ord, Int_t perf, const char *image, const char *workdir)
Create a new TSlave of type TSlave::kSlave.
static Int_t AssertDataSet(TDSet *dset, TList *input, TDataSetManager *mgr, TString &emsg)
Make sure that dataset is in the form to be processed.
friend class TProofInputHandler
Float_t GetRealTime() const
Int_t SendGroupView()
Send to all active slaves servers the current slave group size and their unique id.
Int_t GetLogLevel() const
TList * GetListOfSlaveInfos()
Returns list of TSlaveInfo's. In case of error return 0.
TProofMgr::EServType fServType
static TList * fgProofEnvList
const char * GetUser() const
EQueryMode GetQueryMode(Option_t *mode=0) const
Find out the query mode based on the current setting and 'mode'.
Bool_t fSendGroupView
list returned by kPROOF_GETSLAVEINFO
void ResetProgressDialog(const char *sel, Int_t sz, Long64_t fst, Long64_t ent)
Reset progress dialog.
static const TList * GetEnvVars()
Get environemnt variables.
TList * fEnabledPackagesOnCluster
Int_t GetSandbox(TString &sb, Bool_t assert=kFALSE, const char *rc=0)
Set the sandbox path from ' Proof.Sandbox' or the alternative var 'rc'.
Int_t GetNumberOfUniqueSlaves() const
Return number of unique slaves, i.e.
void AddInput(TObject *obj)
Add objects that might be needed during the processing of the selector (see Process()).
TProofOutputList fOutputList
void QueryResultReady(const char *ref)
Notify availability of a query result.
void Emit(const char *signal, const T &arg)
Activate signal with single parameter.
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...
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.
virtual void SetOutputList(TList *out, Bool_t adopt=kTRUE)
Set / change the output list.
Long64_t GetEntries() const
void SetTermTime(Float_t termtime)
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.
Int_t fSeqNum
query unique sequential number
static const char * GetMacroPath()
Get macro search path. Static utility function.
static const TString & GetRootSys()
Get the rootsys directory in the installation. Static utility function.
static const TString & GetEtcDir()
Get the sysconfig directory in the installation. Static utility function.
static void SetMacroPath(const char *newpath)
Set or extend the macro search path.
A TSelector object is used by the TTree::Draw, TTree::Scan, TTree::Process to navigate in a TTree and...
static TSelector * GetSelector(const char *filename)
The code in filename is loaded (interpreted or compiled, see below), filename must contain a valid cl...
virtual TSocket * Accept(UChar_t Opt=0)
Accept a connection on a server socket.
const char * GetDataDir() const
Class describing a PROOF worker server.
TSocket * GetSocket() const
void SetSocket(TSocket *s)
void SetInputHandler(TFileHandler *ih)
Adopt and register input handler for this slave.
virtual Int_t SetupServ(Int_t stype, const char *conffile)
Init a PROOF slave object.
virtual Bool_t IsValid() const
virtual Int_t Recv(TMessage *&mess)
Receive a TMessage object.
virtual Bool_t IsValid() const
A sorted doubly linked list.
void Add(TObject *obj)
Add object in sorted list.
Double_t RealTime()
Stop the stopwatch (if it is running) and return the realtime (in seconds) passed between the start a...
void Stop()
Stop the stopwatch.
TString & Insert(Ssiz_t pos, const char *s)
Int_t Atoi() const
Return integer value of string.
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
const char * Data() const
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e.
TString & ReplaceAll(const TString &s1, const TString &s2)
Ssiz_t Last(char c) const
Find last occurrence of a character c.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
Int_t CountChar(Int_t c) const
Return number of times character c occurs in the string.
TString & Remove(Ssiz_t pos)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual const char * GetBuildCompilerVersion() const
Return the build compiler version.
virtual int Symlink(const char *from, const char *to)
Create a symbolic link from file1 to file2.
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
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 int CopyFile(const char *from, const char *to, Bool_t overwrite=kFALSE)
Copy a file.
virtual const char * Getenv(const char *env)
Get environment variable.
virtual TString SplitAclicMode(const char *filename, TString &mode, TString &args, TString &io) const
This method split a filename of the form:
virtual char * ConcatFileName(const char *dir, const char *name)
Concatenate a directory and a file name. User must delete returned string.
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...
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 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 * HostName()
Return the system's host name.
virtual const char * WorkingDirectory()
Return working directory.
virtual TSignalHandler * RemoveSignalHandler(TSignalHandler *sh)
Remove a signal handler from list of signal handlers.
virtual void Setenv(const char *name, const char *value)
Set environment variable.
virtual const char * GetBuildArch() const
Return the build architecture.
virtual const char * HomeDirectory(const char *userName=nullptr)
Return the user's home directory.
virtual TString GetDirName(const char *pathname)
Return the directory name in pathname.
virtual int Unlink(const char *name)
Unlink, i.e.
virtual UserGroup_t * GetUserInfo(Int_t uid)
Returns all user info in the UserGroup_t structure.
virtual const char * TempDirectory() const
Return a user configured or systemwide directory to create temporary files in.
A TTree represents a columnar dataset.
virtual void SetMaxEntryLoop(Long64_t maxev=kMaxEntries)
virtual void SetMaxVirtualSize(Long64_t size=0)
virtual void DropBaskets()
Remove some baskets from memory.
virtual Long64_t GetEntries() const
This class represents a RFC 3986 compatible URI.
Bool_t SetFragment(const TString &fragment)
Set fragment component of URI:
const TString GetUri() const
Returns the whole URI - an implementation of chapter 5.3 component recomposition.
void SetUser(const char *user)
void SetUrl(const char *url, Bool_t defaultIsFile=kFALSE)
Parse url character string and split in its different subcomponents.
void SetProtocol(const char *proto, Bool_t setDefaultPort=kFALSE)
Set protocol and, optionally, change the port accordingly.
const char * GetUser() const
void SetHost(const char *host)
virtual void AddInput(TObject *inp)=0
virtual Int_t GetDrawArgs(const char *var, const char *sel, Option_t *opt, TString &selector, TString &objname)=0
virtual TList * GetInputList() const =0
virtual Long64_t DrawSelect(TDSet *set, const char *varexp, const char *selection, Option_t *option="", Long64_t nentries=-1, Long64_t firstentry=0)=0
virtual EExitStatus GetExitStatus() const =0
virtual void AddQueryResult(TQueryResult *q)=0
virtual Bool_t JoinProcess(TList *workers)=0
virtual TList * GetListOfResults() const =0
virtual void RemoveQueryResult(const char *ref)=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 TList * GetOutputList() const =0
virtual void SetCurrentQuery(TQueryResult *q)=0