Lifetime based churn generating class. More...
#include <LifetimeChurn.h>
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 | |
GlobalStatistics * | globalStatistics |
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 |
Lifetime based churn generating class.
Definition at line 36 of file LifetimeChurn.h.
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 }
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().
void LifetimeChurn::updateDisplayString | ( | ) | [protected, virtual] |
Implements ChurnGenerator.
Definition at line 169 of file LifetimeChurn.cc.
std::vector<cObject*> LifetimeChurn::contextVector [private] |
context pointer vector
Definition at line 64 of file LifetimeChurn.h.
Referenced by createNode(), initializeChurn(), and ~LifetimeChurn().
GlobalStatistics* LifetimeChurn::globalStatistics [private] |
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().
double LifetimeChurn::initialDeviation [private] |
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().
double LifetimeChurn::lifetimeDistPar1 [private] |
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.