CSCI.6500 Distributed Computing over the Internet

Spring, 2006

Programming Assignment 1.

This assignment is to be done either individually or in pairs. Do not show your code to any other group and do not look at any other group's code. Do not put your code in a public directory or otherwise make it public. While you may get help directly from the instructor, you are encouraged to use the WebCT Discussions page to post problems so that other students can also answer and see the answers.


Objective:

The goal of this assignment is to build a Decentralized File Service using Python.

Description:

The Decentralized File Service (DFS) is a peer-to-peer network of nodes, which can be connected to by different clients. Each node in the system is capable of storing file fragments, splitting files into fragments, distributing the fragments among a set of neighbors, and responding to any download request by sending the appropriate file fragments. The DFS has three main stages:

  1. Setup
  2. Uploading
  3. Downloading
 For this assignment, assume that the system has unique file names. Assume also that at all nodes, the file fragments are stored in main memory.

Your DFS system should handle at least the following errors:

Extensions:

 Completion of one of these extensions will result in a better grade; however, groups of more than one person MUST complete one extension to receive a full grade. It should also be noted that, if you have an idea for a different extension, ask the instructor for approval.

 Enhance the DFS system to support the one of the following functionalities:

     
  1. Dynamic load balancing
  2. Replication of fragments
  3. Evaluate the impact of a few peer topologies in file accesibility and retrieval times
Grading:

Grading will be split in the following way:

Submission:

The due date for this project is March 5th, 2006, 11:55pm EST. You should use the assignments drop-off box located at the course's WebCT page. Upload a ZIP file containing all the relevant documented Python files, along with a README file describing the project and its usage.

Late submissions: