CSCI.4220/CSCI.6964 Network Programming

Fall, 2002

Programming Assignment 7.

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. However, you may get all the help you need from the TAs or the instructor. You are encouraged to use the WebCT Discussions page to post problems so that other students can also see the answers.


The goal of this assignment is to build a Distributed File Service using SALSA (the Simple Actor Language, System and Architecture).


The Distributed 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 states:

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

Your DFS system should be error resilient Among others it should handle the following errors:

SALSA Documentation and download


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

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

  1. Dynamic Load Balancing
  2. Fragment caching
  3. Replication of fragments:
  4. Name collision handling:
  5. Separation between searching for a file and downloading a file.

Grading will be split in the following way:


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

Late submissions: