Logo ROOT   6.10/09
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 /** \class TSlaveLite
13 \ingroup proofkernel
14 
15 Version of TSlave for local worker servers.
16 See TSlave for details.
17 
18 */
19 
20 
21 
22 //////////////////////////////////////////////////////////////////////////
23 // //
24 // TSlaveLite //
25 // //
26 // This is the version of TSlave for local worker servers. //
27 // See TSlave for details. //
28 // //
29 //////////////////////////////////////////////////////////////////////////
30 
31 #include "RConfigure.h"
32 #include "TSlaveLite.h"
33 #include "TProof.h"
34 #include "TProofServ.h"
35 #include "TSystem.h"
36 #include "TEnv.h"
37 #include "TROOT.h"
38 #include "TUrl.h"
39 #include "TMessage.h"
40 #include "TMonitor.h"
41 #include "TError.h"
42 #include "TSocket.h"
43 #include "TSysEvtHandler.h"
44 #include "TVirtualMutex.h"
45 
47 
48 //______________________________________________________________________________
49 //---- error handling ----------------------------------------------------------
50 //---- Needed to avoid blocking on the CINT mutex in printouts -----------------
51 
52 ////////////////////////////////////////////////////////////////////////////////
53 /// Interface to ErrorHandler (protected).
54 
55 void TSlaveLite::DoError(int level, const char *location,
56  const char *fmt, va_list va) const
57 {
58  ::ErrorHandler(level, Form("TSlaveLite::%s", location), fmt, va);
59 }
60 
61 ////////////////////////////////////////////////////////////////////////////////
62 /// Create a PROOF slave object. Called via the TProof ctor.
63 
64 TSlaveLite::TSlaveLite(const char *ord, Int_t perf,
65  const char *image, TProof *proof, Int_t stype,
66  const char *workdir, const char *msd, Int_t) : TSlave()
67 {
68  fName = ord; // Need this during the setup phase; see end of SetupServ
69  fImage = image;
70  fProofWorkDir = workdir;
71  fWorkDir = workdir;
72  fOrdinal = ord;
73  fPerfIdx = perf;
74  fProof = proof;
75  fSlaveType = (ESlaveType)stype;
76  fMsd = msd;
77  fIntHandler = 0;
78  fValid = kFALSE;
80 
81  if (fPerfIdx > 0) Init();
82 }
83 
84 ////////////////////////////////////////////////////////////////////////////////
85 /// Init a PROOF worker object. Called via the TSlaveLite ctor.
86 
88 {
89  // Command to be executed
90  TString cmd;
91  cmd.Form(". %s/worker-%s.env; export ROOTBINDIR=\"%s\"; %s/proofserv proofslave lite %d %d 0&",
93  gSystem->GetPid(), gDebug);
94  // Execute
95  if (gSystem->Exec(cmd) != 0) {
96  Error("Init", "an error occured while executing 'proofserv'");
98  return;
99  }
100 }
101 
102 ////////////////////////////////////////////////////////////////////////////////
103 /// Init a PROOF slave object. Called via the TSlaveLite ctor.
104 /// The Init method is technology specific and is overwritten by derived
105 /// classes.
106 
108 {
109  // Get back startup message of proofserv (we are now talking with
110  // the real proofserver and not anymore with the proofd front-end)
111  Int_t what;
112  char buf[512];
113  if (fSocket->Recv(buf, sizeof(buf), what) <= 0) {
114  Error("SetupServ", "failed to receive slave startup message");
115  Close("S");
117  fValid = kFALSE;
118  return -1;
119  }
120 
121  if (what == kMESS_NOTOK) {
123  fValid = kFALSE;
124  return -1;
125  }
126 
127  // Receive the unique tag and save it as name of this object
128  TMessage *msg = 0;
129  if (fSocket->Recv(msg) <= 0 || !msg || msg->What() != kPROOF_SESSIONTAG) {
130  Error("SetupServ", "failed to receive unique session tag");
131  Close("S");
133  fValid = kFALSE;
134  return -1;
135  }
136  // Extract the unique tag
137  (*msg) >> fSessionTag;
138 
139  // Set the real name (temporarly set to ordinal for the setup)
140  fName = gSystem->HostName();
141 
142  // We are done
143  return 0;
144 }
145 
146 ////////////////////////////////////////////////////////////////////////////////
147 /// Destroy slave.
148 
150 {
151  Close();
152 }
153 
154 ////////////////////////////////////////////////////////////////////////////////
155 /// Close slave socket.
156 
158 {
159  if (fSocket)
160  // Closing socket ...
161  fSocket->Close(opt);
162 
165 }
166 
167 ////////////////////////////////////////////////////////////////////////////////
168 /// Printf info about slave.
169 
171 {
172  const char *sst[] = { "invalid" , "valid", "inactive" };
173  Int_t st = fSocket ? ((fStatus == kInactive) ? 2 : 1) : 0;
174 
175  Printf("*** Worker %s (%s)", fOrdinal.Data(), sst[st]);
176  Printf(" Worker session tag: %s", GetSessionTag());
177  Printf(" ROOT version|rev|tag: %s", GetROOTVersion());
178  Printf(" Architecture-Compiler: %s", GetArchCompiler());
179  if (fSocket) {
180  Printf(" Working directory: %s", GetWorkDir());
181  Printf(" MB's processed: %.2f", float(GetBytesRead())/(1024*1024));
182  Printf(" MB's sent: %.2f", float(fSocket->GetBytesRecv())/(1024*1024));
183  Printf(" MB's received: %.2f", float(fSocket->GetBytesSent())/(1024*1024));
184  Printf(" Real time used (s): %.3f", GetRealTime());
185  Printf(" CPU time used (s): %.3f", GetCpuTime());
186  }
187 }
void Close(Option_t *opt="")
Close slave socket.
Definition: TSlaveLite.cxx:157
virtual int GetPid()
Get process id.
Definition: TSystem.cxx:714
UInt_t GetBytesRecv() const
Definition: TSocket.h:134
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:138
Bool_t fValid
Definition: TSlaveLite.h:36
const char * GetROOTVersion() const
Definition: TSlave.h:148
Int_t SetupServ(Int_t stype, const char *conffile)
Init a PROOF slave object.
Definition: TSlaveLite.cxx:107
Basic string class.
Definition: TString.h:129
Version of TSlave for local worker servers.
Definition: TSlaveLite.h:31
int Int_t
Definition: RtypesCore.h:41
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
Definition: TObject.cxx:687
#define SafeDelete(p)
Definition: RConfig.h:499
TString fSessionTag
Definition: TSlave.h:99
TString fOrdinal
Definition: TSlave.h:86
const char * GetSessionTag() const
Definition: TSlave.h:143
virtual void Close(Option_t *opt="")
Close the socket.
Definition: TSocket.cxx:388
R__EXTERN TSystem * gSystem
Definition: TSystem.h:539
UInt_t GetBytesSent() const
Definition: TSocket.h:133
if object ctor succeeded but object should not be used
Definition: TObject.h:65
TString fWorkDir
Definition: TSlave.h:82
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Definition: TString.cxx:2332
virtual ~TSlaveLite()
Destroy slave.
Definition: TSlaveLite.cxx:149
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition: TObject.cxx:873
char * Form(const char *fmt,...)
TSocket * fSocket
Definition: TSlave.h:89
virtual Int_t Exec(const char *shellcmd)
Execute a command.
Definition: TSystem.cxx:660
const Int_t kPROOF_Protocol
Definition: TProof.h:124
Float_t GetRealTime() const
Definition: TSlave.h:137
#define Printf
Definition: TGeoToOCC.h:18
Int_t fProtocol
Definition: TSlave.h:88
TFileHandler * fInput
Definition: TSlave.h:91
const Bool_t kFALSE
Definition: RtypesCore.h:92
UInt_t What() const
Definition: TMessage.h:74
TString fName
Definition: TSlave.h:79
#define ClassImp(name)
Definition: Rtypes.h:336
TProof * fProof
Definition: TSlave.h:90
virtual const char * HostName()
Return the system&#39;s host name.
Definition: TSystem.cxx:310
TString fMsd
Definition: TSlave.h:98
This class controls a Parallel ROOT Facility, PROOF, cluster.
Definition: TProof.h:320
TSignalHandler * fIntHandler
Definition: TSlaveLite.h:37
void Init()
Init a PROOF worker object. Called via the TSlaveLite ctor.
Definition: TSlaveLite.cxx:87
const char * GetWorkDir() const
Definition: TSlave.h:127
TString fImage
Definition: TSlave.h:80
Int_t fStatus
Definition: TSlave.h:96
typedef void((*Func_t)())
const char * GetArchCompiler() const
Definition: TSlave.h:147
void Print(Option_t *option="") const
Printf info about slave.
Definition: TSlaveLite.cxx:170
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:83
static const TString & GetBinDir()
Get the binary directory in the installation. Static utility function.
Definition: TROOT.cxx:2728
Class describing a PROOF worker server.
Definition: TSlave.h:46
ESlaveType
Definition: TSlave.h:55
Long64_t GetBytesRead() const
Definition: TSlave.h:136
ESlaveType fSlaveType
Definition: TSlave.h:95
TString fProofWorkDir
Definition: TSlave.h:81
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:64
Int_t fPerfIdx
Definition: TSlave.h:87
const char * Data() const
Definition: TString.h:347