From 5e2aabe699e30ad5c9e6234a1f4aaaef9383c781 Mon Sep 17 00:00:00 2001 From: xuqinya Date: Mon, 1 Apr 2019 10:44:27 +0800 Subject: [PATCH] [rsgroup] Do not attempt to move tables that do not exist --- .../org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.java | 2 +- .../java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.java | 8 ++++++++ .../java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsAdmin1.java | 9 +++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.java b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.java index 3d1f780..1843bc2 100644 --- a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.java +++ b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.java @@ -468,7 +468,7 @@ public class RSGroupAdminEndpoint implements MasterCoprocessor, MasterObserver { } if (!rsGroupInfo.containsTable(desc.getTableName())) { LOG.debug("Pre-moving table " + desc.getTableName() + " to RSGroup " + groupName); - groupAdminServer.moveTables(Sets.newHashSet(desc.getTableName()), groupName); + groupAdminServer.moveTables(Sets.newHashSet(desc.getTableName()), groupName, true); } } 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 20eb327..9363c77 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 @@ -372,6 +372,10 @@ public class RSGroupAdminServer implements RSGroupAdmin { @Override public void moveTables(Set tables, String targetGroup) throws IOException { + moveTables(tables, targetGroup, false); + } + + public void moveTables(Set tables, String targetGroup, boolean createTable) throws IOException { if (tables == null) { throw new ConstraintException("The list of servers cannot be null."); } @@ -395,6 +399,10 @@ public class RSGroupAdminServer implements RSGroupAdmin { for (TableName table : tables) { String srcGroup = rsGroupInfoManager.getRSGroupOfTable(table); + if (srcGroup == null && !createTable) { + throw new ConstraintException( + "Source group is null for table " + table + ", table must exist."); + } if(srcGroup != null && srcGroup.equals(targetGroup)) { throw new ConstraintException( "Source RSGroup " + srcGroup + " is same as target " + targetGroup + diff --git a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsAdmin1.java b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsAdmin1.java index 27511e3..4ca7856 100644 --- a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsAdmin1.java +++ b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsAdmin1.java @@ -130,6 +130,15 @@ public class TestRSGroupsAdmin1 extends TestRSGroupsBase { } catch (ConstraintException | TableNotFoundException ex) { // expected } + + try { + String newGroupName = getGroupName(name.getMethodName()); + final RSGroupInfo newGroup = addGroup(newGroupName, 1); + rsGroupAdmin.moveTables(Sets.newHashSet(TableName.valueOf("bogustable")), newGroup.getName()); + fail("Expected move with bogus table to fail"); + } catch(ConstraintException|TableNotFoundException ex) { + //expected + } try { rsGroupAdmin.moveServers(Sets.newHashSet(Address.fromParts("bogus", 123)), "bogus"); -- 1.8.3.1