ROOT  6.06/08
Reference Guide
TSlaveLite.cxx
Go to the documentation of this file.
1 // @(#)root/proof:$Id$
2 // Author: Gerardo Ganis March 2008
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 //////////////////////////////////////////////////////////////////////////
13 // //
14 // TSlaveLite //
15 // //
16 // This is the version of TSlave for local worker servers. //
17 // See TSlave for details. //
18 // //
19 //////////////////////////////////////////////////////////////////////////
20 
21 #include "RConfigure.h"
22 #include "TSlaveLite.h"
23 #include "TProof.h"
24 #include "TProofServ.h"
25 #include "TSystem.h"
26 #include "TEnv.h"
27 #include "TROOT.h"
28 #include "TUrl.h"
29 #include "TMessage.h"
30 #include "TMonitor.h"
31 #include "TError.h"
32 #include "TSocket.h"
33 #include "TSysEvtHandler.h"
34 #include "TVirtualMutex.h"
35 
37 
38 //______________________________________________________________________________
39 //---- error handling ----------------------------------------------------------
40 //---- Needed to avoid blocking on the CINT mutex in printouts -----------------
41 
42 ////////////////////////////////////////////////////////////////////////////////
43 /// Interface to ErrorHandler (protected).
44 
45 void TSlaveLite::DoError(int level, const char *location,
46  const char *fmt, va_list va) const
47 {
48  ::ErrorHandler(level, Form("TSlaveLite::%s", location), fmt, va);
49 }
50 
51 ////////////////////////////////////////////////////////////////////////////////
52 /// Create a PROOF slave object. Called via the TProof ctor.
53 
54 TSlaveLite::TSlaveLite(const char *ord, Int_t perf,
55  const char *image, TProof *proof, Int_t stype,
56  const char *workdir, const char *msd, Int_t) : TSlave()
57 {
58  fName = ord; // Need this during the setup phase; see end of SetupServ
59  fImage = image;
60  fProofWorkDir = workdir;
61  fWorkDir = workdir;
62  fOrdinal = ord;
63  fPerfIdx = perf;
64  fProof = proof;
65  fSlaveType = (ESlaveType)stype;
66  fMsd = msd;
67  fIntHandler = 0;
68  fValid = kFALSE;
70 
71  if (fPerfIdx > 0) Init();
72 }
73 
74 ////////////////////////////////////////////////////////////////////////////////
75 /// Init a PROOF worker object. Called via the TSlaveLite ctor.
76 
78 {
79  // Command to be executed
80  TString cmd;
81  cmd.Form(". %s/worker-%s.env; export ROOTBINDIR=\"%s\"; %s/proofserv proofslave lite %d %d 0&",
83  gSystem->GetPid(), gDebug);
84  // Execute
85  if (gSystem->Exec(cmd) != 0) {
86  Error("Init", "an error occured while executing 'proofserv'");
88  return;
89  }
90 }
91 
92 ////////////////////////////////////////////////////////////////////////////////
93 /// Init a PROOF slave object. Called via the TSlaveLite ctor.
94 /// The Init method is technology specific and is overwritten by derived
95 /// classes.
96 
98 {
99  // Get back startup message of proofserv (we are now talking with
100  // the real proofserver and not anymore with the proofd front-end)
101  Int_t what;
102  char buf[512];
103  if (fSocket->Recv(buf, sizeof(buf), what) <= 0) {
104  Error("SetupServ", "failed to receive slave startup message");
105  Close("S");
107  fValid = kFALSE;
108  return -1;
109  }
110 
111  if (what == kMESS_NOTOK) {
113  fValid = kFALSE;
114  return -1;
115  }
116 
117  // Receive the unique tag and save it as name of this object
118  TMessage *msg = 0;
119  if (fSocket->Recv(msg) <= 0 || !msg || msg->What() != kPROOF_SESSIONTAG) {
120  Error("SetupServ", "failed to receive unique session tag");
121  Close("S");
123  fValid = kFALSE;
124  return -1;
125  }
126  // Extract the unique tag
127  (*msg) >> fSessionTag;
128 
129  // Set the real name (temporarly set to ordinal for the setup)
130  fName = gSystem->HostName();
131 
132  // We are done
133  return 0;
134 }
135 
136 ////////////////////////////////////////////////////////////////////////////////
137 /// Destroy slave.
138 
140 {
141  Close();
142 }
143 
144 ////////////////////////////////////////////////////////////////////////////////
145 /// Close slave socket.
146 
148 {
149  if (fSocket)
150  // Closing socket ...
151  fSocket->Close(opt);
152 
155 }
156 
157 ////////////////////////////////////////////////////////////////////////////////
158 /// Printf info about slave.
159 
161 {
162  const char *sst[] = { "invalid" , "valid", "inactive" };
163  Int_t st = fSocket ? ((fStatus == kInactive) ? 2 : 1) : 0;
164 
165  Printf("*** Worker %s (%s)", fOrdinal.Data(), sst[st]);
166  Printf(" Worker session tag: %s", GetSessionTag());
167  Printf(" ROOT version|rev|tag: %s", GetROOTVersion());
168  Printf(" Architecture-Compiler: %s", GetArchCompiler());
169  if (fSocket) {
170  Printf(" Working directory: %s", GetWorkDir());
171  Printf(" MB's processed: %.2f", float(GetBytesRead())/(1024*1024));
172  Printf(" MB's sent: %.2f", float(fSocket->GetBytesRecv())/(1024*1024));
173  Printf(" MB's received: %.2f", float(fSocket->GetBytesSent())/(1024*1024));
174  Printf(" Real time used (s): %.3f", GetRealTime());
175  Printf(" CPU time used (s): %.3f", GetCpuTime());
176  }
177 }
void Close(Option_t *opt="")
Close slave socket.
Definition: TSlaveLite.cxx:147
virtual int GetPid()
Get process id.
Definition: TSystem.cxx:711
UInt_t GetBytesRecv() const
Definition: TSocket.h:150
const char Option_t
Definition: RtypesCore.h:62
virtual Int_t Recv(TMessage *&mess)
Receive a TMessage object.
Definition: TSocket.cxx:818
Float_t GetCpuTime() const
Definition: TSlave.h:142
Bool_t fValid
Definition: TSlaveLite.h:38
const char * GetROOTVersion() const
Definition: TSlave.h:152
Int_t SetupServ(Int_t stype, const char *conffile)
Init a PROOF slave object.
Definition: TSlaveLite.cxx:97
Basic string class.
Definition: TString.h:137
int Int_t
Definition: RtypesCore.h:41
const Bool_t kFALSE
Definition: Rtypes.h:92
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
Definition: TObject.cxx:732
#define SafeDelete(p)
Definition: RConfig.h:449
TString fSessionTag
Definition: TSlave.h:103
TString fOrdinal
Definition: TSlave.h:90
static const char * what
Definition: stlLoader.cc:6
const char * GetSessionTag() const
Definition: TSlave.h:147
virtual void Close(Option_t *opt="")
Close the socket.
Definition: TSocket.cxx:388
R__EXTERN TSystem * gSystem
Definition: TSystem.h:549
UInt_t GetBytesSent() const
Definition: TSocket.h:149
TString fWorkDir
Definition: TSlave.h:86
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Definition: TString.cxx:2321
virtual ~TSlaveLite()
Destroy slave.
Definition: TSlaveLite.cxx:139
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition: TObject.cxx:918
char * Form(const char *fmt,...)
TSocket * fSocket
Definition: TSlave.h:93
virtual Int_t Exec(const char *shellcmd)
Execute a command.
Definition: TSystem.cxx:657
const Int_t kPROOF_Protocol
Definition: TProof.h:143
Float_t GetRealTime() const
Definition: TSlave.h:141
#define Printf
Definition: TGeoToOCC.h:18
Int_t fProtocol
Definition: TSlave.h:92
TFileHandler * fInput
Definition: TSlave.h:95
UInt_t What() const
Definition: TMessage.h:80
TString fName
Definition: TSlave.h:83
#define ClassImp(name)
Definition: Rtypes.h:279
TProof * fProof
Definition: TSlave.h:94
virtual const char * HostName()
Return the system&#39;s host name.
Definition: TSystem.cxx:307
TString fMsd
Definition: TSlave.h:102
Definition: TProof.h:339
TSignalHandler * fIntHandler
Definition: TSlaveLite.h:39
void Init()
Init a PROOF worker object. Called via the TSlaveLite ctor.
Definition: TSlaveLite.cxx:77
const char * GetWorkDir() const
Definition: TSlave.h:131
TString fImage
Definition: TSlave.h:84
Int_t fStatus
Definition: TSlave.h:100
typedef void((*Func_t)())
const char * GetArchCompiler() const
Definition: TSlave.h:151
void Print(Option_t *option="") const
Printf info about slave.
Definition: TSlaveLite.cxx:160
void ErrorHandler(int level, const char *location, const char *fmt, va_list va)
General error handler function. It calls the user set error handler.
Definition: TError.cxx:202
R__EXTERN Int_t gDebug
Definition: Rtypes.h:128
static const TString & GetBinDir()
Get the binary directory in the installation. Static utility function.
Definition: TROOT.cxx:2538
Definition: TSlave.h:50
ESlaveType
Definition: TSlave.h:59
Long64_t GetBytesRead() const
Definition: TSlave.h:140
ESlaveType fSlaveType
Definition: TSlave.h:99
TString fProofWorkDir
Definition: TSlave.h:85
TSlaveLite(const char *ord, Int_t perf, const char *image, TProof *proof, Int_t stype, const char *workdir, const char *msd, Int_t=1)
Create a PROOF slave object. Called via the TProof ctor.
Definition: TSlaveLite.cxx:54
Int_t fPerfIdx
Definition: TSlave.h:91
const char * Data() const
Definition: TString.h:349