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)
void deleteNode (TransportAddress &addr)
double distributionFunction ()
void scheduleCreateNodeAt (simtime_t creationTime, simtime_t lifetime)

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
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 168 of file LifetimeChurn.cc.

00169 {
00170     cancelAndDelete(initFinishedTimer);
00171 }


Member Function Documentation

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

Definition at line 98 of file LifetimeChurn.cc.

Referenced by handleMessage().

00099 {
00100 
00101     ChurnMessage* churnMsg = new ChurnMessage("DeleteNode");
00102     TransportAddress* ta = underlayConfigurator->createNode(type, initialize);
00103     churnMsg->setAddr(*ta);
00104     delete ta;
00105     churnMsg->setCreateNode(false);
00106     scheduleAt(std::max(simTime(), simTime() + lifetime
00107             - underlayConfigurator->getGracefulLeaveDelay()), churnMsg);
00108 
00109     RECORD_STATS(globalStatistics->recordOutVector(
00110                     "LifetimeChurn: Session Time", SIMTIME_DBL(lifetime)));
00111     RECORD_STATS(globalStatistics->recordOutVector(
00112                     "LifetimeChurn: Time between creates",
00113                     SIMTIME_DBL(simTime() - lastCreate)));
00114 
00115     lastCreate = simTime();
00116 }

void LifetimeChurn::deleteNode ( TransportAddress addr  )  [protected]

Definition at line 118 of file LifetimeChurn.cc.

Referenced by handleMessage().

00119 {
00120     underlayConfigurator->preKillNode(NodeType(), &addr);
00121 
00122     scheduleCreateNodeAt(simTime() + distributionFunction(),
00123                          distributionFunction());
00124 
00125     RECORD_STATS(globalStatistics->recordOutVector(
00126                  "LifetimeChurn: Time between deletes",
00127                  SIMTIME_DBL(simTime() - lastDelete)));
00128 
00129     lastDelete = simTime();
00130 }

double LifetimeChurn::distributionFunction (  )  [protected]

Definition at line 140 of file LifetimeChurn.cc.

Referenced by deleteNode(), and initializeChurn().

00141 {
00142     double par;
00143 
00144     if (lifetimeDistName == "weibull") {
00145         par = lifetimeMean / tgamma(1 + (1 / lifetimeDistPar1));
00146         return weibull(par, lifetimeDistPar1);
00147     } else if (lifetimeDistName == "pareto_shifted") {
00148         par = lifetimeMean * (lifetimeDistPar1 - 1) / lifetimeDistPar1;
00149         return pareto_shifted(lifetimeDistPar1, par, 0);
00150     } else if (lifetimeDistName == "truncnormal") {
00151         par = lifetimeMean;
00152         return truncnormal(par, par/3.0);
00153     } else {
00154         opp_error("LifetimeChurn::distribution function: Invalid value "
00155             "for parameter lifetimeDistName!");
00156     }
00157 
00158     return 0;
00159 }

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

Implements ChurnGenerator.

Definition at line 71 of file LifetimeChurn.cc.

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

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     for (int i = 0; i < targetOverlayTerminalNum; i++) {
00055 
00056         scheduleCreateNodeAt(truncnormal(initialMean * i, initialDeviation),
00057                              initFinishedTime + distributionFunction()
00058                                      - truncnormal(initialMean * i,
00059                                                    initialDeviation));
00060 
00061         // create same number of currently dead nodes
00062         scheduleCreateNodeAt(initFinishedTime + distributionFunction(),
00063                              distributionFunction());
00064     }
00065 
00066     initFinishedTimer = new cMessage("initFinishedTimer");
00067 
00068     scheduleAt(initFinishedTime, initFinishedTimer);
00069 }

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

Definition at line 132 of file LifetimeChurn.cc.

Referenced by deleteNode(), and initializeChurn().

00133 {
00134     ChurnMessage* churnMsg = new ChurnMessage("CreateNode");
00135     churnMsg->setCreateNode(true);
00136     churnMsg->setLifetime(SIMTIME_DBL(lifetime));
00137     scheduleAt(creationTime, churnMsg);
00138 }

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

Implements ChurnGenerator.

Definition at line 161 of file LifetimeChurn.cc.

00162 {
00163     char buf[80];
00164     sprintf(buf, "lifetime churn");
00165     getDisplayString().setTagArg("t", 0, buf);
00166 }


Member Data Documentation

Definition at line 52 of file LifetimeChurn.h.

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

cMessage* LifetimeChurn::initFinishedTimer [private]

timer to signal end of init phase

Definition at line 61 of file LifetimeChurn.h.

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

deviation of update interval during initialization phase

Definition at line 55 of file LifetimeChurn.h.

Referenced by initializeChurn().

double LifetimeChurn::initialMean [private]

mean of update interval during initialization phase

Definition at line 54 of file LifetimeChurn.h.

Referenced by initializeChurn().

simtime_t LifetimeChurn::lastCreate [private]

Definition at line 63 of file LifetimeChurn.h.

Referenced by createNode(), and initializeChurn().

simtime_t LifetimeChurn::lastDelete [private]

Definition at line 64 of file LifetimeChurn.h.

Referenced by deleteNode(), and initializeChurn().

std::string LifetimeChurn::lifetimeDistName [private]

name of the distribution function

Definition at line 57 of file LifetimeChurn.h.

Referenced by distributionFunction(), and initializeChurn().

distribution function parameter

Definition at line 59 of file LifetimeChurn.h.

Referenced by distributionFunction(), and initializeChurn().

double LifetimeChurn::lifetimeMean [private]

mean node lifetime

Definition at line 58 of file LifetimeChurn.h.

Referenced by distributionFunction(), and initializeChurn().

double LifetimeChurn::targetMean [private]

mean of update interval after initialization phase

Definition at line 56 of file LifetimeChurn.h.


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

Generated on Tue Sep 8 17:26:59 2009 for OverSim by  doxygen 1.5.8