Code Review 2

This round of code reviews will proceed much like the reviews for Project 1, except that we will only review half of the projects in class (we will conduct in-class reviews for the other teams for Project 3). For each review, the project developers will present a portion of their design in class and other students will comment on the design and offer suggestions for improvement. Each presenting team will also receive written code reviews from other students in the class. All teams will receive a written code review from me, and I will meet individually with each team to go over my review.

Presenters

To start off each code review, the presenting team will spend 10-15 minutes to address the following issues:

You should prepare slides for your presentation. Remember the overall goal is abstraction: finding a simple way to think about something that is internally complicated. Try to find a simple way to explain your design, so that even people who have not read the code can easily get the basic idea; think about what are the most important elements of your design. Of course, if there are tricky elements, you will also need to mention those as well (don't pretend something is simple when it really isn't).

Reviewers

Each project will be reviewed by four students from other projects, according to the table below. Reviewers must read over the relevant code before the given class and prepare a written code review on GitHub. To do this, go to the project in GitHub, click on the "Pull requests" tab, click on the "Project2" pull request, and click on the "Files changed" tab. Click on a line on the right side to enter comments for that line, then select "Start a review". You can download the project code from GitHub if you'd like to use your favorite IDE to read through it (all of the projects will be readable to everyone in the class). You don't need to read the entire project (though you are welcome to if you wish); you only need to read the parts related to the area being reviewed. Enter comments on GitHub, but do not submit your review yet. The comments will be saved and you will be able to see them, but no one else will see them until you submit the review. After we have discussed the relevant code in class, then you should submit your review. The "right" number of comments to enter is probably in the range of 10-20, depending on the complexity of the code you are reviewing and the number of useful issues you can identify (but don't invent issues if you can't find 10 meaningful things to comment on).

As you did in the Project 1 reviews, look for red flags in the code you review, and also consider the following overall questions:

Review Presentations

Two of the reviewers for each project will present their code reviews in class, after the team has introduced its design. You will have 5 minutes for your presentation. This will not be enough time for you to discuss your review in detail, so pick out the most interesting and important issues. Use slides to structure your presentation and display examples. Start by saying what you liked best about the design, and what you think is the biggest opportunity for improvement. Then describe a few of the most important red flags that you found; be specific, and show examples. If you identified solutions to problems, pick the one that is most interesting and tell us about it.

Schedule

DatePresentersReview&PresentReview
Wed., 2/28Troccoli/RachleffKaplan-Nelson, MostowyGo, Kincaid
Dauterman/BohnMai, BhattasaliLiu, Xing
Xu/XingVazquez-Guzman, PooreHaas, Dauterman
Fri., 3/2Liu/GoJin, DumovicTroccoli, Bohn
Kincaid/HaasZeng, NegiRachleff, Xu

Reviewers will present in the order listed above. Everyone should bring their laptop to class for the code reviews, both for your use in presenting and also so that you can browse the code online while we are discussing it.

Review Topics

Here are the particular topic(s) to review for each project:

Troccoli/Rachleff (repo3)

Review the new general-purpose RPC communication mechanism, including RPCNetworkManager, ObjectNIOCommunication, and related classes, and compare the new mechanism in Project 2 with the previous approach in Project 1. How does communication with clients compare to communication between servers?

Dauterman/Bohn (repo4)

Review the mechanisms for storing log entries persistently, and how this mechanism is used by the Raft request-handling logic. Will the log mechanism provide adequate performance?

Xu/Xing (repo8)

Review the mechanisms for storing log entries persistently, and how this mechanism is used by the Raft request-handling logic. Will the log mechanism provide adequate performance?

Liu/Go (repo2)

Review the mechanisms for storing log entries persistently and for applying them by executing them as shell commands. How do the entries get applied, and how do results find their way back to clients?

Kincaid/Haas (repo7)

Review the mechanisms for communication between client and server, including the revised RPC mechanism. When a request arrives at the server, review the mechanism for applying it (executing the shell command) and returning the result to the client. You do not need to review the mechanisms for leader election or log replication.