From e6782a5937e732f64348de261d82866b9a2ed4e1 Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Tue, 7 Nov 2017 15:53:25 -0800 Subject: [PATCH] HBASE-19194 TestRSGroupsBase has some always false checks --- .../java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.java | 8 ++++++-- .../src/main/java/org/apache/hadoop/hbase/master/HMaster.java | 8 +++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.java b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.java index 0db0feac0c..c31d6bc39f 100644 --- a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.java +++ b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.java @@ -414,7 +414,7 @@ public abstract class TestRSGroupsBase { getTableServerRegionMap().get(tableName); final ServerName first = assignMap.entrySet().iterator().next().getKey(); for(HRegionInfo region: admin.getTableRegions(tableName)) { - if(!assignMap.get(first).contains(region)) { + if(!assignMap.get(first).contains(region.getRegionNameAsString())) { admin.move(region.getEncodedNameAsBytes(), Bytes.toBytes(first.getServerName())); } } @@ -516,7 +516,11 @@ public abstract class TestRSGroupsBase { }); //verify that targetServer didn't open it - assertFalse(ProtobufUtil.getOnlineRegions(targetRS).contains(targetRegion)); + for (HRegionInfo region: ProtobufUtil.getOnlineRegions(targetRS)) { + if (targetRegion.equals(region.getRegionNameAsString())) { + fail("Target server opened region"); + } + } } @Test diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index 558d303b47..43ead3781c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -181,6 +181,7 @@ import org.mortbay.jetty.servlet.Context; import org.mortbay.jetty.servlet.ServletHolder; import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.protobuf.Descriptors; import com.google.protobuf.Service; @@ -1666,7 +1667,12 @@ public class HMaster extends HRegionServer implements MasterServices, Server { return; } } else { - dest = ServerName.valueOf(Bytes.toString(destServerName)); + ServerName candidate = ServerName.valueOf(Bytes.toString(destServerName)); + dest = balancer.randomAssignment(hri, Lists.newArrayList(candidate)); + if (dest == null) { + LOG.debug("Unable to determine a plan to assign " + hri); + return; + } if (dest.equals(serverName) && balancer instanceof BaseLoadBalancer && !((BaseLoadBalancer)balancer).shouldBeOnMaster(hri)) { // To avoid unnecessary region moving later by balancer. Don't put user -- 2.13.4