On Jun 6, 2008, at 17:42 , Benjamin Reed wrote: > No. Internally we use an atomic broadcast protocol (which is what > Paxos would provide us) to keep the replicas in sync, but the > protocol is much simpler than Paxos.
After reading QuorumPeer, I think it is safe to say that Zookeeper implements Paxos. The mapping between your code and Lamport's terminology: Zookeeper -> Lamport (Paxos) Notification (FastLeaderElection.java) -> Prepare request NEWLEADER (Leader.java) -> Accept message (zxid, leader id) -> "proposal number" It seems more or less equivalent to me, and there are no obvious problems with it that I can find. Unrelated observations from browsing the source: 1. syncLimit has slightly different comments in the class header, and inline with the variable. 2. ResponderThread: It reads "state" from the enclosing class. This variable is not volatile. My weak understanding of the Java memory model is that without doing a "synchronizing operation," the JVM would be free to optimize away the access of this "state" variable. That is, the ResponderThread could get "stuck" in an old state. I could be wrong because this stuff is ridiculously hard. See the FAQ: http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#volatile The accesses to the currentVote volatile variable probably gives you the memory barrier guarantees you need, except when LEADING. In that case, the ResponderThread never touches another volatile, so in theory the JVM could read state once and by happy with it forever after. Will it ever actually do that? I would be surprised. However, I think you would be safer making state volatile, so ResponderThread would *definitely* see a change immediately. FastLeaderElection.java line 224: The part of the condition after && is not needed: This is the else branch of an if statement, where the condition is exactly the first part. Hence, the part after && *must* be true. FastLeaderElection.java: I think it also has accesses of a set of variables between threads with no synchronization or volatiles, such as logicalclock. Evan -- Evan Jones http://evanjones.ca/ ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ Zookeeper-user mailing list Zookeeperemail@example.com https://lists.sourceforge.net/lists/listinfo/zookeeper-user