This is an automated email from the ASF dual-hosted git repository. openinx pushed a commit to branch HBASE-21879 in repository https://gitbox.apache.org/repos/asf/hbase.git
commit 56aafb83f3dc6b989aee7c8bad53fdd7edb2496d Author: Xiang Li <[email protected]> AuthorDate: Wed Feb 27 16:20:44 2019 +0000 HBASE-21969 Improve the update of destination rsgroup of RSGroupInfoManagerImpl#moveTables() --- .../hadoop/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 956b448..c89bba8 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<TableName> tableNames, String groupName) throws IOException { + // Check if rsGroupMap 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<String, RSGroupInfo> 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); }
