From 56ed33ee9816415757db37dd7a913c643bd94c1f Mon Sep 17 00:00:00 2001 From: Guangxu Cheng Date: Fri, 21 Sep 2018 21:34:53 +0800 Subject: [PATCH] HBASE-20690 Moving table to target rsgroup needs to handle TableStateNotFoundException --- .../hbase/rsgroup/RSGroupAdminEndpoint.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) 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 3d1f780628..c3d3740c33 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 @@ -461,14 +461,19 @@ public class RSGroupAdminEndpoint implements MasterCoprocessor, MasterObserver { if (groupName == null) { groupName = RSGroupInfo.DEFAULT_GROUP; } - RSGroupInfo rsGroupInfo = groupAdminServer.getRSGroupInfo(groupName); - if (rsGroupInfo == null) { - throw new ConstraintException("Default RSGroup (" + groupName + ") for this table's " - + "namespace does not exist."); - } - if (!rsGroupInfo.containsTable(desc.getTableName())) { - LOG.debug("Pre-moving table " + desc.getTableName() + " to RSGroup " + groupName); - groupAdminServer.moveTables(Sets.newHashSet(desc.getTableName()), groupName); + synchronized (groupInfoManager) { + RSGroupInfo rsGroupInfo = groupAdminServer.getRSGroupInfo(groupName); + if (rsGroupInfo == null) { + throw new ConstraintException("Default RSGroup (" + groupName + ") for this table's " + + "namespace does not exist."); + } + if(rsGroupInfo.getServers().size() < 1) { + throw new ConstraintException("Target RSGroup must have at least one server."); + } + if (!rsGroupInfo.containsTable(desc.getTableName())) { + LOG.debug("Pre-moving table " + desc.getTableName() + " to RSGroup " + groupName); + groupInfoManager.moveTables(Sets.newHashSet(desc.getTableName()), groupName); + } } } @@ -489,7 +494,7 @@ public class RSGroupAdminEndpoint implements MasterCoprocessor, MasterObserver { // Assign table to default RSGroup. @Override - public void postCreateTable(ObserverContext ctx, + public void preCreateTable(ObserverContext ctx, TableDescriptor desc, RegionInfo[] regions) throws IOException { assignTableToGroup(desc); } -- 2.17.1