A simple test application for the DHT layer. More...
#include <DHTTestApp.h>
Classes | |
class | DHTStatsContext |
A container used by the DHTTestApp to store context information for statistics. More... | |
Public Member Functions | |
DHTTestApp () | |
virtual | ~DHTTestApp () |
virtual destructor | |
Private Member Functions | |
void | initializeApp (int stage) |
initializes derived class-attributes | |
OverlayKey | getRandomKey () |
Get a random key of the hashmap. | |
BinaryValue | generateRandomValue () |
generate a random human readable binary value | |
void | finishApp () |
collects statistical data of derived app | |
virtual void | handleGetResponse (DHTgetCAPIResponse *msg, DHTStatsContext *context) |
processes get responses | |
virtual void | handlePutResponse (DHTputCAPIResponse *msg, DHTStatsContext *context) |
processes put responses | |
virtual void | handleTimerEvent (cMessage *msg) |
processes self-messages | |
virtual void | handleTraceMessage (cMessage *msg) |
handleTraceMessage gets called of handleMessage(cMessage* msg) if a message arrives at trace_in. | |
virtual void | handleNodeLeaveNotification () |
This method gets call **.gracefulLeaveDelay seconds before it is killed. | |
void | handleRpcResponse (BaseResponseMessage *msg, const RpcState &state, simtime_t rtt) |
This method is called if an RPC response has been received. | |
Private Attributes | |
UnderlayConfigurator * | underlayConfigurator |
pointer to UnderlayConfigurator in this node | |
GlobalNodeList * | globalNodeList |
pointer to GlobalNodeList in this node | |
GlobalStatistics * | globalStatistics |
pointer to GlobalStatistics module in this node | |
GlobalDhtTestMap * | globalDhtTestMap |
pointer to the GlobalDhtTestMap module | |
bool | debugOutput |
debug output yes/no? | |
double | mean |
mean time interval between sending test messages | |
double | deviation |
deviation of time interval | |
int | ttl |
ttl for stored DHT records | |
bool | p2pnsTraffic |
model p2pns application traffic */ | |
bool | activeNetwInitPhase |
is app active in network init phase? | |
int | numSent |
number of sent packets | |
int | numGetSent |
number of get sent | |
int | numGetError |
number of false get responses | |
int | numGetSuccess |
number of false get responses | |
int | numPutSent |
number of put sent | |
int | numPutError |
number of error in put responses | |
int | numPutSuccess |
number of success in put responses | |
cMessage * | dhttestput_timer |
cMessage * | dhttestget_timer |
cMessage * | dhttestmod_timer |
bool | nodeIsLeavingSoon |
true if the node is going to be killed shortly | |
Static Private Attributes | |
static const int | DHTTESTAPP_VALUE_LEN = 20 |
A simple test application for the DHT layer.
A simple test application that does random put and get calls on the DHT layer
Definition at line 50 of file DHTTestApp.h.
DHTTestApp::DHTTestApp | ( | ) |
Definition at line 46 of file DHTTestApp.cc.
00047 { 00048 dhttestput_timer = NULL; 00049 dhttestget_timer = NULL; 00050 dhttestmod_timer = NULL; 00051 }
DHTTestApp::~DHTTestApp | ( | ) | [virtual] |
virtual destructor
Definition at line 39 of file DHTTestApp.cc.
00040 { 00041 cancelAndDelete(dhttestput_timer); 00042 cancelAndDelete(dhttestget_timer); 00043 cancelAndDelete(dhttestmod_timer); 00044 }
void DHTTestApp::finishApp | ( | ) | [private, virtual] |
collects statistical data of derived app
Reimplemented from BaseApp.
Definition at line 436 of file DHTTestApp.cc.
00437 { 00438 simtime_t time = globalStatistics->calcMeasuredLifetime(creationTime); 00439 00440 if (time >= GlobalStatistics::MIN_MEASURED) { 00441 // record scalar data 00442 globalStatistics->addStdDev("DHTTestApp: Sent Total Messages/s", 00443 numSent / time); 00444 globalStatistics->addStdDev("DHTTestApp: Sent GET Messages/s", 00445 numGetSent / time); 00446 globalStatistics->addStdDev("DHTTestApp: Failed GET Requests/s", 00447 numGetError / time); 00448 globalStatistics->addStdDev("DHTTestApp: Successful GET Requests/s", 00449 numGetSuccess / time); 00450 00451 globalStatistics->addStdDev("DHTTestApp: Sent PUT Messages/s", 00452 numPutSent / time); 00453 globalStatistics->addStdDev("DHTTestApp: Failed PUT Requests/s", 00454 numPutError / time); 00455 globalStatistics->addStdDev("DHTTestApp: Successful PUT Requests/s", 00456 numPutSuccess / time); 00457 00458 if ((numGetSuccess + numGetError) > 0) { 00459 globalStatistics->addStdDev("DHTTestApp: GET Success Ratio", 00460 (double) numGetSuccess 00461 / (double) (numGetSuccess + numGetError)); 00462 } 00463 } 00464 }
BinaryValue DHTTestApp::generateRandomValue | ( | ) | [private] |
generate a random human readable binary value
Definition at line 419 of file DHTTestApp.cc.
Referenced by handleTimerEvent().
00420 { 00421 char value[DHTTESTAPP_VALUE_LEN + 1]; 00422 00423 for (int i = 0; i < DHTTESTAPP_VALUE_LEN; i++) { 00424 value[i] = intuniform(0, 25) + 'a'; 00425 } 00426 00427 value[DHTTESTAPP_VALUE_LEN] = '\0'; 00428 return BinaryValue(value); 00429 }
OverlayKey DHTTestApp::getRandomKey | ( | ) | [private] |
Get a random key of the hashmap.
void DHTTestApp::handleGetResponse | ( | DHTgetCAPIResponse * | msg, | |
DHTStatsContext * | context | |||
) | [private, virtual] |
processes get responses
method to handle get responses should be overwritten in derived application if needed
msg | get response message | |
context | context object used for collecting statistics |
Definition at line 172 of file DHTTestApp.cc.
Referenced by handleRpcResponse().
00174 { 00175 if (context->measurementPhase == false) { 00176 // don't count response, if the request was not sent 00177 // in the measurement phase 00178 delete context; 00179 return; 00180 } 00181 00182 RECORD_STATS(globalStatistics->addStdDev("DHTTestApp: GET Latency (s)", 00183 SIMTIME_DBL(simTime() - context->requestTime))); 00184 00185 if (!(msg->getIsSuccess())) { 00186 cout << "DHTTestApp: success == false" << endl; 00187 RECORD_STATS(numGetError++); 00188 delete context; 00189 return; 00190 } 00191 00192 const DHTEntry* entry = globalDhtTestMap->findEntry(context->key); 00193 00194 if (entry == NULL) { 00195 //unexpected key 00196 RECORD_STATS(numGetError++); 00197 cout << "DHTTestApp: unexpected key" << endl; 00198 delete context; 00199 return; 00200 } 00201 00202 if (simTime() > entry->endtime) { 00203 //this key doesn't exist anymore in the DHT, delete it in our hashtable 00204 00205 globalDhtTestMap->eraseEntry(context->key); 00206 delete context; 00207 00208 if (msg->getResultArraySize() > 0) { 00209 RECORD_STATS(numGetError++); 00210 cout << "DHTTestApp: deleted key still available" << endl; 00211 return; 00212 } else { 00213 RECORD_STATS(numGetSuccess++); 00214 //cout << "DHTTestApp: success (1)" << endl; 00215 return; 00216 } 00217 } else { 00218 delete context; 00219 if ((msg->getResultArraySize() > 0) && (msg->getResult(0).getValue() != entry->value)) { 00220 RECORD_STATS(numGetError++); 00221 cout << "DHTTestApp: wrong value" << endl; 00222 cout << "value: " << msg->getResult(0).getValue() << endl; 00223 return; 00224 } else { 00225 RECORD_STATS(numGetSuccess++); 00226 //cout << "DHTTestApp: success (2)" << endl; 00227 return; 00228 } 00229 } 00230 00231 }
void DHTTestApp::handleNodeLeaveNotification | ( | ) | [private, virtual] |
This method gets call **.gracefulLeaveDelay seconds before it is killed.
Reimplemented from BaseApp.
Definition at line 431 of file DHTTestApp.cc.
00432 { 00433 nodeIsLeavingSoon = true; 00434 }
void DHTTestApp::handlePutResponse | ( | DHTputCAPIResponse * | msg, | |
DHTStatsContext * | context | |||
) | [private, virtual] |
processes put responses
method to handle put responses should be overwritten in derived application if needed
msg | put response message | |
context | context object used for collecting statistics |
Definition at line 147 of file DHTTestApp.cc.
Referenced by handleRpcResponse().
00149 { 00150 DHTEntry entry = {context->value, simTime() + ttl}; 00151 00152 globalDhtTestMap->insertEntry(context->key, entry); 00153 00154 if (context->measurementPhase == false) { 00155 // don't count response, if the request was not sent 00156 // in the measurement phase 00157 delete context; 00158 return; 00159 } 00160 00161 if (msg->getIsSuccess()) { 00162 RECORD_STATS(numPutSuccess++); 00163 RECORD_STATS(globalStatistics->addStdDev("DHTTestApp: PUT Latency (s)", 00164 SIMTIME_DBL(simTime() - context->requestTime))); 00165 } else { 00166 RECORD_STATS(numPutError++); 00167 } 00168 00169 delete context; 00170 }
void DHTTestApp::handleRpcResponse | ( | BaseResponseMessage * | msg, | |
const RpcState & | rpcState, | |||
simtime_t | rtt | |||
) | [private, virtual] |
This method is called if an RPC response has been received.
msg | The response message. | |
rpcState | Reference to an RpcState object containing e.g. the original call message, the destination (TransportAddress and/or OverlayKey), a context pointer, ... | |
rtt | The round-trip time of this RPC |
Reimplemented from RpcListener.
Definition at line 121 of file DHTTestApp.cc.
00123 { 00124 RPC_SWITCH_START(msg) 00125 RPC_ON_RESPONSE( DHTputCAPI ) { 00126 handlePutResponse(_DHTputCAPIResponse, 00127 check_and_cast<DHTStatsContext*>(state.getContext())); 00128 EV << "[DHTTestApp::handleRpcResponse()]\n" 00129 << " DHT Put RPC Response received: id=" << state.getId() 00130 << " msg=" << *_DHTputCAPIResponse << " rtt=" << rtt 00131 << endl; 00132 break; 00133 } 00134 RPC_ON_RESPONSE(DHTgetCAPI) 00135 { 00136 handleGetResponse(_DHTgetCAPIResponse, 00137 check_and_cast<DHTStatsContext*>(state.getContext())); 00138 EV << "[DHTTestApp::handleRpcResponse()]\n" 00139 << " DHT Get RPC Response received: id=" << state.getId() 00140 << " msg=" << *_DHTgetCAPIResponse << " rtt=" << rtt 00141 << endl; 00142 break; 00143 } 00144 RPC_SWITCH_END() 00145 }
void DHTTestApp::handleTimerEvent | ( | cMessage * | msg | ) | [private, virtual] |
processes self-messages
method to handle self-messages should be overwritten in derived application if needed
msg | self-message |
Reimplemented from BaseRpc.
Definition at line 291 of file DHTTestApp.cc.
00292 { 00293 if (msg->isName("dhttest_put_timer")) { 00294 // schedule next timer event 00295 scheduleAt(simTime() + truncnormal(mean, deviation), msg); 00296 00297 // do nothing if the network is still in the initialization phase 00298 if (((!activeNetwInitPhase) && (underlayConfigurator->isInInitPhase())) 00299 || underlayConfigurator->isSimulationEndingSoon() 00300 || nodeIsLeavingSoon) 00301 return; 00302 00303 if (p2pnsTraffic) { 00304 if (globalDhtTestMap->p2pnsNameCount < 4*globalNodeList->getNumNodes()) { 00305 for (int i = 0; i < 4; i++) { 00306 // create a put test message with random destination key 00307 OverlayKey destKey = OverlayKey::random(); 00308 DHTputCAPICall* dhtPutMsg = new DHTputCAPICall(); 00309 dhtPutMsg->setKey(destKey); 00310 dhtPutMsg->setValue(generateRandomValue()); 00311 dhtPutMsg->setTtl(ttl); 00312 dhtPutMsg->setIsModifiable(true); 00313 00314 RECORD_STATS(numSent++; numPutSent++); 00315 sendInternalRpcCall(TIER1_COMP, dhtPutMsg, 00316 new DHTStatsContext(globalStatistics->isMeasuring(), 00317 simTime(), destKey, dhtPutMsg->getValue())); 00318 globalDhtTestMap->p2pnsNameCount++; 00319 } 00320 } 00321 cancelEvent(msg); 00322 return; 00323 } 00324 00325 // create a put test message with random destination key 00326 OverlayKey destKey = OverlayKey::random(); 00327 DHTputCAPICall* dhtPutMsg = new DHTputCAPICall(); 00328 dhtPutMsg->setKey(destKey); 00329 dhtPutMsg->setValue(generateRandomValue()); 00330 dhtPutMsg->setTtl(ttl); 00331 dhtPutMsg->setIsModifiable(true); 00332 00333 RECORD_STATS(numSent++; numPutSent++); 00334 sendInternalRpcCall(TIER1_COMP, dhtPutMsg, 00335 new DHTStatsContext(globalStatistics->isMeasuring(), 00336 simTime(), destKey, dhtPutMsg->getValue())); 00337 } else if (msg->isName("dhttest_get_timer")) { 00338 scheduleAt(simTime() + truncnormal(mean, deviation), msg); 00339 00340 // do nothing if the network is still in the initialization phase 00341 if (((!activeNetwInitPhase) && (underlayConfigurator->isInInitPhase())) 00342 || underlayConfigurator->isSimulationEndingSoon() 00343 || nodeIsLeavingSoon) { 00344 return; 00345 } 00346 00347 if (p2pnsTraffic && (uniform(0, 1) > ((double)mean/1800.0))) { 00348 return; 00349 } 00350 00351 const OverlayKey& key = globalDhtTestMap->getRandomKey(); 00352 00353 if (key.isUnspecified()) { 00354 EV << "[DHTTestApp::handleTimerEvent() @ " << thisNode.getAddress() 00355 << " (" << thisNode.getKey().toString(16) << ")]\n" 00356 << " Error: No key available in global DHT test map!" 00357 << endl; 00358 return; 00359 } 00360 00361 DHTgetCAPICall* dhtGetMsg = new DHTgetCAPICall(); 00362 dhtGetMsg->setKey(key); 00363 RECORD_STATS(numSent++; numGetSent++); 00364 00365 sendInternalRpcCall(TIER1_COMP, dhtGetMsg, 00366 new DHTStatsContext(globalStatistics->isMeasuring(), 00367 simTime(), key)); 00368 } else if (msg->isName("dhttest_mod_timer")) { 00369 scheduleAt(simTime() + truncnormal(mean, deviation), msg); 00370 00371 // do nothing if the network is still in the initialization phase 00372 if (((!activeNetwInitPhase) && (underlayConfigurator->isInInitPhase())) 00373 || underlayConfigurator->isSimulationEndingSoon() 00374 || nodeIsLeavingSoon) { 00375 return; 00376 } 00377 00378 if (p2pnsTraffic) { 00379 if (globalDhtTestMap->p2pnsNameCount >= 4*globalNodeList->getNumNodes()) { 00380 const OverlayKey& key = globalDhtTestMap->getRandomKey(); 00381 00382 if (key.isUnspecified()) 00383 return; 00384 00385 DHTputCAPICall* dhtPutMsg = new DHTputCAPICall(); 00386 dhtPutMsg->setKey(key); 00387 dhtPutMsg->setValue(generateRandomValue()); 00388 dhtPutMsg->setTtl(ttl); 00389 dhtPutMsg->setIsModifiable(true); 00390 00391 RECORD_STATS(numSent++; numPutSent++); 00392 sendInternalRpcCall(TIER1_COMP, dhtPutMsg, 00393 new DHTStatsContext(globalStatistics->isMeasuring(), 00394 simTime(), key, dhtPutMsg->getValue())); 00395 } 00396 cancelEvent(msg); 00397 return; 00398 } 00399 00400 const OverlayKey& key = globalDhtTestMap->getRandomKey(); 00401 00402 if (key.isUnspecified()) 00403 return; 00404 00405 DHTputCAPICall* dhtPutMsg = new DHTputCAPICall(); 00406 dhtPutMsg->setKey(key); 00407 dhtPutMsg->setValue(generateRandomValue()); 00408 dhtPutMsg->setTtl(ttl); 00409 dhtPutMsg->setIsModifiable(true); 00410 00411 RECORD_STATS(numSent++; numPutSent++); 00412 sendInternalRpcCall(TIER1_COMP, dhtPutMsg, 00413 new DHTStatsContext(globalStatistics->isMeasuring(), 00414 simTime(), key, dhtPutMsg->getValue())); 00415 } 00416 }
void DHTTestApp::handleTraceMessage | ( | cMessage * | msg | ) | [private, virtual] |
handleTraceMessage gets called of handleMessage(cMessage* msg) if a message arrives at trace_in.
The command included in this message should be parsed and handled.
msg | the command message to handle |
Reimplemented from BaseApp.
Definition at line 233 of file DHTTestApp.cc.
00234 { 00235 char* cmd = new char[strlen(msg->getName()) + 1]; 00236 strcpy(cmd, msg->getName()); 00237 00238 if (strlen(msg->getName()) < 5) { 00239 delete[] cmd; 00240 delete msg; 00241 return; 00242 } 00243 00244 if (strncmp(cmd, "PUT ", 4) == 0) { 00245 // Generate key 00246 char* buf = cmd + 4; 00247 00248 while (!isspace(buf[0])) { 00249 if (buf[0] == '\0') 00250 throw cRuntimeError("Error parsing PUT command"); 00251 buf++; 00252 } 00253 00254 buf[0] = '\0'; 00255 BinaryValue b(cmd + 4); 00256 OverlayKey destKey(OverlayKey::sha1(b)); 00257 00258 // get value 00259 buf++; 00260 00261 // build putMsg 00262 DHTputCAPICall* dhtPutMsg = new DHTputCAPICall(); 00263 dhtPutMsg->setKey(destKey); 00264 dhtPutMsg->setValue(buf); 00265 dhtPutMsg->setTtl(ttl); 00266 dhtPutMsg->setIsModifiable(true); 00267 RECORD_STATS(numSent++; numPutSent++); 00268 sendInternalRpcCall(TIER1_COMP, dhtPutMsg, 00269 new DHTStatsContext(globalStatistics->isMeasuring(), 00270 simTime(), destKey)); 00271 } else if (strncmp(cmd, "GET ", 4) == 0) { 00272 // Get key 00273 BinaryValue b(cmd + 4); 00274 OverlayKey key(OverlayKey::sha1(b)); 00275 00276 DHTgetCAPICall* dhtGetMsg = new DHTgetCAPICall(); 00277 dhtGetMsg->setKey(key); 00278 RECORD_STATS(numSent++; numGetSent++); 00279 sendInternalRpcCall(TIER1_COMP, dhtGetMsg, 00280 new DHTStatsContext(globalStatistics->isMeasuring(), 00281 simTime(), key)); 00282 } else { 00283 throw cRuntimeError("Unknown trace command; " 00284 "only GET and PUT are allowed"); 00285 } 00286 00287 delete[] cmd; 00288 delete msg; 00289 }
void DHTTestApp::initializeApp | ( | int | stage | ) | [private, virtual] |
initializes derived class-attributes
stage | the init stage |
Reimplemented from BaseApp.
Definition at line 53 of file DHTTestApp.cc.
00054 { 00055 if (stage != MIN_STAGE_APP) 00056 return; 00057 00058 // fetch parameters 00059 debugOutput = par("debugOutput"); 00060 activeNetwInitPhase = par("activeNetwInitPhase"); 00061 00062 mean = par("testInterval"); 00063 p2pnsTraffic = par("p2pnsTraffic"); 00064 deviation = mean / 10; 00065 00066 if (p2pnsTraffic) { 00067 ttl = 3600*24*365; 00068 } else { 00069 ttl = par("testTtl"); 00070 } 00071 00072 globalNodeList = GlobalNodeListAccess().get(); 00073 underlayConfigurator = UnderlayConfiguratorAccess().get(); 00074 globalStatistics = GlobalStatisticsAccess().get(); 00075 00076 globalDhtTestMap = dynamic_cast<GlobalDhtTestMap*>(simulation.getModuleByPath( 00077 "globalObserver.globalFunctions[0].function")); 00078 00079 if (globalDhtTestMap == NULL) { 00080 throw cRuntimeError("DHTTestApp::initializeApp(): " 00081 "GlobalDhtTestMap module not found!"); 00082 } 00083 00084 // statistics 00085 numSent = 0; 00086 numGetSent = 0; 00087 numGetError = 0; 00088 numGetSuccess = 0; 00089 numPutSent = 0; 00090 numPutError = 0; 00091 numPutSuccess = 0; 00092 00093 //initRpcs(); 00094 WATCH(numSent); 00095 WATCH(numGetSent); 00096 WATCH(numGetError); 00097 WATCH(numGetSuccess); 00098 WATCH(numPutSent); 00099 WATCH(numPutError); 00100 WATCH(numPutSuccess); 00101 00102 nodeIsLeavingSoon = false; 00103 00104 // initiate test message transmission 00105 dhttestput_timer = new cMessage("dhttest_put_timer"); 00106 dhttestget_timer = new cMessage("dhttest_get_timer"); 00107 dhttestmod_timer = new cMessage("dhttest_mod_timer"); 00108 00109 if (mean > 0) { 00110 scheduleAt(simTime() + truncnormal(mean, deviation), 00111 dhttestput_timer); 00112 scheduleAt(simTime() + truncnormal(mean + mean / 3, 00113 deviation), 00114 dhttestget_timer); 00115 scheduleAt(simTime() + truncnormal(mean + 2 * mean / 3, 00116 deviation), 00117 dhttestmod_timer); 00118 } 00119 }
bool DHTTestApp::activeNetwInitPhase [private] |
is app active in network init phase?
Definition at line 148 of file DHTTestApp.h.
Referenced by handleTimerEvent(), and initializeApp().
bool DHTTestApp::debugOutput [private] |
debug output yes/no?
Reimplemented from BaseApp.
Definition at line 143 of file DHTTestApp.h.
Referenced by initializeApp().
double DHTTestApp::deviation [private] |
deviation of time interval
Definition at line 145 of file DHTTestApp.h.
Referenced by handleTimerEvent(), and initializeApp().
const int DHTTestApp::DHTTESTAPP_VALUE_LEN = 20 [static, private] |
Definition at line 162 of file DHTTestApp.h.
Referenced by generateRandomValue().
cMessage * DHTTestApp::dhttestget_timer [private] |
Definition at line 159 of file DHTTestApp.h.
Referenced by DHTTestApp(), initializeApp(), and ~DHTTestApp().
cMessage * DHTTestApp::dhttestmod_timer [private] |
Definition at line 159 of file DHTTestApp.h.
Referenced by DHTTestApp(), initializeApp(), and ~DHTTestApp().
cMessage* DHTTestApp::dhttestput_timer [private] |
Definition at line 159 of file DHTTestApp.h.
Referenced by DHTTestApp(), initializeApp(), and ~DHTTestApp().
GlobalDhtTestMap* DHTTestApp::globalDhtTestMap [private] |
pointer to the GlobalDhtTestMap module
Definition at line 140 of file DHTTestApp.h.
Referenced by handleGetResponse(), handlePutResponse(), handleTimerEvent(), and initializeApp().
GlobalNodeList* DHTTestApp::globalNodeList [private] |
pointer to GlobalNodeList in this node
Reimplemented from BaseApp.
Definition at line 137 of file DHTTestApp.h.
Referenced by handleTimerEvent(), and initializeApp().
GlobalStatistics* DHTTestApp::globalStatistics [private] |
pointer to GlobalStatistics module in this node
Reimplemented from BaseApp.
Definition at line 139 of file DHTTestApp.h.
Referenced by finishApp(), handleGetResponse(), handlePutResponse(), handleTimerEvent(), handleTraceMessage(), and initializeApp().
double DHTTestApp::mean [private] |
mean time interval between sending test messages
Definition at line 144 of file DHTTestApp.h.
Referenced by handleTimerEvent(), and initializeApp().
bool DHTTestApp::nodeIsLeavingSoon [private] |
true if the node is going to be killed shortly
Definition at line 160 of file DHTTestApp.h.
Referenced by handleNodeLeaveNotification(), handleTimerEvent(), and initializeApp().
int DHTTestApp::numGetError [private] |
number of false get responses
Definition at line 153 of file DHTTestApp.h.
Referenced by finishApp(), handleGetResponse(), and initializeApp().
int DHTTestApp::numGetSent [private] |
number of get sent
Definition at line 152 of file DHTTestApp.h.
Referenced by finishApp(), handleTimerEvent(), handleTraceMessage(), and initializeApp().
int DHTTestApp::numGetSuccess [private] |
number of false get responses
Definition at line 154 of file DHTTestApp.h.
Referenced by finishApp(), handleGetResponse(), and initializeApp().
int DHTTestApp::numPutError [private] |
number of error in put responses
Definition at line 156 of file DHTTestApp.h.
Referenced by finishApp(), handlePutResponse(), and initializeApp().
int DHTTestApp::numPutSent [private] |
number of put sent
Definition at line 155 of file DHTTestApp.h.
Referenced by finishApp(), handleTimerEvent(), handleTraceMessage(), and initializeApp().
int DHTTestApp::numPutSuccess [private] |
number of success in put responses
Definition at line 157 of file DHTTestApp.h.
Referenced by finishApp(), handlePutResponse(), and initializeApp().
int DHTTestApp::numSent [private] |
number of sent packets
Definition at line 151 of file DHTTestApp.h.
Referenced by finishApp(), handleTimerEvent(), handleTraceMessage(), and initializeApp().
bool DHTTestApp::p2pnsTraffic [private] |
model p2pns application traffic */
Definition at line 147 of file DHTTestApp.h.
Referenced by handleTimerEvent(), and initializeApp().
int DHTTestApp::ttl [private] |
ttl for stored DHT records
Definition at line 146 of file DHTTestApp.h.
Referenced by handlePutResponse(), handleTimerEvent(), handleTraceMessage(), and initializeApp().
pointer to UnderlayConfigurator in this node
Reimplemented from BaseApp.
Definition at line 135 of file DHTTestApp.h.
Referenced by handleTimerEvent(), and initializeApp().