[ https://issues.apache.org/jira/browse/BOOKKEEPER-101?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13146351#comment-13146351 ]
jirapos...@reviews.apache.org commented on BOOKKEEPER-101: ---------------------------------------------------------- bq. On 2011-11-08 15:08:05, fpj wrote: bq. > Great job, Ivan! I just have one question and one comment. The comment is about documentation. Shouldn't we add some documentation for this feature? bq. > bq. > I also ran the tests, and they pass fine for me. We should add some doc on the website for sure. I'd prefer to get this into the codebase first though, and create another JIRA for documenting it, as otherwise this could rot. bq. On 2011-11-08 15:08:05, fpj wrote: bq. > bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerHandle.java, line 655 bq. > <https://reviews.apache.org/r/2594/diff/2/?file=56357#file56357line655> bq. > bq. > What's the goal of setting "in recovery" in zookeeper? Is it to prevent the writer from closing the ledger? I also wonder if we can miss complete writes in the closed ledger if we writer to zookeeper before fencing bookies off. We have to mark the ledger as "in recovery" so that the writing client can't change the ensemble under our feet. We wont miss complete writes, because the recovery process will still run copy any entry's greater than lastAddConfirmed to a quorum of ledgers. - Ivan ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/2594/#review3103 ----------------------------------------------------------- On 2011-11-04 17:40:53, Ivan Kelly wrote: bq. bq. ----------------------------------------------------------- bq. This is an automatically generated e-mail. To reply, visit: bq. https://reviews.apache.org/r/2594/ bq. ----------------------------------------------------------- bq. bq. (Updated 2011-11-04 17:40:53) bq. bq. bq. Review request for bookkeeper. bq. bq. bq. Summary bq. ------- bq. bq. BookKeeper is designed for use as a Write ahead log. In systems with a primary/backup architecture, the primary will write state updates to the WAL. If the primary dies the backup comes online, reads the WAL to get the latest state and starts serving requests. However, if the primary was only partitioned from the network, or stuck in a long GC, a split brain occurs. Both primary and backup can service client requests. bq. bq. Fencing(http://en.wikipedia.org/wiki/Fencing_%28computing%29) ensures that this cannot happen. With fencing, the backup can close the WAL of the primary, and cause any subsequent attempt by the primary to write to the WAL to give an error. bq. bq. bq. This addresses bug BOOKKEEPER-101. bq. https://issues.apache.org/jira/browse/BOOKKEEPER-101 bq. bq. bq. Diffs bq. ----- bq. bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java d651894 bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieException.java 292617e bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LedgerDescriptor.java 024cac3 bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BKException.java d7c8f67 bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeper.java a1fbab7 bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java b3eb5b9 bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerCreateOp.java 6f72e47 bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerHandle.java 8c2a54f bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerMetadata.java 328c7ca bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerOpenOp.java a68856c bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerRecoveryOp.java 7465c52 bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingAddOp.java eddd760 bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingReadOp.java 385b16c bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadLastConfirmedOp.java c2d4cee bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieClient.java d70ae27 bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieProtocol.java 873dafe bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java f1b3ad9 bq. bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java 2cd4de8 bq. bookkeeper-server/src/test/java/org/apache/bookkeeper/client/LedgerCacheTest.java 07639aa bq. bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestFencing.java PRE-CREATION bq. bookkeeper-server/src/test/java/org/apache/bookkeeper/proto/TestProtoVersions.java f6cd8c9 bq. bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BaseTestCase.java 6bac569 bq. bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieClientTest.java 97dc2ab bq. bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieRecoveryTest.java ac54d9a bq. bookkeeper-server/src/test/java/org/apache/bookkeeper/test/ConcurrentLedgerTest.java ebb17d2 bq. bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LoopbackClient.java 85822bf bq. hedwig-server/src/main/java/org/apache/hedwig/server/benchmark/BookieBenchmark.java 18319d7 bq. bq. Diff: https://reviews.apache.org/r/2594/diff bq. bq. bq. Testing bq. ------- bq. bq. bq. Thanks, bq. bq. Ivan bq. bq. > Add Fencing to Bookkeeper > ------------------------- > > Key: BOOKKEEPER-101 > URL: https://issues.apache.org/jira/browse/BOOKKEEPER-101 > Project: Bookkeeper > Issue Type: New Feature > Reporter: Ivan Kelly > Assignee: Ivan Kelly > Fix For: 4.0.0 > > Attachments: BOOKKEEPER-101.diff, BOOKKEEPER-101.diff > > > BookKeeper is designed for use as a Write ahead log. In systems with a > primary/backup architecture, the primary will write state updates to the WAL. > If the primary dies the backup comes online, reads the WAL to get the latest > state and starts serving requests. However, if the primary was only > partitioned from the network, or stuck in a long GC, a split brain occurs. > Both primary and backup can service client requests. > Fencing(http://en.wikipedia.org/wiki/Fencing_%28computing%29) ensures that > this cannot happen. With fencing, the backup can close the WAL of the > primary, and cause any subsequent attempt by the primary to write to the WAL > to give an error. > We fence a ledger whenever it is opened by another client using > BookKeeper#openLedger. BookKeeper#openLedgerNoRecovery will not fence. > The opening client marks the ledger as fenced in zookeeper, and then sends a > readEntry message to a all of bookies with the DO_FENCING flag set. Once at > least 1 bookie in each possible quorum of bookies have responded, we can > proceed with opening the ledger. Any subsequent attempt to write to the > ledger will fail as it will not be able to write to a quorum without one of > the bookie in the quorum responding with a ledger fenced error. The client > will also be unable to change the quorum without seeing that the ledger has > been marked as fenced in zookeeper. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira