PubSubSubspaceResponsible Class Reference

#include <PubSubSubspace.h>

Inheritance diagram for PubSubSubspaceResponsible:
PubSubSubspaceIntermediate PubSubSubspace

List of all members.

Classes

class  IntermediateNode

Public Member Functions

 PubSubSubspaceResponsible (PubSubSubspaceId id)
void setBackupNode (NodeHandle b)
const NodeHandlegetBackupNode ()
void setHeartbeatTimer (PubSubTimer *t)
PubSubTimer * getHeartbeatTimer ()
int getHeartbeatFailCount ()
void incHeartbeatFailCount ()
void resetHeartbeatFailCount ()
int getTotalChildrenCount ()
void fixTotalChildrenCount ()
int getNumIntermediates ()
IntermediateNodegetNextFreeIntermediate ()
virtual bool addChild (NodeHandle node)
virtual IntermediateNoderemoveAnyChild (NodeHandle node)

Public Attributes

std::deque< IntermediateNodeintermediateNodes
std::map< NodeHandle, bool > cachedChildren
std::deque< PubSubMoveMessage * > waitingMoveMessages

Static Public Attributes

static unsigned int maxChildren

Protected Attributes

int totalChildrenCount
NodeHandle backupNode
PubSubTimer * heartbeatTimer
int heartbeatFailCount

Friends

std::ostream & operator<< (std::ostream &o, const PubSubSubspaceResponsible &subspace)

Detailed Description

Definition at line 81 of file PubSubSubspace.h.


Constructor & Destructor Documentation

PubSubSubspaceResponsible::PubSubSubspaceResponsible ( PubSubSubspaceId  id  ) 

Definition at line 63 of file PubSubSubspace.cc.

00064     : PubSubSubspaceIntermediate( id )
00065 {
00066     backupNode = NodeHandle::UNSPECIFIED_NODE;
00067     heartbeatTimer = NULL;
00068     heartbeatFailCount = 0;
00069     totalChildrenCount = 0;
00070 }


Member Function Documentation

bool PubSubSubspaceResponsible::addChild ( NodeHandle  node  )  [virtual]

Reimplemented from PubSubSubspaceIntermediate.

Definition at line 72 of file PubSubSubspace.cc.

Referenced by PubSubMMOG::handleSubscriptionBackup().

00073 {
00074     if( getNumChildren() + getNumIntermediates() < (int) maxChildren ) {
00075         // we still have room in our children list, add to our own
00076         if( PubSubSubspaceIntermediate::addChild( child ) ){
00077             ++totalChildrenCount;
00078         }
00079         return true;
00080     } else {
00081         // Child has to go to an intermediate
00082         if( cachedChildren.insert( make_pair(child, false) ).second ){
00083             ++totalChildrenCount;
00084         }
00085         return false;
00086     }
00087 }

void PubSubSubspaceResponsible::fixTotalChildrenCount (  ) 

Definition at line 118 of file PubSubSubspace.cc.

Referenced by PubSubMMOG::handleAdoptChildResponse(), PubSubMMOG::handleHelpResponse(), PubSubMMOG::handleIntermediateResponse(), PubSubMMOG::handlePingCallTimeout(), PubSubMMOG::handleSubscriptionCall(), PubSubMMOG::takeOverSubspace(), and PubSubMMOG::unsubscribeChild().

00119 {
00120     totalChildrenCount = children.size() + cachedChildren.size();
00121     std::deque<IntermediateNode>::iterator it;
00122     for( it = intermediateNodes.begin(); it != intermediateNodes.end(); ++it ){
00123         totalChildrenCount += it->children.size();
00124     }
00125 }

const NodeHandle& PubSubSubspaceResponsible::getBackupNode (  )  [inline]
int PubSubSubspaceResponsible::getHeartbeatFailCount (  )  [inline]

Definition at line 106 of file PubSubSubspace.h.

00106 { return heartbeatFailCount; }

PubSubTimer* PubSubSubspaceResponsible::getHeartbeatTimer (  )  [inline]

Definition at line 104 of file PubSubSubspace.h.

00104 { return heartbeatTimer; }

PubSubSubspaceResponsible::IntermediateNode * PubSubSubspaceResponsible::getNextFreeIntermediate (  ) 

Definition at line 106 of file PubSubSubspace.cc.

Referenced by PubSubMMOG::unsubscribeChild().

00107 {
00108     std::deque<IntermediateNode>::iterator it;
00109     for( it = intermediateNodes.begin(); it != intermediateNodes.end(); ++it ){
00110         if( it->node.isUnspecified() ) continue;
00111         int childIntermediates = intermediateNodes.size() - (it - intermediateNodes.begin() +1 )* maxChildren;
00112         if( childIntermediates < 0 ) childIntermediates = 0;
00113         if( it->children.size() + it->waitingChildren + childIntermediates < maxChildren ) return &*it;
00114     }
00115     return NULL;
00116 }

int PubSubSubspaceResponsible::getNumIntermediates (  )  [inline]

Definition at line 113 of file PubSubSubspace.h.

Referenced by addChild(), PubSubMMOG::handleUnsubscribeBackup(), and PubSubMMOG::unsubscribeChild().

00113 { return intermediateNodes.size(); }

int PubSubSubspaceResponsible::getTotalChildrenCount (  )  [inline]
void PubSubSubspaceResponsible::incHeartbeatFailCount (  )  [inline]

Definition at line 107 of file PubSubSubspace.h.

00107 { ++heartbeatFailCount; }

PubSubSubspaceResponsible::IntermediateNode * PubSubSubspaceResponsible::removeAnyChild ( NodeHandle  node  )  [virtual]

Definition at line 89 of file PubSubSubspace.cc.

Referenced by PubSubMMOG::unsubscribeChild().

00090 {
00091     if( removeChild( child ) || cachedChildren.erase( child )){
00092         --totalChildrenCount;
00093         return NULL;
00094     } else {
00095         std::deque<IntermediateNode>::iterator it;
00096         for( it = intermediateNodes.begin(); it != intermediateNodes.end(); ++it ){
00097             if( it->children.erase( child ) ) {
00098                 --totalChildrenCount;
00099                 return &*it;
00100             }
00101         }
00102         return NULL;
00103     }
00104 }

void PubSubSubspaceResponsible::resetHeartbeatFailCount (  )  [inline]

Definition at line 108 of file PubSubSubspace.h.

00108 { heartbeatFailCount = 0; }

void PubSubSubspaceResponsible::setBackupNode ( NodeHandle  b  )  [inline]

Definition at line 100 of file PubSubSubspace.h.

Referenced by PubSubMMOG::handleHelpResponse(), and PubSubMMOG::handlePingCallTimeout().

00100 { backupNode = b; }

void PubSubSubspaceResponsible::setHeartbeatTimer ( PubSubTimer *  t  )  [inline]

Definition at line 103 of file PubSubSubspace.h.

Referenced by PubSubMMOG::handleBackupCall().

00103 { heartbeatTimer = t; }


Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  o,
const PubSubSubspaceResponsible subspace 
) [friend]

Definition at line 127 of file PubSubSubspace.cc.

00128 {
00129     o << dynamic_cast<const PubSubSubspaceIntermediate&>(subspace) << "  BackupNode: " << subspace.backupNode;
00130     o << "\n  cachedChildren:\n";
00131     map<NodeHandle, bool>::const_iterator iit;
00132     for( iit = subspace.cachedChildren.begin(); iit != subspace.cachedChildren.end(); ++iit ){
00133         o << "    " << iit->first << " waiting: " << iit->second << "\n";
00134     }
00135     o << "  totalChildrenCount: " << subspace.totalChildrenCount;
00136     o << "\n  IntermediateNodes:\n";
00137     std::deque<PubSubSubspaceResponsible::IntermediateNode>::const_iterator it;
00138     for( it = subspace.intermediateNodes.begin(); it != subspace.intermediateNodes.end(); ++it ){
00139         o << "    " << it->node;
00140             o << "\n    Children:\n";
00141         for( set<NodeHandle>::iterator iit = it->children.begin(); iit != it->children.end(); ++iit ){
00142             o << "      " << *iit << "\n";
00143         }
00144     }
00145     return o;
00146 }


Member Data Documentation

std::deque<PubSubMoveMessage*> PubSubSubspaceResponsible::waitingMoveMessages

Definition at line 95 of file PubSubSubspace.h.

Referenced by PubSubMMOG::publishEvents().


The documentation for this class was generated from the following files:
Generated on Wed May 26 16:21:18 2010 for OverSim by  doxygen 1.6.3