Evergrow Logo CoreGRID Logo
   
IST-2001-33234

PEPITO

 

P2PKit: A Services Based Architecture for Deploying Robust Peer-to-Peer Applications



We hope to make a new stable release of P2PKit soon. For the impatient, there is a release-candidate version available from our student space. As always you can mail me for more information.

August, 2006


P2PKit provides a set of abstractions for programming on top of the Mozart/Oz P2PS library. P2PKit was initially developed within the PEPITO[1] project. Development is continuing with funding from Evergrow and support from CoreGRID.

This page provides up to date information on P2PKit, and will soon sketch my ideas for its future evolution.

Documentation

Documentation is scattered in the following places:

The P2PKit Report This is based on PEPITO deliverable 3.7. It provides a good introduction to P2PKit, describes its architecture, and gives some nice examples. However, it describes an ancient (horrible) API.
api.txt This is an ascii file containing the current (nicer) API. I am looking for a more suitable format for this information. Hopefully, it can be made easier to maintain by me, and easier to use by P2PKit developers.
A presentation A nice presentation of P2PKit that I gave to the 3rd Pepito Project Workshop. It uses the current API (though a little simplified in places, mainly error handling)
Poster Presentation P2PKit in 6 slides. For a quick overview of our research project

As always, feel free to mail me any questions or comments.

Let's Get Started

To run a P2PKit network of peers you must install the ozmake package keving-p2p-P2PKitPeer-1.07.pkg and this version of P2PS (the one in Mogul is currently out of date).

I have code for a sample P2PKit network: download and compile Node.oz, then install keving-net-twikistore-1.01.pkg and keving-lib-util-1.1.pkg. Run an instance of ozengine Node.ozf -m --network blabla, where blabla is a unique name for your network. Then you can start as many other nodes as you like by ozengine Node.ozf --network blabla, (i.e., without the -m argument). All the nodes started with the same network name will find each other. You can also start tracing by adding the -v <tracelevel> argument to your calls. Currently -v10 will get all possible tracing. Nodes can be started on different computers.

@s-ensor:test 4Q> ozengine Node.ozf -h
Usage: Node.ozf [option]
Options:
	-m, --master				Create New Network (default: false)
	-p <n>, --peers <n>			Start <n> virtual peers (default: 1)
	--ozstore 				Use the OzStore Persistent Dictionary
	--ozstoreticket <ticketfile>		ozstore ticket file (default: http://www.info.ucl.ac.be/~glynn/OzStoreTicket)
	-n <network>, --network <network>	Create/join <network>
	-v <level>, --verbose <level>		Verbosity level
	-h, --help				This help

I have some sample code for P2PKit clients: opi_p2p.oz connects as a client to an existing P2PS network and installs / runs a number of services; ControlGUI.oz is a control center GUI for a P2PS network written using P2PKit.

To run these clients you must install keving-p2p-P2PKitClient-1.04.pkg and keving-net-twikistore-1.01.pkg (if you didn't already).

Once you have started a network of P2PKit nodes you can run ControlGUI.oz (ozengine ControlGUI.ozf --network <blabla>) to view the network.

A number of services have been built using P2PKit. For the Pepito project we have built a service which provides a Distributed Shared Memory offering Causal Consistency. For the code and an explanation follow this link.

Kevin Glynn (kevin.glynn@gmail.com)

Truncated Changelog

[1] PEPITO is a project funded by the EU IST FET proactive initiative on Global Computing

Attachment:
keving-net-twikistore-1.01.pkg
keving-lib-util-1.1.pkg
cetic_ucl-p2ps-1.01.pkg
keving-p2p-P2PKitClient-1.04.pkg
keving-p2p-P2PKitPeer-1.07.pkg