You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by si...@apache.org on 2018/02/10 03:03:37 UTC

[bookkeeper] branch master updated: [MERGE YAHOO REPO] Only reorder read sequence if any bookie is not available

This is an automated email from the ASF dual-hosted git repository.

sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new e2b93f2  [MERGE YAHOO REPO] Only reorder read sequence if any bookie is not available
e2b93f2 is described below

commit e2b93f28813556c1971a04c1ffe4b65cbe40c427
Author: Jia Zhai <zh...@apache.org>
AuthorDate: Sat Feb 10 11:03:28 2018 +0800

    [MERGE YAHOO REPO] Only reorder read sequence if any bookie is not available
    
    Descriptions of the changes in this PR:
    This is cherry-pick from yahoo repo of branch yahoo-4.3.
    
    original change is:
    https://github.com/yahoo/bookkeeper/commit/1ddd14a1
    Only reorder read sequence if any bookie is not available
    
    Author: Jia Zhai <zh...@apache.org>
    Author: Matteo Merli <mm...@apache.org>
    
    Reviewers: Enrico Olivelli <eo...@gmail.com>, Sijie Guo <si...@apache.org>
    
    This closes #1120 from jiazhai/cherry_picks/i_161
---
 .../RackawareEnsemblePlacementPolicyImpl.java      | 22 ++++++++++++++++++++++
 .../TestRackawareEnsemblePlacementPolicy.java      | 10 +++++++---
 2 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java
index 7dcd728..9a58764 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java
@@ -927,6 +927,28 @@ class RackawareEnsemblePlacementPolicyImpl extends TopologyAwareEnsemblePlacemen
         boolean useRegionAware = regionAware && (!myRegion.equals(UNKNOWN_REGION));
         int ensembleSize = ensemble.size();
 
+        // For rack aware, If all the bookies in the write set are available, simply return the original write set,
+        // to avoid creating more lists
+        boolean isAnyBookieUnavailable = false;
+
+        if (useRegionAware || reorderReadsRandom) {
+            isAnyBookieUnavailable = true;
+        } else {
+            for (int i = 0; i < ensemble.size(); i++) {
+                BookieSocketAddress bookieAddr = ensemble.get(i);
+                if ((!knownBookies.containsKey(bookieAddr) && !readOnlyBookies.contains(bookieAddr))
+                    || slowBookies.getIfPresent(bookieAddr) != null) {
+                    // Found at least one bookie not available in the ensemble, or in slowBookies
+                    isAnyBookieUnavailable = true;
+                    break;
+                }
+            }
+        }
+
+        if (!isAnyBookieUnavailable) {
+            return writeSet;
+        }
+
         for (int i = 0; i < writeSet.size(); i++) {
             int idx = writeSet.get(i);
             BookieSocketAddress address = ensemble.get(idx);
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestRackawareEnsemblePlacementPolicy.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestRackawareEnsemblePlacementPolicy.java
index 01a6617..bb7c692 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestRackawareEnsemblePlacementPolicy.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestRackawareEnsemblePlacementPolicy.java
@@ -182,10 +182,8 @@ public class TestRackawareEnsemblePlacementPolicy extends TestCase {
         DistributionSchedule.WriteSet origWriteSet = writeSet.copy();
         DistributionSchedule.WriteSet reorderSet = repp.reorderReadSequence(
                 ensemble, getBookiesHealthInfo(), writeSet);
-        DistributionSchedule.WriteSet expectedSet = writeSetFromValues(1, 2, 3, 0);
         LOG.info("reorder set : {}", reorderSet);
-        assertFalse(reorderSet.equals(origWriteSet));
-        assertEquals(expectedSet, reorderSet);
+        assertEquals(reorderSet, origWriteSet);
     }
 
     @Test
@@ -914,6 +912,12 @@ public class TestRackawareEnsemblePlacementPolicy extends TestCase {
         bookieFailures.put(addr1, 20L);
         bookieFailures.put(addr2, 22L);
 
+        // remove failure bookies: addr1 and addr2
+        addrs = new HashSet<BookieSocketAddress>();
+        addrs.add(addr3);
+        addrs.add(addr4);
+        repp.onClusterChanged(addrs, new HashSet<BookieSocketAddress>());
+
         DistributionSchedule.WriteSet reoderSet = repp.reorderReadSequence(
                 ensemble, getBookiesHealthInfo(bookieFailures, new HashMap<>()), writeSet);
         LOG.info("reorder set : {}", reoderSet);

-- 
To stop receiving notification emails like this one, please contact
sijie@apache.org.