You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@bookkeeper.apache.org by "jiraposter@reviews.apache.org (Commented) (JIRA)" <ji...@apache.org> on 2011/11/04 18:43:51 UTC

[jira] [Commented] (BOOKKEEPER-101) Add Fencing to Bookkeeper

    [ https://issues.apache.org/jira/browse/BOOKKEEPER-101?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13144201#comment-13144201 ] 

jiraposter@reviews.apache.org commented on BOOKKEEPER-101:
----------------------------------------------------------


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/2594/
-----------------------------------------------------------

(Updated 2011-11-04 17:40:53.862350)


Review request for bookkeeper.


Summary
-------

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.


This addresses bug BOOKKEEPER-101.
    https://issues.apache.org/jira/browse/BOOKKEEPER-101


Diffs (updated)
-----

  bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java d651894 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieException.java 292617e 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LedgerDescriptor.java 024cac3 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BKException.java d7c8f67 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeper.java a1fbab7 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java b3eb5b9 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerCreateOp.java 6f72e47 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerHandle.java 8c2a54f 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerMetadata.java 328c7ca 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerOpenOp.java a68856c 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerRecoveryOp.java 7465c52 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingAddOp.java eddd760 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingReadOp.java 385b16c 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadLastConfirmedOp.java c2d4cee 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieClient.java d70ae27 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieProtocol.java 873dafe 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java f1b3ad9 
  bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java 2cd4de8 
  bookkeeper-server/src/test/java/org/apache/bookkeeper/client/LedgerCacheTest.java 07639aa 
  bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestFencing.java PRE-CREATION 
  bookkeeper-server/src/test/java/org/apache/bookkeeper/proto/TestProtoVersions.java f6cd8c9 
  bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BaseTestCase.java 6bac569 
  bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieClientTest.java 97dc2ab 
  bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieRecoveryTest.java ac54d9a 
  bookkeeper-server/src/test/java/org/apache/bookkeeper/test/ConcurrentLedgerTest.java ebb17d2 
  bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LoopbackClient.java 85822bf 
  hedwig-server/src/main/java/org/apache/hedwig/server/benchmark/BookieBenchmark.java 18319d7 

Diff: https://reviews.apache.org/r/2594/diff


Testing
-------


Thanks,

Ivan


                
> 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