Repository: hbase Updated Branches: refs/heads/branch-1.4 b52fc8ec8 -> 8e62eb22e
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/8e62eb22 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8e62eb22 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8e62eb22 Branch: refs/heads/branch-1.4 Commit: 8e62eb22e974790d47056a41aa54f6dd009756ea Parents: b52fc8e Author: tedyu <[email protected]> Authored: Fri Jan 12 12:59:28 2018 -0800 Committer: tedyu <[email protected]> Committed: Fri Jan 12 12:59:28 2018 -0800 ---------------------------------------------------------------------- .../hbase/rsgroup/RSGroupBasedLoadBalancer.java | 13 +++++++++---- .../balancer/TestRSGroupBasedLoadBalancer.java | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/8e62eb22/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..b627c42 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,6 +312,7 @@ public class RSGroupBasedLoadBalancer implements RSGroupableBalancer, LoadBalanc return finalList; } + @VisibleForTesting private Set<HRegionInfo> getMisplacedRegions( Map<HRegionInfo, ServerName> regions) throws IOException { Set<HRegionInfo> misplacedRegions = new HashSet<HRegionInfo>(); @@ -319,12 +321,15 @@ 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()))) { + 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/8e62eb22/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..359a873 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,20 @@ 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<RegionInfo, ServerName> inputForTest = new HashMap<>(); + RegionInfo ri = RegionInfoBuilder.newBuilder(table0) + .setStartKey(new byte[16]) + .setEndKey(new byte[16]) + .setSplit(false) + .setRegionId(regionId++) + .build(); + inputForTest.put(ri, servers.iterator().next()); + Set<RegionInfo> misplacedRegions = loadBalancer.getMisplacedRegions(inputForTest); + assertFalse(misplacedRegions.contains(ri)); + } /** * Test BOGUS_SERVER_NAME among groups do not overwrite each other * @throws Exception @@ -520,6 +535,8 @@ public class TestRSGroupBasedLoadBalancer { tableMap.put(tables[i], groupName); tds.add(htd); } + tableMap.put(table0, ""); + tds.add(new HTableDescriptor(table0)); return tds; }
