Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TMPWorker Class Reference

This class works in conjuction with TMPClient, reacting to messages received from it as specified by the Notify and HandleInput methods.

When TMPClient::Fork is called, a TMPWorker instance is passed to it which will take control of the ROOT session in the children processes.

After forking, every time a message is sent or broadcast to the workers, TMPWorker::Notify is called and the message is retrieved. Messages exchanged between TMPClient and TMPWorker should be sent with the MPSend() standalone function.
If the code of the message received is above 1000 (i.e. it is an MPCode) the qualified TMPWorker::HandleInput method is called, that takes care of handling the most generic type of messages. Otherwise the unqualified (possibly overridden) version of HandleInput is called, allowing classes that inherit from TMPWorker to manage their own protocol.
An application's worker class should inherit from TMPWorker and implement a HandleInput method that overrides TMPWorker's.

Definition at line 26 of file TMPWorker.h.

Public Member Functions

 TMPWorker ()
 
 TMPWorker (const TMPWorker &)=delete
 
 TMPWorker (unsigned nWorkers, ULong64_t maxEntries)
 
virtual ~TMPWorker ()
 
unsigned GetNWorker () const
 
pid_t GetPid ()
 
TSocketGetSocket ()
 
virtual void Init (int fd, unsigned workerN)
 This method is called by children processes right after forking.
 
TMPWorkeroperator= (const TMPWorker &)=delete
 
void Run ()
 

Protected Member Functions

void SendError (const std::string &errmsg, unsigned int code=MPCode::kError)
 Error sender.
 

Protected Attributes

std::string fId
 identifier string in the form W<nwrk>|P<proc id>
 
ULong64_t fMaxNEntries
 the maximum number of entries to be processed by this worker
 
unsigned fNWorkers
 the number of workers spawned
 
ULong64_t fProcessedEntries
 the number of entries processed by this worker so far
 

Private Member Functions

virtual void HandleInput (MPCodeBufPair &msg)
 Handle a message with an EMPCode.
 

Private Attributes

unsigned fNWorker
 the ordinal number of this worker (0 to nWorkers-1)
 
pid_t fPid
 the PID of the process in which this worker is running
 
std::unique_ptr< TSocketfS
 This worker's socket. The unique_ptr makes sure resources are released.
 

#include <TMPWorker.h>

Inheritance diagram for TMPWorker:
[legend]

Constructor & Destructor Documentation

◆ TMPWorker() [1/3]

TMPWorker::TMPWorker ( )
inline

Definition at line 28 of file TMPWorker.h.

◆ TMPWorker() [2/3]

TMPWorker::TMPWorker ( unsigned  nWorkers,
ULong64_t  maxEntries 
)
inline

Definition at line 30 of file TMPWorker.h.

◆ ~TMPWorker()

virtual TMPWorker::~TMPWorker ( )
inlinevirtual

Definition at line 33 of file TMPWorker.h.

◆ TMPWorker() [3/3]

TMPWorker::TMPWorker ( const TMPWorker )
delete

Member Function Documentation

◆ GetNWorker()

unsigned TMPWorker::GetNWorker ( ) const
inline

Definition at line 42 of file TMPWorker.h.

◆ GetPid()

pid_t TMPWorker::GetPid ( )
inline

Definition at line 41 of file TMPWorker.h.

◆ GetSocket()

TSocket * TMPWorker::GetSocket ( )
inline

Definition at line 40 of file TMPWorker.h.

◆ HandleInput()

void TMPWorker::HandleInput ( MPCodeBufPair msg)
privatevirtual

Handle a message with an EMPCode.

This method is called upon receiving a message with a code >= 1000 (i.e. EMPCode). It handles the most generic types of messages.
Classes inheriting from TMPWorker should implement their own HandleInput function, that should be able to handle codes specific to that application.
The appropriate version of the HandleInput method (TMPWorker's or the overriding version) is automatically called depending on the message code.

Reimplemented in TMPWorkerExecutor< F, T, R >, TMPWorkerExecutor< F, void, R >, TMPWorkerExecutor< F, T, void >, and TMPWorkerTree.

Definition at line 86 of file TMPWorker.cxx.

◆ Init()

void TMPWorker::Init ( int  fd,
unsigned  workerN 
)
virtual

This method is called by children processes right after forking.

Initialization of worker properties that must be delayed until after forking must be done here.
For example, Init saves the pid into fPid, and adds the TMPWorker to the main eventloop (as a TFileHandler).
Make sure this operations are performed also by overriding implementations, e.g. by calling TMPWorker::Init explicitly.

Definition at line 52 of file TMPWorker.cxx.

◆ operator=()

TMPWorker & TMPWorker::operator= ( const TMPWorker )
delete

◆ Run()

void TMPWorker::Run ( )

Definition at line 61 of file TMPWorker.cxx.

◆ SendError()

void TMPWorker::SendError ( const std::string &  errmsg,
unsigned int  code = MPCode::kError 
)
protected

Error sender.

Definition at line 112 of file TMPWorker.cxx.

Member Data Documentation

◆ fId

std::string TMPWorker::fId
protected

identifier string in the form W<nwrk>|P<proc id>

Definition at line 45 of file TMPWorker.h.

◆ fMaxNEntries

ULong64_t TMPWorker::fMaxNEntries
protected

the maximum number of entries to be processed by this worker

Definition at line 47 of file TMPWorker.h.

◆ fNWorker

unsigned TMPWorker::fNWorker
private

the ordinal number of this worker (0 to nWorkers-1)

Definition at line 57 of file TMPWorker.h.

◆ fNWorkers

unsigned TMPWorker::fNWorkers
protected

the number of workers spawned

Definition at line 46 of file TMPWorker.h.

◆ fPid

pid_t TMPWorker::fPid
private

the PID of the process in which this worker is running

Definition at line 56 of file TMPWorker.h.

◆ fProcessedEntries

ULong64_t TMPWorker::fProcessedEntries
protected

the number of entries processed by this worker so far

Definition at line 48 of file TMPWorker.h.

◆ fS

std::unique_ptr<TSocket> TMPWorker::fS
private

This worker's socket. The unique_ptr makes sure resources are released.

Definition at line 55 of file TMPWorker.h.

Libraries for TMPWorker:

The documentation for this class was generated from the following files: