PastryLeafSet module. More...
#include <PastryLeafSet.h>
Public Member Functions | |
void | initializeSet (uint32_t numberOfLeaves, uint32_t bitsPerDigit, simtime_t repairTimeout, const NodeHandle &owner, BasePastry *overlay) |
Initializes the leaf set. | |
virtual const NodeHandle & | getDestinationNode (const OverlayKey &destination) |
gets the final node according to the Pastry routing scheme. | |
virtual const NodeHandle & | findCloserNode (const OverlayKey &destination, bool optimize=false) |
try to find a node numerically closer to a given key with the same shared prefix as the current node in the leaf set. | |
void | findCloserNodes (const OverlayKey &destination, NodeVector *nodes) |
virtual const TransportAddress & | failedNode (const TransportAddress &failed) |
tells the leafset that a node has failed | |
virtual const TransportAddress & | repair (const PastryStateMessage *msg, const PastryStateMsgProximity *prox) |
attempt to repair the leafset using a received REPAIR message | |
bool | isClosestNode (const OverlayKey &destination) const |
checks if we are the closest node to key destination in the overlay | |
virtual void | dumpToStateMessage (PastryStateMessage *msg) const |
dump content of the set to a PastryStateMessage | |
virtual void | dumpToStateMessage (PastryLeafsetMessage *msg) const |
dump content of the set to a PastryLeafsetMessage | |
virtual const TransportAddress & | getRandomNode () |
returns a random node from the leafset | |
bool | mergeNode (const NodeHandle &node, simtime_t prox) |
merge a node into LeafSet | |
const NodeHandle & | getPredecessor (void) const |
return predecessor node for visualizing | |
const NodeHandle & | getSuccessor (void) const |
return successor node for visualizing | |
bool | isValid (void) const |
check if LeafSet knows at least one node to the left and to the right | |
virtual void | dumpToVector (std::vector< TransportAddress > &affected) const |
appends all leaf set entries to a given vector of TransportAddresses, needed to find all Nodes to be notified after joining. | |
NodeVector * | createSiblingVector (const OverlayKey &key, int numSiblings) const |
PastryNewLeafsMessage * | getNewLeafsMessage (void) |
generates a newLeafs-message if LeafSet changed since last call to this method. | |
Private Member Functions | |
virtual void | earlyInit (void) |
initialize watches etc. | |
const NodeHandle & | getBiggestNode (void) const |
return the node with the biggest key in the LeafSet or NodeHandle::UNSPECIFIED_NODE if LeafSet is empty | |
const OverlayKey & | getBiggestKey (void) const |
return the biggest key in the LeafSet or OverlayKey::UNSPECIFIED_KEY if LeafSet is empty | |
const NodeHandle & | getSmallestNode (void) const |
return the node with the smallest key in the LeafSet or NodeHandle::UNSPECIFIED_NODE if LeafSet is empty | |
const OverlayKey & | getSmallestKey (void) const |
return the smallest key in the LeafSet or OverlayKey::UNSPECIFIED_KEY if LeafSet is empty | |
bool | isLeft (const OverlayKey &key) const |
test if a given key should be placed on the left or on the right side of the leaf set | |
void | insertLeaf (std::vector< NodeHandle >::iterator &it, const NodeHandle &node) |
insert a leaf at a given position | |
bool | balanceLeafSet () |
Private Attributes | |
uint32_t | numberOfLeaves |
simtime_t | repairTimeout |
BasePastry * | overlay |
pointer to the main pastry module | |
std::vector< NodeHandle > | leaves |
std::vector< NodeHandle >::iterator | smaller |
std::vector< NodeHandle >::iterator | bigger |
std::map< TransportAddress, PLSRepairData > | awaitingRepair |
bool | newLeafs |
bool | isFull |
bool | wasFull |
PastryLeafSet module.
This module contains the LeafSet of the Pastry implementation.
Definition at line 60 of file PastryLeafSet.h.
bool PastryLeafSet::balanceLeafSet | ( | ) | [private] |
Definition at line 380 of file PastryLeafSet.cc.
Referenced by failedNode(), and insertLeaf().
{ if (isFull || (!leaves.front().isUnspecified() && !(leaves.end() - 2)->isUnspecified()) || (!leaves.back().isUnspecified() && !(leaves.begin() + 1)->isUnspecified())) return false; std::vector<NodeHandle>::iterator it_left, it_right; for (it_left = smaller, it_right = bigger; it_right != leaves.end(); --it_left, ++it_right) { if (it_left->isUnspecified()) { if (it_right->isUnspecified() || (it_right + 1) == leaves.end() || (it_right + 1)->isUnspecified()) return false; *it_left = *(it_right + 1); *(it_right + 1) = NodeHandle::UNSPECIFIED_NODE; return true; } else if (it_right->isUnspecified()) { if (it_left == leaves.begin() || (it_left - 1)->isUnspecified()) return false; *it_right = *(it_left - 1); *(it_left - 1) = NodeHandle::UNSPECIFIED_NODE; return true; } } return false; // should not happen }
NodeVector * PastryLeafSet::createSiblingVector | ( | const OverlayKey & | key, | |
int | numSiblings | |||
) | const |
Definition at line 220 of file PastryLeafSet.cc.
Referenced by BasePastry::findNode(), and BasePastry::isSiblingFor().
{ std::vector<NodeHandle>::const_iterator it; // create temporary comparator KeyDistanceComparator<KeyRingMetric>* comp = new KeyDistanceComparator<KeyRingMetric>( key ); // create result vector NodeVector* result = new NodeVector( numSiblings, comp ); result->add(owner); for (it = leaves.begin(); it != leaves.end(); it++) { if (!it->isUnspecified()) { result->add(*it); } } delete comp; if (!isValid()) { return result; } // if the leafset is not full, we could have a very small network // => return true (FIXME hack) if (leaves.front().isUnspecified() || leaves.back().isUnspecified()) { return result; } if ((result->contains(getBiggestKey())) || (result->contains(getSmallestKey()))) { delete result; return NULL; } return result; }
void PastryLeafSet::dumpToStateMessage | ( | PastryStateMessage * | msg | ) | const [virtual] |
dump content of the set to a PastryStateMessage
msg | the PastryStateMessage to be filled with entries |
Implements PastryStateObject.
Definition at line 163 of file PastryLeafSet.cc.
Referenced by Bamboo::changeState(), Pastry::doSecondStage(), BasePastry::sendLeafset(), and BasePastry::sendStateTables().
{ uint32_t i = 0; uint32_t size = 0; std::vector<NodeHandle>::const_iterator it; msg->setLeafSetArraySize(numberOfLeaves); for (it = leaves.begin(); it != leaves.end(); it++) { if (!it->isUnspecified()) { ++size; msg->setLeafSet(i++, *it); } } msg->setLeafSetArraySize(size); }
void PastryLeafSet::dumpToStateMessage | ( | PastryLeafsetMessage * | msg | ) | const [virtual] |
dump content of the set to a PastryLeafsetMessage
msg | the PastryLeafsetMessage to be filled with entries |
Definition at line 180 of file PastryLeafSet.cc.
{ uint32_t i = 0; uint32_t size = 0; std::vector<NodeHandle>::const_iterator it; msg->setLeafSetArraySize(numberOfLeaves); for (it = leaves.begin(); it != leaves.end(); it++) { if (!it->isUnspecified()) { ++size; msg->setLeafSet(i++, *it); } } msg->setLeafSetArraySize(size); }
void PastryLeafSet::dumpToVector | ( | std::vector< TransportAddress > & | affected | ) | const [virtual] |
appends all leaf set entries to a given vector of TransportAddresses, needed to find all Nodes to be notified after joining.
affected | the vector to fill with leaf set entries |
Implements PastryStateObject.
Definition at line 412 of file PastryLeafSet.cc.
Referenced by Pastry::changeState().
void PastryLeafSet::earlyInit | ( | void | ) | [private, virtual] |
initialize watches etc.
Implements PastryStateObject.
Definition at line 53 of file PastryLeafSet.cc.
{ WATCH_VECTOR(leaves); }
const TransportAddress & PastryLeafSet::failedNode | ( | const TransportAddress & | failed | ) | [virtual] |
tells the leafset that a node has failed
failed | the failed node |
Implements PastryStateObject.
Definition at line 486 of file PastryLeafSet.cc.
Referenced by Pastry::handleFailedNode(), and Bamboo::handleFailedNode().
{ std::vector<NodeHandle>::iterator i; const TransportAddress* ask; bool left = true; // search failed node in leafset: for (i = leaves.begin(); i != leaves.end(); i++) { if (i == bigger) left = false; if ((! i->isUnspecified()) && (i->getIp() == failed.getIp())) break; } // failed node not in leafset: if (i == leaves.end()) return TransportAddress::UNSPECIFIED_NODE; overlay->callUpdate(*i, false); // remove failed node: leaves.erase(i); newLeafs = true; wasFull = isFull; isFull = false; // insert UNSPECIFIED_NODE at front or back and return correct node // to ask for repair: if (left) { leaves.insert(leaves.begin(), NodeHandle::UNSPECIFIED_NODE); bigger = leaves.begin() + (numberOfLeaves >> 1); smaller = bigger - 1; ask = static_cast<const TransportAddress*>(&(getSmallestNode())); } else { leaves.push_back(NodeHandle::UNSPECIFIED_NODE); bigger = leaves.begin() + (numberOfLeaves >> 1); smaller = bigger - 1; ask = static_cast<const TransportAddress*>(&(getBiggestNode())); } assert(ask->isUnspecified() || *ask != overlay->getThisNode()); balanceLeafSet(); LEAF_TEST(); assert(ask->isUnspecified() || *ask != overlay->getThisNode()); if (! ask->isUnspecified()) awaitingRepair[*ask] = PLSRepairData(simTime(), left); return *ask; }
const NodeHandle & PastryLeafSet::findCloserNode | ( | const OverlayKey & | destination, | |
bool | optimize = false | |||
) | [virtual] |
try to find a node numerically closer to a given key with the same shared prefix as the current node in the leaf set.
this method is to be called, when a regular next hop couldn't be found or wasn't reachable.
destination | the destination key | |
optimize | if set, check all nodes and return the best/closest one |
Implements PastryStateObject.
Definition at line 458 of file PastryLeafSet.cc.
Referenced by BasePastry::findNode().
{ std::vector<NodeHandle>::const_iterator i; const NodeHandle* ret = &NodeHandle::UNSPECIFIED_NODE; // this will only be called after getDestinationNode() returned // NodeHandle::UNSPECIFIED_NODE, so a closer Node can only be the biggest // or the smallest node in the LeafSet. const NodeHandle& smallest = getSmallestNode(); const NodeHandle& biggest = getBiggestNode(); if ((!smallest.isUnspecified()) && (specialCloserCondition(smallest, destination, *ret))) { if (optimize) ret = &smallest; else return smallest; } if ((!biggest.isUnspecified()) && (specialCloserCondition(biggest, destination, *ret))) { if (optimize) ret = &biggest; else return biggest; } return *ret; }
void PastryLeafSet::findCloserNodes | ( | const OverlayKey & | destination, | |
NodeVector * | nodes | |||
) | [virtual] |
Implements PastryStateObject.
Definition at line 447 of file PastryLeafSet.cc.
Referenced by BasePastry::findNode().
const OverlayKey & PastryLeafSet::getBiggestKey | ( | void | ) | const [private] |
return the biggest key in the LeafSet or OverlayKey::UNSPECIFIED_KEY if LeafSet is empty
Definition at line 442 of file PastryLeafSet.cc.
Referenced by createSiblingVector(), and getDestinationNode().
{ return getBiggestNode().getKey(); }
const NodeHandle & PastryLeafSet::getBiggestNode | ( | void | ) | const [private] |
return the node with the biggest key in the LeafSet or NodeHandle::UNSPECIFIED_NODE if LeafSet is empty
Definition at line 434 of file PastryLeafSet.cc.
Referenced by failedNode(), findCloserNode(), getBiggestKey(), and repair().
{ std::vector<NodeHandle>::const_iterator i = leaves.end()-1; while ((i->isUnspecified()) && (i != bigger)) i--; assert(i->isUnspecified() || *i != overlay->getThisNode()); return *i; }
const NodeHandle & PastryLeafSet::getDestinationNode | ( | const OverlayKey & | destination | ) | [virtual] |
gets the final node according to the Pastry routing scheme.
destination | the destination key |
Reimplemented from PastryStateObject.
Definition at line 106 of file PastryLeafSet.cc.
Referenced by BasePastry::findNode().
{ std::vector<NodeHandle>::const_iterator i; const OverlayKey* smallest; const OverlayKey* biggest; const NodeHandle* ret = &NodeHandle::UNSPECIFIED_NODE; // check whether destination is inside leafSet: smallest = &(getSmallestKey()); biggest = &(getBiggestKey()); if (smallest->isUnspecified()) smallest = &(owner.getKey()); if (biggest->isUnspecified()) biggest = &(owner.getKey()); if (!destination.isBetweenLR(*smallest, *biggest)) return *ret; // find the closest node: for (i = leaves.begin(); i != leaves.end(); i++) { if (i->isUnspecified()) continue; // note for next line: // * dereferences iterator, & gets address of element. if (isCloser(*i, destination, *ret)) ret = &(*i); } return *ret; }
PastryNewLeafsMessage * PastryLeafSet::getNewLeafsMessage | ( | void | ) |
generates a newLeafs-message if LeafSet changed since last call to this method.
Definition at line 588 of file PastryLeafSet.cc.
Referenced by BasePastry::newLeafs().
{ std::vector<NodeHandle>::const_iterator it; PastryNewLeafsMessage* msg; uint32_t i = 0; if (! newLeafs) return NULL; newLeafs = false; msg = new PastryNewLeafsMessage("PastryNewLeafs"); msg->setLeafsArraySize(numberOfLeaves); for (it = leaves.begin(); it != leaves.end(); it++) msg->setLeafs(i++, *it); msg->setBitLength(PASTRYNEWLEAFS_L(msg)); return msg; }
const NodeHandle & PastryLeafSet::getPredecessor | ( | void | ) | const |
return predecessor node for visualizing
Definition at line 96 of file PastryLeafSet.cc.
Referenced by BasePastry::updateTooltip().
{ return *smaller; }
const TransportAddress & PastryLeafSet::getRandomNode | ( | ) | [virtual] |
returns a random node from the leafset
Definition at line 196 of file PastryLeafSet.cc.
Referenced by Bamboo::doLeafsetMaintenance().
{ //std::vector<NodeHandle>::iterator i; uint32_t rnd; int i; rnd = intuniform(0, numberOfLeaves - 1, 0); i = rnd; //while (rnd < leaves.size()) { while (i < (int)leaves.size()) { if (!leaves[i].isUnspecified()) return leaves[i]; else i++;//rnd++; } i = rnd; while (i >= 0) { if (!leaves[i].isUnspecified()) return leaves[i]; else i--; } EV << "Leafset::getRandomNode() returns UNSPECIFIED_NODE" "Leafset empty??" << endl; return TransportAddress::UNSPECIFIED_NODE; }
const OverlayKey & PastryLeafSet::getSmallestKey | ( | void | ) | const [private] |
return the smallest key in the LeafSet or OverlayKey::UNSPECIFIED_KEY if LeafSet is empty
Definition at line 429 of file PastryLeafSet.cc.
Referenced by createSiblingVector(), and getDestinationNode().
{ return getSmallestNode().getKey(); }
const NodeHandle & PastryLeafSet::getSmallestNode | ( | void | ) | const [private] |
return the node with the smallest key in the LeafSet or NodeHandle::UNSPECIFIED_NODE if LeafSet is empty
Definition at line 421 of file PastryLeafSet.cc.
Referenced by failedNode(), findCloserNode(), getSmallestKey(), and repair().
{ std::vector<NodeHandle>::const_iterator i = leaves.begin(); while ((i->isUnspecified()) && (i != smaller)) i++; assert(i->isUnspecified() || *i != overlay->getThisNode()); return *i; }
const NodeHandle & PastryLeafSet::getSuccessor | ( | void | ) | const |
return successor node for visualizing
Definition at line 91 of file PastryLeafSet.cc.
Referenced by BasePastry::updateTooltip().
{ return *bigger; }
void PastryLeafSet::initializeSet | ( | uint32_t | numberOfLeaves, | |
uint32_t | bitsPerDigit, | |||
simtime_t | repairTimeout, | |||
const NodeHandle & | owner, | |||
BasePastry * | overlay | |||
) |
Initializes the leaf set.
This should be called on startup
numberOfLeaves | Pastry configuration parameter | |
bitsPerDigit | number of bits per digits | |
repairTimeout | Pastry configuration parameter | |
owner | the node this table belongs to | |
overlay | pointer to the pastry main module |
Definition at line 58 of file PastryLeafSet.cc.
Referenced by BasePastry::baseChangeState().
{ if (numberOfLeaves % 2) throw "numberOfLeaves must be even."; this->owner = owner; this->numberOfLeaves = numberOfLeaves; this->repairTimeout = repairTimeout; this->bitsPerDigit = bitsPerDigit; this->overlay = overlay; if (!leaves.empty()) leaves.clear(); // fill Set with unspecified node handles for (uint32_t i = numberOfLeaves; i>0; i--) leaves.push_back(NodeHandle::UNSPECIFIED_NODE); // initialize iterators to mark the beginning of bigger/smaller keys // in the set bigger = leaves.begin() + (numberOfLeaves >> 1); smaller = bigger - 1; // reset repair marker: if (!awaitingRepair.empty()) awaitingRepair.clear(); newLeafs = false; isFull = false; wasFull = false; }
void PastryLeafSet::insertLeaf | ( | std::vector< NodeHandle >::iterator & | it, | |
const NodeHandle & | node | |||
) | [private] |
insert a leaf at a given position
it | iterator where to insert the new leaf | |
node | NodeHandle of new leaf |
Definition at line 329 of file PastryLeafSet.cc.
Referenced by mergeNode().
{ assert(node != overlay->getThisNode()); LEAF_TEST(); bool issmaller = (it <= smaller); if (issmaller) { if (!leaves.front().isUnspecified()) { overlay->callUpdate(leaves.front(), false); } overlay->callUpdate(node, true); leaves.insert(++it, node); NodeHandle& temp = leaves.front(); if (!temp.isUnspecified() && leaves.back().isUnspecified()) { leaves.back() = temp; } leaves.erase(leaves.begin()); } else { if (!leaves.back().isUnspecified()) { overlay->callUpdate(leaves.back(), false); } overlay->callUpdate(node, true); leaves.insert(it, node); NodeHandle& temp = leaves.back(); if (!temp.isUnspecified() && leaves.front().isUnspecified()) { leaves.front() = temp; } leaves.pop_back(); } if (!leaves.front().isUnspecified() && !leaves.back().isUnspecified()) { isFull = true; } else isFull = false; newLeafs = true; bigger = leaves.begin() + (numberOfLeaves >> 1); smaller = bigger - 1; // ensure balance in leafset if (!isFull) { balanceLeafSet(); } LEAF_TEST(); }
bool PastryLeafSet::isClosestNode | ( | const OverlayKey & | destination | ) | const |
checks if we are the closest node to key destination in the overlay
destination | the key to check |
Definition at line 136 of file PastryLeafSet.cc.
Referenced by BasePastry::findNode(), and BasePastry::isSiblingFor().
{ // check for simple cases first if (owner.getKey() == destination) { return true; } if (bigger->isUnspecified() && smaller->isUnspecified()) { return true; } // check if the next bigger or smaller node in the set is closer // than own node bool biggerIsCloser = false; bool smallerIsCloser = false; if (! bigger->isUnspecified()) { biggerIsCloser = isCloser(*bigger, destination); } if (! smaller->isUnspecified()) { smallerIsCloser = isCloser(*smaller, destination); } // return true if both are not closer return ((!biggerIsCloser) && (!smallerIsCloser)); }
bool PastryLeafSet::isLeft | ( | const OverlayKey & | key | ) | const [private] |
test if a given key should be placed on the left or on the right side of the leaf set
key | key to test |
bool PastryLeafSet::isValid | ( | void | ) | const |
check if LeafSet knows at least one node to the left and to the right
Definition at line 101 of file PastryLeafSet.cc.
Referenced by createSiblingVector(), Pastry::doSecondStage(), Pastry::handleFailedNode(), and Bamboo::handleFailedNode().
bool PastryLeafSet::mergeNode | ( | const NodeHandle & | node, | |
simtime_t | prox | |||
) | [virtual] |
merge a node into LeafSet
node | the node to merge | |
prox | the proximity value of the node |
Implements PastryStateObject.
Definition at line 261 of file PastryLeafSet.cc.
{ assert(node != overlay->getThisNode()); std::vector<NodeHandle>::iterator it, it_left, it_right; const OverlayKey* last_left = &(owner.getKey()); const OverlayKey* last_right = &(owner.getKey()); it_left = smaller; it_right = bigger; // avoid duplicates for (it = leaves.begin(); it != leaves.end(); ++it) { if (it->isUnspecified()) { isFull = false; continue; } if (it->getKey() == node.getKey()) return false; } // look for correct position in left and right half of leafset while (true) { if(!isFull) { // both sides free if(it_left->getKey().isUnspecified() && it_right->getKey().isUnspecified()) { insertLeaf(it_left, node); return true; } if (it_left->getKey().isUnspecified() && !node.getKey().isBetween(*last_right, it_right->getKey())) { // end of smaller entries found insertLeaf(it_left, node); return true; } if (it_right->getKey().isUnspecified() && !node.getKey().isBetween(it_left->getKey(), *last_left)) { // end of bigger entries found insertLeaf(it_right, node); return true; } } // left side if (node.getKey().isBetween(it_left->getKey(), *last_left)) { // found correct position for inserting the new entry between // existing ones insertLeaf(it_left, node); return true; } // right side if (node.getKey().isBetween(*last_right, it_right->getKey())) { // found correct position for inserting the new entry between // existing ones insertLeaf(it_right, node); return true; } last_right = &(it_right->getKey()); ++it_right; if (it_right == leaves.end()) break; last_left = &(it_left->getKey()); --it_left; } return false; }
const TransportAddress & PastryLeafSet::repair | ( | const PastryStateMessage * | msg, | |
const PastryStateMsgProximity * | prox | |||
) | [virtual] |
attempt to repair the leafset using a received REPAIR message
msg | the state message of type REPAIR | |
prox | record of proximity values matching the state message |
Definition at line 537 of file PastryLeafSet.cc.
Referenced by Pastry::handleStateMessage().
{ std::map<TransportAddress, PLSRepairData>::iterator it; const TransportAddress* ask; bool left; simtime_t now = simTime(); // first eliminate outdated entries in awaitingRepair: for (it = awaitingRepair.begin(); it != awaitingRepair.end();) { if (it->second.ts < (now - repairTimeout)) { awaitingRepair.erase(it++); } else it++; } // don't expect any more repair messages: if (awaitingRepair.empty()) return TransportAddress::UNSPECIFIED_NODE; // look for source node in our list: if ( (it = awaitingRepair.find(msg->getSender())) == awaitingRepair.end() ) return TransportAddress::UNSPECIFIED_NODE; // which side of the LeafSet is affected: left = it->second.left; // remove source node from list: awaitingRepair.erase(it); // merge info from repair message: if (mergeState(msg, prox) || isFull || !wasFull) { EV << "[PastryLeafSet::repair()]\n" << " LeafSet repair was successful." << endl; return TransportAddress::UNSPECIFIED_NODE; } else { // repair did not succeed, try again: ask = &( left ? getSmallestNode() : getBiggestNode() ); if (ask->isUnspecified() || *ask == msg->getSender()) { EV << "[PastryLeafSet::repair()]\n" << " LeafSet giving up repair attempt." << endl; return TransportAddress::UNSPECIFIED_NODE; } else { awaitingRepair[*ask] = PLSRepairData(simTime(), left); } return *ask; } }
std::map<TransportAddress, PLSRepairData> PastryLeafSet::awaitingRepair [private] |
Definition at line 203 of file PastryLeafSet.h.
Referenced by failedNode(), initializeSet(), and repair().
std::vector<NodeHandle>::iterator PastryLeafSet::bigger [private] |
Definition at line 201 of file PastryLeafSet.h.
Referenced by balanceLeafSet(), failedNode(), getBiggestNode(), getSuccessor(), initializeSet(), insertLeaf(), isClosestNode(), isValid(), and mergeNode().
bool PastryLeafSet::isFull [private] |
Definition at line 207 of file PastryLeafSet.h.
Referenced by balanceLeafSet(), failedNode(), initializeSet(), insertLeaf(), mergeNode(), and repair().
std::vector<NodeHandle> PastryLeafSet::leaves [private] |
Definition at line 199 of file PastryLeafSet.h.
Referenced by balanceLeafSet(), createSiblingVector(), dumpToStateMessage(), dumpToVector(), earlyInit(), failedNode(), findCloserNodes(), getBiggestNode(), getDestinationNode(), getNewLeafsMessage(), getRandomNode(), getSmallestNode(), initializeSet(), insertLeaf(), and mergeNode().
bool PastryLeafSet::newLeafs [private] |
Definition at line 205 of file PastryLeafSet.h.
Referenced by failedNode(), getNewLeafsMessage(), initializeSet(), and insertLeaf().
uint32_t PastryLeafSet::numberOfLeaves [private] |
Definition at line 196 of file PastryLeafSet.h.
Referenced by dumpToStateMessage(), failedNode(), getNewLeafsMessage(), getRandomNode(), and insertLeaf().
BasePastry* PastryLeafSet::overlay [private] |
pointer to the main pastry module
Definition at line 198 of file PastryLeafSet.h.
Referenced by failedNode(), getBiggestNode(), getSmallestNode(), insertLeaf(), and mergeNode().
simtime_t PastryLeafSet::repairTimeout [private] |
Definition at line 197 of file PastryLeafSet.h.
Referenced by repair().
std::vector<NodeHandle>::iterator PastryLeafSet::smaller [private] |
Definition at line 200 of file PastryLeafSet.h.
Referenced by balanceLeafSet(), failedNode(), getPredecessor(), getSmallestNode(), initializeSet(), insertLeaf(), isClosestNode(), isValid(), and mergeNode().
bool PastryLeafSet::wasFull [private] |
Definition at line 208 of file PastryLeafSet.h.
Referenced by failedNode(), initializeSet(), and repair().