From 8873dae4de18378d4cbcc60bdd2e2ff21275c2a3 Mon Sep 17 00:00:00 2001 From: haxiaolin Date: Mon, 12 Feb 2018 16:48:02 +0800 Subject: [PATCH] HBASE-19974 Decommissioned servers cannot be removed by remove_servers_rsgroup mehods --- .../hadoop/hbase/rsgroup/TestRSGroupsBase.java | 36 +++++++++++++--------- 1 file changed, 21 insertions(+), 15 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 cae9da3..65e57f0 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 @@ -25,8 +25,10 @@ import static org.junit.Assert.fail; import java.io.IOException; import java.security.SecureRandom; +import java.util.ArrayList; import java.util.EnumSet; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -923,8 +925,9 @@ public abstract class TestRSGroupsBase { public void testRemoveServers() throws Exception { LOG.info("testRemoveServers"); final RSGroupInfo newGroup = addGroup(getGroupName(name.getMethodName()), 3); - ServerName targetServer = ServerName.parseServerName( - newGroup.getServers().iterator().next().toString()); + Iterator
iterator = newGroup.getServers().iterator(); + + ServerName targetServer = ServerName.parseServerName(iterator.next().toString()); try { rsGroupAdmin.removeServers(Sets.newHashSet(targetServer.getAddress())); fail("Online servers shouldn't have been successfully removed."); @@ -943,6 +946,7 @@ public abstract class TestRSGroupsBase { GetServerInfoRequest.newBuilder().build()).getServerInfo().getServerName()); //stopping may cause an exception //due to the connection loss + LOG.info("stopping server " + targetServer.getHostAndPort()); targetRS.stopServer(null, AdminProtos.StopServerRequest.newBuilder().setReason("Die").build()); } catch(Exception e) { @@ -968,21 +972,23 @@ public abstract class TestRSGroupsBase { assertTrue(msg + " " + ex.getMessage(), ex.getMessage().contains(exp)); } assertTrue(newGroup.getServers().contains(targetServer.getAddress())); + List toDecommissionServers = new ArrayList<>(); + Address address = iterator.next(); + Set onlineServers = TEST_UTIL.getMiniHBaseCluster().getMaster() + .getServerManager().getOnlineServers().keySet(); + for(ServerName sn : onlineServers){ + if(sn.getAddress().equals(address)){ + toDecommissionServers.add(sn); + } + } + assertTrue(!toDecommissionServers.isEmpty()); + admin.decommissionRegionServers(toDecommissionServers, true); + assertEquals(1, admin.listDecommissionedRegionServers().size()); - ServerName sn = TEST_UTIL.getHBaseClusterInterface().getClusterMetrics().getMasterName(); - TEST_UTIL.getHBaseClusterInterface().stopMaster(sn); - TEST_UTIL.getHBaseClusterInterface().waitForMasterToStop(sn, 60000); - TEST_UTIL.getHBaseClusterInterface().startMaster(sn.getHostname(), 0); - TEST_UTIL.getHBaseClusterInterface().waitForActiveAndReadyMaster(60000); - - assertEquals(3, cluster.getClusterMetrics().getLiveServerMetrics().size()); - assertFalse(cluster.getClusterMetrics().getLiveServerMetrics().containsKey(targetServer)); - assertFalse(cluster.getClusterMetrics().getDeadServerNames().contains(targetServer)); - assertTrue(newGroup.getServers().contains(targetServer.getAddress())); - - rsGroupAdmin.removeServers(Sets.newHashSet(targetServer.getAddress())); + assertTrue(newGroup.getServers().contains(address)); + rsGroupAdmin.removeServers(Sets.newHashSet(address)); Set
newGroupServers = rsGroupAdmin.getRSGroupInfo(newGroup.getName()).getServers(); - assertFalse(newGroupServers.contains(targetServer.getAddress())); + assertFalse(newGroupServers.contains(address)); assertEquals(2, newGroupServers.size()); } } -- 1.9.1