This is the first beta release of FreePastry.
FreePastry is a modular, open source implementation of the
Pastry
p2p routing and location substrate.
We will release more efficient wire protocols based on sockets later. Future wire protocols will also be based on an open standard to ensure interoperability among different implementations.
(Background: To start a Pastry node, the IP address (and port number, unless the default port is used) of a "bootstrap" or "contact" node must be provided. If no such node is provided, and no other Pastry node runs on the local machine, then FreePastry creates a new overlay network with itself as the only node. Any node that is already part of the Pastry node can serve as the bootstrap node.)
Future releases will address efficiency, security, interoperability and
will provide application components like Scribe, Past, replica management,
caching, etc.
To compile the source distribution, you will need to have GNU make installed (available from ftp://ftp.gnu.org/pub/gnu/make ) on your system. Expand the archive (FreePastry-0.1-beta.tgz or FreePastry-0.1-beta.zip) into a directory. Set the environment variables mentioned in setpath.csh to values appropriate for your system. Execute "make" in the top level directory (you may have to run "make" twice the first time), then change to the "classes" directory to run FreePastry.
You may have to provide a Java security policy file with sufficient permissions to allow FreePastry to contact other nodes. The simplest way to do this is to install a ".java.policy" file with the following content into your home directory:
grant {
permission java.security.AllPermission;
};
Usage: java [-cp pastry.jar] rice.pastry.testing.RMIHelloWorldSome interesting configurations:
[-port p] [-nodes n] [-bootstrap bshost[:bsport]]
[-verbose|-silent|-verbosity v] [-help]
Ports p and bsport refer to RMI registry port numbers (default = 5009).
Without -bootstrap bshost[:bsport], only localhost:p is used for bootstrap.
Default verbosity is 5, -verbose is 10, and -silent is -1 (error msgs only).
(replace "pastry.jar" by "FreePastry-<version>.jar", of course)
a. java rice.pastry.testing.RMIHelloWorld Starts a standalone Pastry network, and sends two messages essentially to itself. Waits for anyone to connect to it, so terminate with ^C. b. ..RMIHelloWorld -nodes 2 One node starts a Pastry network, and sends two messages to random destination addresses. At some point another node joins in, synchronizes their leaf sets and route sets, and sends two messages to random destinations. These may be delivered to either node with equal probability. Note how the sender node gets an "enroute" upcall from Pastry before forwarding the message. c. ..RMIHelloWorld -nodes 2 -verbose Also prints some interesting RMI-level messages. d. pokey$ ..RMIHelloWorld gamma$ ..RMIHelloWorld -bootstrap pokey Two machines coordinate to form a Pastry network. e. pokey$ ..RMIHelloWorld gamma$ ..RMIHelloWorld -bootstrap pokey wait a few seconds, and interrupt with <ctrl-C> gamma$ ..RMIHelloWorld -bootstrap pokey The second client restarts with a new NodeID, and joins the Pastry network. One of them sends messages to the now-dead node, finds it down, and may or may not remove it
from the leaf sets. (repeat a few times to observe both
possibilities, i.e., leaf sets of size 3 or 5). If the
latter, then leaf set maintenance kicks in within a minute
on one of the nodes, and removes the stale entries.
f. pokey$ ..RMIHelloWorld
gamma$ ..RMIHelloWorld -bootstrap pokey -nodes 2
The client on gamma instantiates two virtual nodes, which
are independent in identity and functionality. Try starting
say 10 or 30 virtual nodes, killing with a <ctrl-C>,
starting another bunch, etc.
2. To run the same HelloWorld application on an emulated network:
Usage: java [-cp pastry.jar] rice.pastry.testing.HelloWorldSome interesting configurations:
[-msgs m] [-nodes n] [-verbose|-silent|-verbosity v]
[-simultaneous_joins] [-simultaneous_msgs] [-help]
a. java rice.pastry.testing.HelloWorld Creates three nodes, and sends total three messages from randomly chosen nodes to random destinations addresses (which are delivered to the node with the numerically closest address). b. ..HelloWorld -simultaneous_joins -simultaneous_msgs Join all three nodes at once, then issue three messages, then go about delivering them.
3. To run a regression test that constructs 500 nodes connected by an emulated network:
java [-cp pastry.jar] rice.pastry.testing.DirectPastryRegrTest
4. To run a simple performance test based on an emulated network with successively larger numbers of nodes:
java [-cp pastry.jar] rice.pastry.testing.DirectPastryPingTest