From 95cc279a614171b8c95612aac18937eeb0c6c369 Mon Sep 17 00:00:00 2001 From: Xiang LI Date: Thu, 28 Feb 2019 18:30:34 +0800 Subject: [PATCH] HBASE-21969 Improve the update of destination rsgroup of RSGroupInfoManagerImpl#moveTables() --- .../hbase/rsgroup/RSGroupInfoManagerImpl.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java index 956b4488c9..3cb1960875 100644 --- a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java +++ b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java @@ -255,23 +255,33 @@ final class RSGroupInfoManagerImpl implements RSGroupInfoManager { @Override public synchronized void moveTables(Set tableNames, String groupName) throws IOException { + // Check if rsGroup contains the destination rsgroup if (groupName != null && !rsGroupMap.containsKey(groupName)) { throw new DoNotRetryIOException("Group " + groupName + " does not exist"); } + // Make a copy of rsGroupMap to update Map newGroupMap = Maps.newHashMap(rsGroupMap); + + // Remove tables from their original rsgroups + // and update the copy of rsGroupMap for (TableName tableName : tableNames) { if (tableMap.containsKey(tableName)) { RSGroupInfo src = new RSGroupInfo(newGroupMap.get(tableMap.get(tableName))); src.removeTable(tableName); newGroupMap.put(src.getName(), src); } - if (groupName != null) { - RSGroupInfo dst = new RSGroupInfo(newGroupMap.get(groupName)); - dst.addTable(tableName); - newGroupMap.put(dst.getName(), dst); - } } + + // Add tables to the destination rsgroup + // and update the copy of rsGroupMap + if (groupName != null) { + RSGroupInfo dstGroup = new RSGroupInfo(newGroupMap.get(groupName)); + dstGroup.addAllTables(tableNames); + newGroupMap.put(dstGroup.getName(), dstGroup); + } + + // Flush according to the updated copy of rsGroupMap flushConfig(newGroupMap); } -- 2.20.1