horizonzy opened a new issue, #3722:
URL: https://github.com/apache/bookkeeper/issues/3722

   BUG REPORT
   
   Describe the bug
   
   r1 -> bk1, bk2
   r2 -> bk3
   r3 -> bk4
   enable EnforceMinNumRacksPerWriteQuorum and set 
minNumRacksPerWriteQuorumConfValue=2
   
   When bk3 or bk4 is quarantined, the new ensemble selection should succeed, 
because it fulfills min rack is 2.
   However, the new ensemble selection result some times will fail.
   
   Run the following unit test in TestRackawareEnsemblePlacementPolicy.java can 
reproduce the bug.
   
   final int minNumRacksPerWriteQuorumConfValue = 2;
   conf.setMinNumRacksPerWriteQuorum(minNumRacksPerWriteQuorumConfValue);
   conf.setEnforceMinNumRacksPerWriteQuorum(true);
   
   @Test
       public void testNewEnsemblePolicyWithMultipleRacksV2() throws Exception {
           BookieSocketAddress addr1 = new BookieSocketAddress("127.0.0.1", 
3181);
           BookieSocketAddress addr2 = new BookieSocketAddress("127.0.0.2", 
3181);
           BookieSocketAddress addr3 = new BookieSocketAddress("127.0.0.3", 
3181);
           BookieSocketAddress addr4 = new BookieSocketAddress("127.0.0.4", 
3181);
   
           // update dns mapping
           StaticDNSResolver.addNodeToRack(addr1.getHostName(), 
"/default-region/r1");
           StaticDNSResolver.addNodeToRack(addr2.getHostName(), 
"/default-region/r1");
           StaticDNSResolver.addNodeToRack(addr3.getHostName(), 
"/default-region/r2");
           StaticDNSResolver.addNodeToRack(addr4.getHostName(), 
"/default-region/r3");
           // Update cluster
           Set<BookieId> addrs = new HashSet<BookieId>();
           addrs.add(addr1.toBookieId());
           addrs.add(addr2.toBookieId());
           addrs.add(addr3.toBookieId());
           addrs.add(addr4.toBookieId());
           repp.onClusterChanged(addrs, new HashSet<BookieId>());
   
           try {
               int ensembleSize = 3;
               int writeQuorumSize = 3;
               int ackQuorumSize = 2;
   
               Set<BookieId> excludeBookies = new HashSet<>();
               excludeBookies.add(addr4.toBookieId());
               //excludeBookies.add(addr3.toBookieId());
   
               for (int i = 0; i < 50; ++i) {
                   EnsemblePlacementPolicy.PlacementResult<List<BookieId>> 
ensembleResponse =
                       repp.newEnsemble(ensembleSize, writeQuorumSize,
                           ackQuorumSize, null, excludeBookies);
                   List<BookieId> ensemble = ensembleResponse.getResult();
               }
           } catch (Exception e ) {
               fail("Can not new ensemble selection succeed");
           }
       }


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to