CMS 3D CMS Logo

Public Member Functions | Static Public Attributes | Private Attributes

evf::SubProcess Class Reference

#include <SubProcess.h>

List of all members.

Public Member Functions

int alive () const
int controlQueueOccupancy ()
int & countdown ()
void disconnect ()
int forkNew ()
int get_save_nba () const
int get_save_nbp () const
bool inInconsistentState () const
SubProcessoperator= (const SubProcess &b)
struct prgparams ()
pid_t pid () const
int post (MsgBuf &ptr, bool isMonitor)
int postSlave (MsgBuf &ptr, bool isMonitor)
int queueId ()
int queueOccupancy ()
pid_t queuePidOfLastReceive ()
pid_t queuePidOfLastSend ()
int queueStatus ()
unsigned long rcv (MsgBuf &ptr, bool isMonitor)
unsigned long rcvNonBlocking (MsgBuf &ptr, bool isMonitor)
unsigned long rcvSlave (MsgBuf &ptr, bool isMonitor)
unsigned long rcvSlaveNonBlocking (MsgBuf &ptr, bool isMonitor)
std::string const & reasonForFailed () const
unsigned int & restartCount ()
void setParams (struct prg *p)
void setReasonForFailed (std::string r)
void setReportedInconsistent ()
void setStatus (int st)
 SubProcess (int ind, pid_t pid)
 SubProcess ()
 SubProcess (const SubProcess &b)
virtual ~SubProcess ()

Static Public Attributes

static const unsigned int monitor_queue_offset_ = 200

Private Attributes

int alive_
int ind_
boost::shared_ptr< MasterQueuemqm_
boost::shared_ptr< MasterQueuemqs_
pid_t pid_
struct prg prg_
std::string reasonForFailed_
bool reported_inconsistent_
unsigned int restart_count_
int restart_countdown_
int save_nba_
int save_nbp_
unsigned int save_ndqm_
unsigned int save_scalers_
SlaveQueuesqm_
SlaveQueuesqs_

Detailed Description

Definition at line 17 of file SubProcess.h.


Constructor & Destructor Documentation

evf::SubProcess::SubProcess ( ) [inline]

Definition at line 19 of file SubProcess.h.

      : ind_(100000)
      , pid_(-1)
      , alive_(-1000)
      , restart_countdown_(0)
      , restart_count_(0)
      , save_nbp_(0)
      , save_nba_(0)
      , save_ndqm_(0)
      , save_scalers_(0)
      , reported_inconsistent_(false)
      {}
evf::SubProcess::SubProcess ( int  ind,
pid_t  pid 
) [inline]

Definition at line 31 of file SubProcess.h.

References mqm_, and mqs_.

      : ind_(ind)
      , pid_(pid)
      , alive_(-1)
      , mqm_(new MasterQueue(monitor_queue_offset_+ind))
      , mqs_(new MasterQueue(ind))
      , restart_countdown_(0)
      , restart_count_(0)
      , save_nbp_(0)
      , save_nba_(0)
      , save_ndqm_(0)
      , save_scalers_(0)
      , reported_inconsistent_(false)
      {
        mqm_->drain();
        mqs_->drain();
      }
evf::SubProcess::SubProcess ( const SubProcess b) [inline]

Definition at line 48 of file SubProcess.h.

      : ind_(b.ind_)
      , pid_(b.pid_)
      , alive_(b.alive_)
      , mqm_(b.mqm_)
      , mqs_(b.mqs_)
      , restart_countdown_(b.restart_countdown_)
      , restart_count_(b.restart_count_)
      , reported_inconsistent_(b.reported_inconsistent_)
      {
      }
virtual evf::SubProcess::~SubProcess ( ) [inline, virtual]

Definition at line 61 of file SubProcess.h.

      {
      }

Member Function Documentation

int evf::SubProcess::alive ( ) const [inline]

Definition at line 75 of file SubProcess.h.

References alive_.

{return alive_;}
int evf::SubProcess::controlQueueOccupancy ( ) [inline]

Definition at line 71 of file SubProcess.h.

References mqs_.

{return (mqs_.get() !=0 ? mqs_->occupancy() : -1);}
int& evf::SubProcess::countdown ( ) [inline]

Definition at line 127 of file SubProcess.h.

References restart_countdown_.

void evf::SubProcess::disconnect ( void  )

Definition at line 22 of file SubProcess.cc.

References mqm_, mqs_, save_nba_, save_nbp_, save_ndqm_, and save_scalers_.

  {
    mqm_->drain();
    mqs_->drain();
    mqs_->disconnect();
    mqm_->disconnect();
    save_nbp_ = 0;
    save_nba_ = 0;
    save_ndqm_ = 0;
    save_scalers_ = 0;
  }
int evf::SubProcess::forkNew ( )

Definition at line 58 of file SubProcess.cc.

References a, alive_, ind_, monitor_queue_offset_, mqm_, mqs_, pid_, reported_inconsistent_, sqm_, and sqs_.

  {
    mqm_->drain();
    mqs_->drain();
    pid_t retval = -1;
    retval = fork();
    reported_inconsistent_ = false;
    if(retval>0)
      {
        pid_ = retval;
        alive_=1;
      }
    if(retval==0)
      {
        //        freopen(filename,"w",stdout); // send all console output from children to /dev/null
        freopen("/dev/null","w",stderr);
        FileDescriptorHandler a; //handle socket file descriptors left open at fork
        sqm_ = new SlaveQueue(monitor_queue_offset_+ind_);
        sqs_ = new SlaveQueue(ind_);
      }
    return retval;
  }
int evf::SubProcess::get_save_nba ( ) const [inline]

Definition at line 130 of file SubProcess.h.

References save_nba_.

{return save_nba_;}
int evf::SubProcess::get_save_nbp ( ) const [inline]

Definition at line 129 of file SubProcess.h.

References save_nbp_.

{return save_nbp_;}
bool evf::SubProcess::inInconsistentState ( ) const [inline]

Definition at line 124 of file SubProcess.h.

References reported_inconsistent_.

SubProcess & evf::SubProcess::operator= ( const SubProcess b)

Definition at line 6 of file SubProcess.cc.

References alive_, ind_, mqm_, mqs_, pid_, reported_inconsistent_, restart_countdown_, save_nba_, save_nbp_, save_ndqm_, and save_scalers_.

  {
    ind_=b.ind_;
    pid_=b.pid_;
    alive_=b.alive_;
    mqm_=b.mqm_;
    mqs_=b.mqs_;
    save_nbp_ = b.save_nbp_;
    save_nba_ = b.save_nba_;
    save_ndqm_ = b.save_ndqm_;
    save_scalers_ = b.save_scalers_;
    restart_countdown_=b.restart_countdown_;
    reported_inconsistent_=b.reported_inconsistent_;
    return *this;
  }
struct prg& evf::SubProcess::params ( ) [inline, read]

Definition at line 76 of file SubProcess.h.

References prg_.

{return prg_;}
pid_t evf::SubProcess::pid ( ) const [inline]

Definition at line 74 of file SubProcess.h.

References pid_.

{return pid_;}
int evf::SubProcess::post ( MsgBuf ptr,
bool  isMonitor 
) [inline]

Definition at line 78 of file SubProcess.h.

References mqm_, and mqs_.

      {
        //      std::cout << "post called for sp " << ind_ << " type " << ptr->mtype 
        //        << " queue ids " << mqm_->id() << " " << mqs_->id() << std::endl;
        if(isMonitor) return mqm_->post(ptr); else return mqs_->post(ptr);
      }
int evf::SubProcess::postSlave ( MsgBuf ptr,
bool  isMonitor 
) [inline]

Definition at line 99 of file SubProcess.h.

References evf::SlaveQueue::post(), sqm_, and sqs_.

Referenced by evf::FUEventProcessor::receiving(), evf::FUEventProcessor::receivingAndMonitor(), evf::FUEventProcessor::scalers(), and evf::FUEventProcessor::sendMessageOverMonitorQueue().

      {
        //      std::cout << "post called for sp " << ind_ << " type " << ptr->mtype 
        //        << " queue ids " << mqm_->id() << " " << mqs_->id() << std::endl;
        if(isMonitor) return sqm_->post(ptr); else return sqs_->post(ptr);
      }
int evf::SubProcess::queueId ( ) [inline]

Definition at line 68 of file SubProcess.h.

References mqm_.

{return (mqm_.get()!=0 ? mqm_->id() : 0);}
int evf::SubProcess::queueOccupancy ( ) [inline]

Definition at line 70 of file SubProcess.h.

References mqm_.

{return (mqm_.get() !=0 ? mqm_->occupancy() : -1);}
pid_t evf::SubProcess::queuePidOfLastReceive ( ) [inline]

Definition at line 73 of file SubProcess.h.

References mqm_.

{return (mqm_.get() !=0 ? mqm_->pidOfLastReceive() : -1);}
pid_t evf::SubProcess::queuePidOfLastSend ( ) [inline]

Definition at line 72 of file SubProcess.h.

References mqm_.

{return (mqm_.get() !=0 ? mqm_->pidOfLastSend() : -1);}
int evf::SubProcess::queueStatus ( ) [inline]

Definition at line 69 of file SubProcess.h.

References mqm_.

{return (mqm_.get() !=0 ? mqm_->status() : 0);}
unsigned long evf::SubProcess::rcv ( MsgBuf ptr,
bool  isMonitor 
) [inline]

Definition at line 84 of file SubProcess.h.

References mqm_, and mqs_.

      {
        //      std::cout << "receive called for sp " << ind_ << " type " << ptr->mtype 
        //  << " queue ids " << mqm_->id() << " " << mqs_->id() << std::endl;
        if(isMonitor) return mqm_->rcv(ptr); else return mqs_->rcv(ptr);
      }
unsigned long evf::SubProcess::rcvNonBlocking ( MsgBuf ptr,
bool  isMonitor 
) [inline]

Definition at line 90 of file SubProcess.h.

References mqm_, and mqs_.

      {
        //      std::cout << "receivenb called for sp " << ind_ << " type " << ptr->mtype 
        //        << " queue ids " << mqm_->id() << " " << mqs_->id() << std::endl;
        if(isMonitor) 
          return mqm_->rcvNonBlocking(ptr); 
        else 
          return mqs_->rcvNonBlocking(ptr);
      }
unsigned long evf::SubProcess::rcvSlave ( MsgBuf ptr,
bool  isMonitor 
) [inline]

Definition at line 105 of file SubProcess.h.

References evf::SlaveQueue::rcv(), sqm_, and sqs_.

Referenced by evf::FUEventProcessor::receiving(), and evf::FUEventProcessor::receivingAndMonitor().

      {
        //      std::cout << "receive called for sp " << ind_ << " type " << ptr->mtype 
        //  << " queue ids " << mqm_->id() << " " << mqs_->id() << std::endl;
        if(isMonitor) return sqm_->rcv(ptr); else return sqs_->rcv(ptr);
      }
unsigned long evf::SubProcess::rcvSlaveNonBlocking ( MsgBuf ptr,
bool  isMonitor 
) [inline]

Definition at line 111 of file SubProcess.h.

References evf::SlaveQueue::rcvNonBlocking(), sqm_, and sqs_.

      {
        //      std::cout << "receivenb called for sp " << ind_ << " type " << ptr->mtype 
        //        << " queue ids " << mqm_->id() << " " << mqs_->id() << std::endl;
        if(isMonitor) 
          return sqm_->rcvNonBlocking(ptr); 
        else 
          return sqs_->rcvNonBlocking(ptr);
      }
std::string const& evf::SubProcess::reasonForFailed ( ) const [inline]

Definition at line 123 of file SubProcess.h.

References reasonForFailed_.

{return reasonForFailed_;}
unsigned int& evf::SubProcess::restartCount ( ) [inline]

Definition at line 128 of file SubProcess.h.

References restart_count_.

{return restart_count_;}
void evf::SubProcess::setParams ( struct prg p)

Definition at line 46 of file SubProcess.cc.

References evf::prg::dqm, evf::prg::ls, evf::prg::Ms, evf::prg::ms, evf::prg::nba, evf::prg::nbp, prg_, evf::prg::ps, save_nba_, save_nbp_, save_ndqm_, save_scalers_, and evf::prg::trp.

  {
    prg_.ls  = p->ls;
    prg_.ps  = p->ps;
    prg_.nbp = p->nbp + save_nbp_;
    prg_.nba = p->nba + save_nba_;
    prg_.Ms  = p->Ms;
    prg_.ms  = p->ms;
    prg_.dqm = p->dqm + save_ndqm_;
    prg_.trp = p->trp + save_scalers_;
  }
void evf::SubProcess::setReasonForFailed ( std::string  r) [inline]

Definition at line 125 of file SubProcess.h.

References csvReporter::r, and reasonForFailed_.

void evf::SubProcess::setReportedInconsistent ( ) [inline]

Definition at line 126 of file SubProcess.h.

References reported_inconsistent_.

void evf::SubProcess::setStatus ( int  st)

Definition at line 34 of file SubProcess.cc.

References alive_, evf::prg::dqm, evf::prg::nba, evf::prg::nbp, prg_, save_nba_, save_nbp_, save_ndqm_, save_scalers_, and evf::prg::trp.

                                  {
    alive_ = st;
    if(alive_ != 1) //i.e. process is no longer alive
      {
        //save counters after last update
        save_nbp_ = prg_.nbp;
        save_nba_ = prg_.nba;
        save_ndqm_  = prg_.dqm;
        save_scalers_ = prg_.trp;
      }
  }

Member Data Documentation

int evf::SubProcess::alive_ [private]

Definition at line 136 of file SubProcess.h.

Referenced by alive(), forkNew(), operator=(), and setStatus().

int evf::SubProcess::ind_ [private]

Definition at line 134 of file SubProcess.h.

Referenced by forkNew(), and operator=().

const unsigned int evf::SubProcess::monitor_queue_offset_ = 200 [static]

Definition at line 131 of file SubProcess.h.

Referenced by forkNew().

boost::shared_ptr<MasterQueue> evf::SubProcess::mqm_ [private]
boost::shared_ptr<MasterQueue> evf::SubProcess::mqs_ [private]
pid_t evf::SubProcess::pid_ [private]

Definition at line 135 of file SubProcess.h.

Referenced by forkNew(), operator=(), and pid().

struct prg evf::SubProcess::prg_ [private]

Definition at line 142 of file SubProcess.h.

Referenced by params(), setParams(), and setStatus().

std::string evf::SubProcess::reasonForFailed_ [private]

Definition at line 141 of file SubProcess.h.

Referenced by reasonForFailed(), and setReasonForFailed().

Definition at line 150 of file SubProcess.h.

Referenced by forkNew(), inInconsistentState(), operator=(), and setReportedInconsistent().

unsigned int evf::SubProcess::restart_count_ [private]

Definition at line 144 of file SubProcess.h.

Referenced by restartCount().

Definition at line 143 of file SubProcess.h.

Referenced by countdown(), and operator=().

Definition at line 147 of file SubProcess.h.

Referenced by disconnect(), get_save_nba(), operator=(), setParams(), and setStatus().

Definition at line 146 of file SubProcess.h.

Referenced by disconnect(), get_save_nbp(), operator=(), setParams(), and setStatus().

unsigned int evf::SubProcess::save_ndqm_ [private]

Definition at line 148 of file SubProcess.h.

Referenced by disconnect(), operator=(), setParams(), and setStatus().

unsigned int evf::SubProcess::save_scalers_ [private]

Definition at line 149 of file SubProcess.h.

Referenced by disconnect(), operator=(), setParams(), and setStatus().

Definition at line 139 of file SubProcess.h.

Referenced by forkNew(), postSlave(), rcvSlave(), and rcvSlaveNonBlocking().

Definition at line 140 of file SubProcess.h.

Referenced by forkNew(), postSlave(), rcvSlave(), and rcvSlaveNonBlocking().