LifetimeChurn Class Reference

Lifetime based churn generating class. More...

#include <LifetimeChurn.h>

Inheritance diagram for LifetimeChurn:
ChurnGenerator

List of all members.

Public Member Functions

void handleMessage (cMessage *msg)
void initializeChurn ()
 LifetimeChurn ()
 ~LifetimeChurn ()

Protected Member Functions

void updateDisplayString ()
void createNode (simtime_t lifetime, bool initialize, int contextPos)
void deleteNode (TransportAddress &addr, int contextPos)
double distributionFunction ()
void scheduleCreateNodeAt (simtime_t creationTime, simtime_t lifetime, int contextPos)

Private Attributes

GlobalStatisticsglobalStatistics
double initialMean
 mean of update interval during initialization phase
double initialDeviation
 deviation of update interval during initialization phase
double targetMean
 mean of update interval after initialization phase
std::string lifetimeDistName
 name of the distribution function
double lifetimeMean
 mean node lifetime
double lifetimeDistPar1
 distribution function parameter
cMessage * initFinishedTimer
 timer to signal end of init phase
std::vector< cObject * > contextVector
 context pointer vector
simtime_t lastCreate
simtime_t lastDelete

Detailed Description

Lifetime based churn generating class.

Definition at line 36 of file LifetimeChurn.h.


Constructor & Destructor Documentation

LifetimeChurn::LifetimeChurn (  )  [inline]

Definition at line 41 of file LifetimeChurn.h.

00041 { initFinishedTimer = NULL; };

LifetimeChurn::~LifetimeChurn (  ) 

Definition at line 176 of file LifetimeChurn.cc.

00177 {
00178     cancelAndDelete(initFinishedTimer);
00179     for (std::vector<cObject*>::iterator it = contextVector.begin();
00180          it != contextVector.end(); it++) {
00181         if (*it) {
00182             delete *it;
00183         }
00184     }
00185 
00186 }


Member Function Documentation

void LifetimeChurn::createNode ( simtime_t  lifetime,
bool  initialize,
int  contextPos 
) [protected]

Definition at line 100 of file LifetimeChurn.cc.

Referenced by handleMessage().

00102 {
00103 
00104     ChurnMessage* churnMsg = new ChurnMessage("DeleteNode");
00105     NodeType createType = type;
00106     createType.context = &(contextVector[contextPos]);
00107     TransportAddress* ta = underlayConfigurator->createNode(createType, initialize);
00108     churnMsg->setAddr(*ta);
00109     churnMsg->setContextPos(contextPos);
00110     delete ta;
00111     churnMsg->setCreateNode(false);
00112     scheduleAt(std::max(simTime(), simTime() + lifetime
00113             - underlayConfigurator->getGracefulLeaveDelay()), churnMsg);
00114 
00115     RECORD_STATS(globalStatistics->recordOutVector(
00116                     "LifetimeChurn: Session Time", SIMTIME_DBL(lifetime)));
00117     RECORD_STATS(globalStatistics->recordOutVector(
00118                     "LifetimeChurn: Time between creates",
00119                     SIMTIME_DBL(simTime() - lastCreate)));
00120 
00121     lastCreate = simTime();
00122 }

void LifetimeChurn::deleteNode ( TransportAddress addr,
int  contextPos 
) [protected]

Definition at line 124 of file LifetimeChurn.cc.

Referenced by handleMessage().

00125 {
00126     underlayConfigurator->preKillNode(NodeType(), &addr);
00127 
00128     scheduleCreateNodeAt(simTime() + distributionFunction(),
00129                          distributionFunction(), contextPos);
00130 
00131     RECORD_STATS(globalStatistics->recordOutVector(
00132                  "LifetimeChurn: Time between deletes",
00133                  SIMTIME_DBL(simTime() - lastDelete)));
00134 
00135     lastDelete = simTime();
00136 }

double LifetimeChurn::distributionFunction (  )  [protected]

Definition at line 148 of file LifetimeChurn.cc.

Referenced by deleteNode(), and initializeChurn().

00149 {
00150     double par;
00151 
00152     if (lifetimeDistName == "weibull") {
00153         par = lifetimeMean / tgamma(1 + (1 / lifetimeDistPar1));
00154         return weibull(par, lifetimeDistPar1);
00155     } else if (lifetimeDistName == "pareto_shifted") {
00156         par = lifetimeMean * (lifetimeDistPar1 - 1) / lifetimeDistPar1;
00157         return pareto_shifted(lifetimeDistPar1, par, 0);
00158     } else if (lifetimeDistName == "truncnormal") {
00159         par = lifetimeMean;
00160         return truncnormal(par, par/3.0);
00161     } else {
00162         opp_error("LifetimeChurn::distribution function: Invalid value "
00163             "for parameter lifetimeDistName!");
00164     }
00165 
00166     return 0;
00167 }

void LifetimeChurn::handleMessage ( cMessage *  msg  )  [virtual]

Implements ChurnGenerator.

Definition at line 73 of file LifetimeChurn.cc.

00074 {
00075     if (!msg->isSelfMessage()) {
00076         delete msg;
00077         return;
00078     }
00079 
00080     // init phase finished
00081     if (msg == initFinishedTimer) {
00082         underlayConfigurator->initFinished();
00083         cancelEvent(initFinishedTimer);
00084         delete initFinishedTimer;
00085         initFinishedTimer = NULL;
00086         return;
00087     }
00088 
00089     ChurnMessage* churnMsg = check_and_cast<ChurnMessage*> (msg);
00090 
00091     if (churnMsg->getCreateNode() == true) {
00092         createNode(churnMsg->getLifetime(), false, churnMsg->getContextPos());
00093     } else {
00094         deleteNode(churnMsg->getAddr(), churnMsg->getContextPos());
00095     }
00096 
00097     delete msg;
00098 }

void LifetimeChurn::initializeChurn (  )  [virtual]

Implements ChurnGenerator.

Definition at line 34 of file LifetimeChurn.cc.

00035 {
00036     Enter_Method_Silent();
00037 
00038     initialMean = par("initPhaseCreationInterval");
00039     initialDeviation = initialMean / 3;
00040     lifetimeMean = par("lifetimeMean");
00041     lifetimeDistName = par("lifetimeDistName").stdstringValue();
00042     lifetimeDistPar1 = par("lifetimeDistPar1");
00043 
00044     WATCH(lifetimeMean);
00045 
00046     globalStatistics = GlobalStatisticsAccess().get();
00047 
00048     lastCreate = lastDelete = simTime();
00049 
00050     simtime_t initFinishedTime = initialMean * targetOverlayTerminalNum;
00051 
00052     // create the remaining nodes in bootstrap phase
00053     int targetOverlayTerminalNum = par("targetOverlayTerminalNum");
00054     contextVector.assign(2*targetOverlayTerminalNum, (cObject*)NULL);
00055 
00056     for (int i = 0; i < targetOverlayTerminalNum; i++) {
00057 
00058         scheduleCreateNodeAt(truncnormal(initialMean * i, initialDeviation),
00059                              initFinishedTime + distributionFunction()
00060                                      - truncnormal(initialMean * i,
00061                                                    initialDeviation), i);
00062 
00063         // create same number of currently dead nodes
00064         scheduleCreateNodeAt(initFinishedTime + distributionFunction(),
00065                              distributionFunction(), targetOverlayTerminalNum + i);
00066     }
00067 
00068     initFinishedTimer = new cMessage("initFinishedTimer");
00069 
00070     scheduleAt(initFinishedTime, initFinishedTimer);
00071 }

void LifetimeChurn::scheduleCreateNodeAt ( simtime_t  creationTime,
simtime_t  lifetime,
int  contextPos 
) [protected]

Definition at line 138 of file LifetimeChurn.cc.

Referenced by deleteNode(), and initializeChurn().

00140 {
00141     ChurnMessage* churnMsg = new ChurnMessage("CreateNode");
00142     churnMsg->setCreateNode(true);
00143     churnMsg->setLifetime(SIMTIME_DBL(lifetime));
00144     churnMsg->setContextPos(contextPos);
00145     scheduleAt(creationTime, churnMsg);
00146 }

void LifetimeChurn::updateDisplayString (  )  [protected, virtual]

Implements ChurnGenerator.

Definition at line 169 of file LifetimeChurn.cc.

00170 {
00171     char buf[80];
00172     sprintf(buf, "lifetime churn");
00173     getDisplayString().setTagArg("t", 0, buf);
00174 }


Member Data Documentation

std::vector<cObject*> LifetimeChurn::contextVector [private]

context pointer vector

Definition at line 64 of file LifetimeChurn.h.

Referenced by createNode(), initializeChurn(), and ~LifetimeChurn().

Definition at line 53 of file LifetimeChurn.h.

Referenced by createNode(), deleteNode(), and initializeChurn().

cMessage* LifetimeChurn::initFinishedTimer [private]

timer to signal end of init phase

Definition at line 62 of file LifetimeChurn.h.

Referenced by handleMessage(), initializeChurn(), LifetimeChurn(), and ~LifetimeChurn().

deviation of update interval during initialization phase

Definition at line 56 of file LifetimeChurn.h.

Referenced by initializeChurn().

double LifetimeChurn::initialMean [private]

mean of update interval during initialization phase

Definition at line 55 of file LifetimeChurn.h.

Referenced by initializeChurn().

simtime_t LifetimeChurn::lastCreate [private]

Definition at line 66 of file LifetimeChurn.h.

Referenced by createNode(), and initializeChurn().

simtime_t LifetimeChurn::lastDelete [private]

Definition at line 67 of file LifetimeChurn.h.

Referenced by deleteNode(), and initializeChurn().

std::string LifetimeChurn::lifetimeDistName [private]

name of the distribution function

Definition at line 58 of file LifetimeChurn.h.

Referenced by distributionFunction(), and initializeChurn().

distribution function parameter

Definition at line 60 of file LifetimeChurn.h.

Referenced by distributionFunction(), and initializeChurn().

double LifetimeChurn::lifetimeMean [private]

mean node lifetime

Definition at line 59 of file LifetimeChurn.h.

Referenced by distributionFunction(), and initializeChurn().

double LifetimeChurn::targetMean [private]

mean of update interval after initialization phase

Definition at line 57 of file LifetimeChurn.h.


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