Compound Module OverlayPastry

File: Overlay/Pastry/OverlayPastry.ned

Pastry

Author: Felix Palmen

pastry: Pastry pastryRoutingTable: PastryRoutingTable pastryLeafSet: PastryLeafSet pastryNeighborhoodSet: PastryNeighborhoodSet

Usage diagram:

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.

Contains the following modules:

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.

PastryNeighborhoodSet

This module contains the neighborhood set of the Pastry implementation.

PastryRoutingTable

This module contains the routing table of the Pastry implementation.

Parameters:

Name Type Description
keyLength numeric

length of Overlay Key

localPort numeric
debugOutput bool

enable debug output

joinOnApplicationRequest bool

only join the overlay on application request

lookupRedundantNodes numeric
lookupParallelPaths numeric
lookupParallelRpcs numeric
lookupSecure bool
lookupMerge bool
lookupFailedNodeRpcs bool
measureNetwInitPhase bool

gather statistics when bootstrapping

hopCountMax numeric

maximum number of overlay hops

drawOverlayTopology bool

draw arrow to successor node?

Gates:

Name Direction Description
from_udp input
to_udp output
from_app input
to_app output

Unassigned submodule parameters:

Name Type Description
pastry.useBaseLookup bool

use BaseLookup class

pastry.iterativeLookup bool

do iterative instead of recursive lookups

pastry.enableNewLeafs bool

enable Pastry API call newLeafs()

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.pingCacheExpireTime numeric

maximum number of seconds rtt for a node is cached

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

Source code:

module OverlayPastry

    parameters:
	keyLength: numeric,		// length of Overlay Key
	localPort: numeric,
	debugOutput: bool,		// enable debug output
	joinOnApplicationRequest : bool, // only join the overlay on application request

	lookupRedundantNodes : numeric,
	lookupParallelPaths : numeric,
	lookupParallelRpcs : numeric,
	lookupSecure : bool,
	lookupMerge : bool,
	lookupFailedNodeRpcs : bool,

	measureNetwInitPhase: bool,	// gather statistics when bootstrapping
	hopCountMax: numeric,		// maximum number of overlay hops
	drawOverlayTopology: bool;	// draw arrow to successor node?

    gates:
        in: from_udp;
        out: to_udp;
	in: from_app;
	out: to_app;

    submodules:
        pastry: Pastry;
	    parameters:
		keyLength = keyLength,
		localPort = localPort,
		debugOutput = debugOutput,
		joinOnApplicationRequest = joinOnApplicationRequest,
		lookupRedundantNodes = lookupRedundantNodes,
		lookupParallelPaths = lookupParallelPaths,
		lookupParallelRpcs = lookupParallelRpcs,
		lookupSecure = lookupSecure,
		lookupMerge = lookupMerge,
		lookupFailedNodeRpcs = lookupFailedNodeRpcs,
		measureNetwInitPhase = measureNetwInitPhase,
		hopCountMax = hopCountMax,
		drawOverlayTopology = drawOverlayTopology;
            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:
	from_udp --> pastry.from_udp++;
	to_udp <-- pastry.to_udp++;
	from_app --> pastry.from_app;
	to_app <-- pastry.to_app;

endmodule