You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by GitBox <gi...@apache.org> on 2023/01/03 14:54:17 UTC

[GitHub] [bookkeeper] horizonzy commented on issue #3722: RackAware placement policy can not ensure new ensemble selection succeed when one rack goes down.

horizonzy commented on issue #3722:
URL: https://github.com/apache/bookkeeper/issues/3722#issuecomment-1369859251

   In `selectFromNetworkLocation,` it will randomly pick one bookieNode, exclude the picked bookieNode network location, and continue to pick the next bookieNode randomly. If there are no more bookieNode, throw a BKNotEnoughBookiesException.
   
   ## Example:
   There are three bookie nodes. (bk1,bk2,bk3)
   ### The network location:
   ```
   r1 -> bk1, bk2
   r2 -> bk3
   ```
   enable `EnforceMinNumRacksPerWriteQuorum` and set `minNumRacksPerWriteQuorumConfValue=2`
   
   ### Case1: 
   pick bk1 -> exclude bk1 network location `r1` -> pick bk3 -> exclude bk3 network location `r2` -> pick bk2.
   The ensemble: [bk1, bk3, bk1]
   
   ### Case2:
   pick bk3 -> exclude bk3 network location `r2` -> pick bk1/bk2 -> exclude bk1/bk2 network location `r1` -> the left bookie node is bk2/bk1, it's network location is `r1` -> no more available bookies -> throw an exception.
   
   ### Solution
   We still use the original method to pick bookie nodes; it's random, and the random help to load balance.
   
   When it meets the case2, we will make the bookie nodes list in order by network location, then pick the node.
   The ordering rule: the higher the frequency of the network location, it will on the list head.
   
   Example:
   ```
   r1 -> bk1, bk2
   r2 -> bk3
   ```
   The network location `r1` has two bookie nodes. We will make it at the list head. The network location `r2` is at the list tail.
   When we pick nodes, the bookie nodes list is [bk1, bk2, bk3], it always picks bk1 first, then pick bk3, and picks bk2 finally.
   
   
    


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@bookkeeper.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org