File: Overlay/Pastry/Pastry.ned
Implementation of the Pastry KBR overlay as described in "Pastry: Scalable, Decentralized Object Location, and Routing for Large-Scale Peer-to-Peer Systems" by Antony Rowstron and Peter Druschel, published in Lecture Notes in Computer Science, volume 2218.
Author: Felix Palmen
The following diagram shows usage relationships between modules, networks and channels. Unresolved module (and channel) types are missing from the diagram. Click here to see the full picture.
If a module type shows up more than once, that means it has been defined in more than one NED file.
Pastry | The main module of the Pastry implementation |
PastryLeafSet | This module contains the leaf set of the Pastry implementation. |
PastryLeafSet | This module contains the leaf set of the Pastry implementation. |
PastryNeighborhoodSet | This module contains the neighborhood set of the Pastry implementation. |
PastryNeighborhoodSet | This module contains the neighborhood set of the Pastry implementation. |
PastryRoutingTable | This module contains the routing table of the Pastry implementation. |
PastryRoutingTable | This module contains the routing table of the Pastry implementation. |
Name | Direction | Description |
---|---|---|
from_udp | input | gate from the UDP layer |
to_udp | output | gate to the UDP layer |
from_app | input | gate from the application |
to_app | output | gate to the application |
Name | Type | Description |
---|---|---|
pastry.keyLength | numeric | length of Overlay Key |
pastry.localPort | numeric | UDP port for Pastry messages |
pastry.debugOutput | bool | enable debug output |
pastry.hopCountMax | numeric | maximum number of overlay hops |
pastry.joinOnApplicationRequest | bool | only join the overlay on application request |
pastry.drawOverlayTopology | bool | draw arrow to successor node? |
pastry.routingType | string | default routing mode (iterative, semi-recursive,...) |
pastry.recNumRedundantNodes | numeric | numRedundantNodes for recursive routing |
pastry.collectPerHopDelay | bool | delay statistics for single hops |
pastry.lookupRedundantNodes | numeric | number of next hops in each step |
pastry.lookupParallelPaths | numeric | number of parallel paths |
pastry.lookupParallelRpcs | numeric | number of nodes to ask in parallel |
pastry.lookupSecure | bool | true, if all nodes should be identified with a ping |
pastry.lookupMerge | bool | true, if parallel Rpc results should be merged |
pastry.lookupStrictParallelRpcs | bool | limited the number of concurrent rpcs to parameter parallelRpcs |
pastry.lookupUseAllParallelResponses | bool | merge all parallel responses from earlier steps |
pastry.lookupNewRpcOnEveryTimeout | bool | send a new RPC immediately after an RPC timeouts |
pastry.lookupNewRpcOnEveryResponse | bool | send a new RPC after every response, even if there was no progress |
pastry.lookupFinishOnFirstUnchanged | bool | finish lookup, if the last pending RPC returned without progress |
pastry.lookupFailedNodeRpcs | bool | communicate failed nodes |
pastry.enableNewLeafs | bool | enable Pastry API call newLeafs() |
pastry.useCommonAPIforward | bool | enable forwarding of routeMessages to app before routing them |
pastry.routeMsgAcks | bool | use RPCs for route messages |
pastry.optimizeLookup | bool | whether to search the closest node in findCloserNode() calls |
pastry.optimisticForward | bool | forward message immediately in recursive mode, otherwise ping first |
pastry.avoidDuplicates | bool | when node seems unreachable but msg already sent, do not retry |
pastry.partialJoinPath | bool | allow join even with missing state message along the routing path |
pastry.bitsPerDigit | numeric | bits per Pastry digit |
pastry.numberOfLeaves | numeric | number of entries in leaf set |
pastry.numberOfNeighbors | numeric | number of entries in neighborhoot set |
pastry.joinTimeout | numeric | seconds to wait for STATE message from closest node |
pastry.readyWait | numeric | seconds to wait for missing state messages in JOIN phase |
pastry.secondStageWait | numeric | how long to wait before starting second stage of init phase |
pastry.repairTimeout | numeric | how long to wait for repair messages |
pastry.ringCheckInterval | numeric | check direct neighbors on the ring every x seconds (0 to disable) |
pastry.sendStateWaitAmount | numeric | how long to wait when sending state tables delayed (should be very small) |
pastry.pingTimeout | numeric | how long to wait for PING reply |
pastry.pingRetries | numeric | how often to retry PING after timeout |
pastry.useRegularNextHop | bool | |
pastry.alwaysSendUpdate | bool | |
pastry.coordBasedRouting | bool | use coord-based routing |
pastry.numCoordDigits | numeric | numbner of digits used for coord-based routing |
pastry.CBRstartAtDigit | numeric | start at this digit using CBR |
pastry.CBRstopAtDigit | numeric | stop at this digit using CBR |
pastry.useSecondStage | bool | enable second stage of join as described in the original pastry paper |
pastry.useDiscovery | bool | join at nearest node, otherwise use bootstrapnode |
pastry.sendStateAtLeafsetRepair | bool | use state messages for leafset repair, otherwise use leafset messages |
pastry.periodicMaintenance | bool | enable periodic routing table maintenance |
pastry.discoveryTimeoutAmount | numeric | how long to wait for leafset pings in discovery stage |
pastry.repairTaskTimeoutAmount | numeric | interval for periodic routing table maintenance |
pastry.overrideOldPastry | bool | pastry configuration according to the original paper |
pastry.overrideNewPastry | bool | optimized pastry configuration |
module PastryModules gates: in: from_udp; // gate from the UDP layer out: to_udp; // gate to the UDP layer in: from_app; // gate from the application out: to_app; // gate to the application submodules: pastry: Pastry; display: "p=60,52;i=block/circle"; pastryRoutingTable: PastryRoutingTable; display: "p=140,68;i=block/table"; pastryLeafSet: PastryLeafSet; display: "p=220,52;i=block/table"; pastryNeighborhoodSet: PastryNeighborhoodSet; display: "p=300,68;i=block/table"; connections nocheck: from_udp --> pastry.from_udp++; to_udp <-- pastry.to_udp++; from_app --> pastry.from_app; to_app <-- pastry.to_app; endmodule