From 051cba53e38bb38ae07540d6a6a19cb0b1a58195 Mon Sep 17 00:00:00 2001 From: Guangxu Cheng Date: Wed, 25 Oct 2017 20:29:31 +0800 Subject: [PATCH] HBASE-19088 move_tables_rsgroup will throw an exception when the table is disabled --- .../hadoop/hbase/rsgroup/RSGroupAdminServer.java | 4 +++ .../hadoop/hbase/rsgroup/TestRSGroupsBase.java | 32 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.java b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.java index 3c82d76b9e7..4ea15210ef5 100644 --- a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.java +++ b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.java @@ -406,6 +406,10 @@ public class RSGroupAdminServer implements RSGroupAdmin { // action is required. if (targetGroup != null) { for (TableName table: tables) { + if (master.getAssignmentManager().isTableDisabled(table)) { + LOG.info("Skipping move regions because the table" + table + " is disabled."); + continue; + } for (RegionInfo region : master.getAssignmentManager().getRegionStates().getRegionsOfTable(table)) { LOG.info("Moving region " + region.getShortNameToLog() + 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 f0291fadc44..38644d6db6f 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 @@ -709,6 +709,38 @@ public abstract class TestRSGroupsBase { } @Test + public void testDisabledTableMove() throws Exception { + final byte[] familyNameBytes = Bytes.toBytes("f"); + String newGroupName = getGroupName(name.getMethodName()); + final RSGroupInfo newGroup = addGroup(newGroupName, 2); + + TEST_UTIL.createMultiRegionTable(tableName, familyNameBytes, 5); + TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate() { + @Override + public boolean evaluate() throws Exception { + List regions = getTableRegionMap().get(tableName); + if (regions == null) + return false; + return getTableRegionMap().get(tableName).size() >= 5; + } + }); + + RSGroupInfo tableGrp = rsGroupAdmin.getRSGroupInfoOfTable(tableName); + assertTrue(tableGrp.getName().equals(RSGroupInfo.DEFAULT_GROUP)); + + //test disable table + admin.disableTable(tableName); + + //change table's group + LOG.info("Moving table "+ tableName + " to " + newGroup.getName()); + rsGroupAdmin.moveTables(Sets.newHashSet(tableName), newGroup.getName()); + + //verify group change + Assert.assertEquals(newGroup.getName(), + rsGroupAdmin.getRSGroupInfoOfTable(tableName).getName()); + } + + @Test public void testMoveServersAndTables() throws Exception { LOG.info("testMoveServersAndTables"); final RSGroupInfo newGroup = addGroup(getGroupName(name.getMethodName()), 1); -- 2.13.0