Logo ROOT   6.18/05
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
15Version of TSlave for local worker servers.
16See 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
55void 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
64TSlaveLite::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&",
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)
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}
@ kMESS_NOTOK
Definition: MessageTypes.h:33
@ kPROOF_SESSIONTAG
Definition: MessageTypes.h:79
#define SafeDelete(p)
Definition: RConfig.hxx:543
int Int_t
Definition: RtypesCore.h:41
const Bool_t kFALSE
Definition: RtypesCore.h:88
const char Option_t
Definition: RtypesCore.h:62
#define ClassImp(name)
Definition: Rtypes.h:365
R__EXTERN Int_t gDebug
Definition: Rtypes.h:91
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
const Int_t kPROOF_Protocol
Definition: TProof.h:120
char * Form(const char *fmt,...)
void Printf(const char *fmt,...)
R__EXTERN TSystem * gSystem
Definition: TSystem.h:560
UInt_t What() const
Definition: TMessage.h:75
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
Definition: TObject.cxx:694
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition: TObject.cxx:880
@ kInvalidObject
if object ctor succeeded but object should not be used
Definition: TObject.h:68
This class controls a Parallel ROOT Facility, PROOF, cluster.
Definition: TProof.h:316
static const TString & GetBinDir()
Get the binary directory in the installation. Static utility function.
Definition: TROOT.cxx:2965
Version of TSlave for local worker servers.
Definition: TSlaveLite.h:31
Int_t SetupServ(Int_t stype, const char *conffile)
Init a PROOF slave object.
Definition: TSlaveLite.cxx:107
virtual ~TSlaveLite()
Destroy slave.
Definition: TSlaveLite.cxx:149
void Print(Option_t *option="") const
Printf info about slave.
Definition: TSlaveLite.cxx:170
void Close(Option_t *opt="")
Close slave socket.
Definition: TSlaveLite.cxx:157
void DoError(int level, const char *location, const char *fmt, va_list va) const
Interface to ErrorHandler (protected).
Definition: TSlaveLite.cxx:55
Bool_t fValid
Definition: TSlaveLite.h:36
void Init()
Init a PROOF worker object. Called via the TSlaveLite ctor.
Definition: TSlaveLite.cxx:87
TSignalHandler * fIntHandler
Definition: TSlaveLite.h:37
Class describing a PROOF worker server.
Definition: TSlave.h:46
Int_t fStatus
Definition: TSlave.h:96
TString fImage
Definition: TSlave.h:80
TSocket * fSocket
Definition: TSlave.h:89
const char * GetWorkDir() const
Definition: TSlave.h:127
TProof * fProof
Definition: TSlave.h:90
ESlaveType fSlaveType
Definition: TSlave.h:95
Float_t GetRealTime() const
Definition: TSlave.h:137
ESlaveType
Definition: TSlave.h:55
Long64_t GetBytesRead() const
Definition: TSlave.h:136
TString fSessionTag
Definition: TSlave.h:99
TString fWorkDir
Definition: TSlave.h:82
@ kInactive
Definition: TSlave.h:56
TString fOrdinal
Definition: TSlave.h:86
friend class TSlaveLite
Definition: TSlave.h:50
TFileHandler * fInput
Definition: TSlave.h:91
TString fProofWorkDir
Definition: TSlave.h:81
const char * GetSessionTag() const
Definition: TSlave.h:143
Int_t fPerfIdx
Definition: TSlave.h:87
Int_t fProtocol
Definition: TSlave.h:88
const char * GetArchCompiler() const
Definition: TSlave.h:147
const char * GetROOTVersion() const
Definition: TSlave.h:148
Float_t GetCpuTime() const
Definition: TSlave.h:138
TString fName
Definition: TSlave.h:79
TString fMsd
Definition: TSlave.h:98
UInt_t GetBytesRecv() const
Definition: TSocket.h:120
virtual Int_t Recv(TMessage *&mess)
Receive a TMessage object.
Definition: TSocket.cxx:816
UInt_t GetBytesSent() const
Definition: TSocket.h:119
virtual void Close(Option_t *opt="")
Close the socket.
Definition: TSocket.cxx:388
Basic string class.
Definition: TString.h:131
const char * Data() const
Definition: TString.h:364
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Definition: TString.cxx:2289
virtual int GetPid()
Get process id.
Definition: TSystem.cxx:716
virtual Int_t Exec(const char *shellcmd)
Execute a command.
Definition: TSystem.cxx:662
virtual const char * HostName()
Return the system's host name.
Definition: TSystem.cxx:312