Summary for Q&A Q: What does the command line "program configuration_file line input_file" mean? A: Your application is supposed to accept three arguments. The first one indicates the configuration file the application should load. The second argument specify explicitly which line in the configuration file it should read from. The third argument is an input file which specifies how the experiment takes place step by step. Your application is supposed to "understand" the configuration and input files such that it can follow the instructions. Q: Does it mean I have to run it many times in order to start multiple applications? Can I execute the command line manually? A: Yes, each command line is supposed to start one client, but with different "line" argument of course. There is no restrictions on how you start them. However, it is not a feasible method if there are more and more clients in an experiment. It is highly recommended that you have some scripts that can help you control the whole experiment. Q: Do I need to deal with packet loss, long RTT and other unexpected event? A: No, you can assume everything works perfectly. We recommend you test your application in the single node case in the first place before you are ready for real life complexities. Q: How about if my application is deadlocked? A: Let's assume you have a reliable platform without weird behaviors, then there are two reasons that can make your application deadlock. First, you didn't parse the configuration and input files correctly. In this case, you have to fix your code. Second, there might be packet loss, then you can restart your experiment if your application cannot handle these kinds of event. The problem should vanish with high probability. Q: How many clients should we use in an experiment? A: There is no limit on the number of clients in an experiment. However, you can assume it is always less than 100. There is an script that can generate the input files for you automatically on the course web page. Play with it to test your application. Q: Can you provide the correct output so that I can know whether the clients work correctly or not? A: We can but we won't at the moment. Since this is exactly the job you are supposed to do - build your application, test the validity of your algorithm. We recommend starting your experiment from small scale, so that you can verify the result even by pencil and paper. Q: Can I just calculate the correct results by simulating the experiment within one application? A: No. You are supposed to implement a 'baby' distributed system, not a simulator. The results should come from the actual message passing among the clients within a system. Then you can start fostering your feeling about how the distributed systems cope with real-life complexities, which is the purpose of the course. Q: How is it possible to do multicast if there is only client in the network? A: Why not, you can be your own audience :) (PS: Don't use native multicast.) Q: In causal multicast input file, what does "1|2|3" mean? A: It means the concurrent events. client1, client2 and client3 are multicasting at the same time. So, 1|2|3 and 2|3|1 and 3|2|1 all have the same semantics. If you still have troubles in understanding the concurrency and this notation. It might be a good idea to refresh some definitions in the course book - <> by Andrew S. Tanebaum. Q: If I still have problems, then what I should do? A: We have extra Q&A meetings where you can get help. What's more, you can also use old-fashioned method by dropping us an email. We promise to answer it asap. Remark: 1. process/client/server/application are used interchangeably in this document, they are referring the same thing in this context. 2. node/computer are used interchangeably, they are referring to a physical machine, which could be different things from 1.