Repository: hbase
Updated Branches:
  refs/heads/branch-1 b29a138ec -> 6f29a39d7


HBASE-19752 RSGroupBasedLoadBalancer#getMisplacedRegions() should handle the 
case where rs group cannot be determined


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/6f29a39d
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/6f29a39d
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/6f29a39d

Branch: refs/heads/branch-1
Commit: 6f29a39d764caf1b95c29bf93f2f6702b2e24250
Parents: b29a138
Author: tedyu <[email protected]>
Authored: Fri Jan 12 12:57:55 2018 -0800
Committer: tedyu <[email protected]>
Committed: Fri Jan 12 12:57:55 2018 -0800

----------------------------------------------------------------------
 .../hbase/rsgroup/RSGroupBasedLoadBalancer.java  | 19 ++++++++++++++-----
 .../balancer/TestRSGroupBasedLoadBalancer.java   | 13 +++++++++++++
 2 files changed, 27 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/6f29a39d/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
----------------------------------------------------------------------
diff --git 
a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
 
b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
index 049e723..5c08fb7 100644
--- 
a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
+++ 
b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
@@ -20,6 +20,7 @@
 
 package org.apache.hadoop.hbase.rsgroup;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.ListMultimap;
@@ -311,7 +312,8 @@ public class RSGroupBasedLoadBalancer implements 
RSGroupableBalancer, LoadBalanc
     return finalList;
   }
 
-  private Set<HRegionInfo> getMisplacedRegions(
+  @VisibleForTesting
+  public Set<HRegionInfo> getMisplacedRegions(
       Map<HRegionInfo, ServerName> regions) throws IOException {
     Set<HRegionInfo> misplacedRegions = new HashSet<HRegionInfo>();
     for(Map.Entry<HRegionInfo, ServerName> region : regions.entrySet()) {
@@ -319,12 +321,19 @@ public class RSGroupBasedLoadBalancer implements 
RSGroupableBalancer, LoadBalanc
       ServerName assignedServer = region.getValue();
       RSGroupInfo info =
           
infoManager.getRSGroup(infoManager.getRSGroupOfTable(regionInfo.getTable()));
-      if (assignedServer != null &&
-          (info == null || !info.containsServer(assignedServer.getAddress()))) 
{
+      if (assignedServer == null) {
+        LOG.debug("There is no assigned server for " + region);
+        continue;
+      }
+      RSGroupInfo otherInfo = 
infoManager.getRSGroupOfServer(assignedServer.getAddress());
+      if (info == null && otherInfo == null) {
+        LOG.warn("Couldn't obtain rs group information for " + region + " on " 
+ assignedServer);
+        continue;
+      }
+      if ((info == null || !info.containsServer(assignedServer.getAddress()))) 
{
         LOG.debug("Found misplaced region: " + 
regionInfo.getRegionNameAsString() +
             " on server: " + assignedServer +
-            " found in group: " +
-            infoManager.getRSGroupOfServer(assignedServer.getAddress()) +
+            " found in group: " +  otherInfo +
             " outside of group: " + (info == null ? "UNKNOWN" : 
info.getName()));
         misplacedRegions.add(regionInfo);
       }

http://git-wip-us.apache.org/repos/asf/hbase/blob/6f29a39d/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.java
----------------------------------------------------------------------
diff --git 
a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.java
 
b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.java
index 2360ce8..e511d14 100644
--- 
a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.java
+++ 
b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.java
@@ -78,6 +78,7 @@ public class TestRSGroupBasedLoadBalancer {
 
   static String[]  groups = new String[] { RSGroupInfo.DEFAULT_GROUP, "dg2", 
"dg3",
       "dg4" };
+  static TableName table0 = TableName.valueOf("dt0");
   static TableName[] tables =
       new TableName[] { TableName.valueOf("dt1"),
           TableName.valueOf("dt2"),
@@ -222,6 +223,16 @@ public class TestRSGroupBasedLoadBalancer {
     assertRetainedAssignment(inputForTest, servers, newAssignment);
   }
 
+  @Test
+  public void testGetMisplacedRegions() throws Exception {
+    // Test case where region is not considered misplaced if RSGroupInfo 
cannot be determined
+    Map<HRegionInfo, ServerName> inputForTest = new HashMap<>();
+    HRegionInfo ri = new HRegionInfo(
+        table0, new byte[16], new byte[16], false, regionId++);
+    inputForTest.put(ri, servers.iterator().next());
+    Set<HRegionInfo> misplacedRegions = 
loadBalancer.getMisplacedRegions(inputForTest);
+    assertFalse(misplacedRegions.contains(ri));
+  }
   /**
    * Test BOGUS_SERVER_NAME among groups do not overwrite each other
    * @throws Exception
@@ -520,6 +531,8 @@ public class TestRSGroupBasedLoadBalancer {
       tableMap.put(tables[i], groupName);
       tds.add(htd);
     }
+    tableMap.put(table0, "");
+    tds.add(new HTableDescriptor(table0));
     return tds;
   }
 

Reply via email to