I am looking at the code in CommitProcessor and I had a couple of questions.
1. When a request is ready to be processed, it goes into the toProcess list. Then subsequently, it is taken out of that list and we call nextProcessor.processRequest(toProcess.get(i)). Why does this intermediate toProcess list exist? Why couldn't we call nextProcessor.processRequest(toProcess.get(i)) directly wherever toProcess.add(r) is called? I gave it some thought and couldn't figure out a correctness issue either way.
2. There are a couple of data structures that are accessed by multiple threads but are not synchronized - they are LinkedList<Request> queuedWriteRequests, committedRequests. That looks like a bug. (or pls let me know if I am missing something).