B629: Languages for Programming the Web
Project 4: A distributed filesystem synchronizer using RMI


The first project involved making extensions to a simple (non-distributed) file synchronizer. This project goes further, asking you to analyze and improve the behavior of a distributed realization of a more refined synchronization algorithm.

Our Synchronizer

Sundar and I have put together a fairly straightforward realization of a distributed file synchronizer, closely following the draft specification discussed in class.

The files are available here. As soon as you've copied them into your own filespace, please change the MYPORT field in the Makefile to some random number between 1000 and 8000, to avoid possible clashes with others running RMI servers on the same machine.

By default, the Snc program will attempt to start its own RMI registry and FileSystem server processes on the remote machine (using rsh). You can also run these processes explicitly and tell Snc which port to look on for the registry.


  1. Empirical analysis of the performance of the Java RMI implementation.

  2. Tuning.

  3. Extensions. Choose one of the following (or, for extra credit, more than one):
    1. Discuss ways in which the algorithm itself might be improved (e.g. by caching additional information between runs of the synchronizer, choosing a completely different specification of the synchronization task, etc.) to achieve better performance in realistic situations. Make sure to identify your assumptions (small, large, or huge sets of files being synchronized; high- or low-bandwidth network connections; frequent or rare synchronizations; etc.) Implement an improved algorithm and measure its performance.

    2. Discuss the security issues in the present realization of the synchronizer. Propose and implement a more secure synchronizer. Measure its performance.

    3. (If you want to propose another kind of extension, make me an offer... there are many possibilities.)


A finished project consists of the following files:
  1. A file README (or, if you prefer, README.html) describing the design and execution of your changes. Since there is some more serious design work to be done in this exercise, I'll expect a deeper discussion than in previous projects.
  2. Java source files. (I will look at these, but the grading will be based on the writeup in the README file, so make sure you describe all your work coherently there.)
  3. A file TIMINGS containing the results of executing make time (which calls the testharness script provided in the handout directory) using your solution to part 2. (I'll re-run the timings on my own machine for consistency; this file is just for comparison.)
  4. If your solution to part 3 of the assignment is different from your solution to part 2 (e.g., because it performs badly on the particular dataset used by the test harness), put the part-3 sources in a separate subdirectory.

Submission Procedure

Same as usual.

Due date

The project is due at the beginning of class on Monday, October 27th.

B629: Languages for Programming the Web
Benjamin Pierce (pierce@cs.indiana.edu)