[ https://issues.apache.org/jira/browse/HBASE-16430?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ted Yu updated HBASE-16430: --------------------------- Status: Patch Available (was: Open) > RegionServer Group's bug when move tables > ----------------------------------------- > > Key: HBASE-16430 > URL: https://issues.apache.org/jira/browse/HBASE-16430 > Project: HBase > Issue Type: Bug > Components: master > Affects Versions: 2.0.0 > Reporter: Guangxu Cheng > Fix For: 2.0.0 > > Attachments: HBASE-16430-v1.patch, HBASE-16430-v2.patch > > > It will be good when move one table at the same time. > However,will appear abnormal when move two or more tables at once. > For example,move tableA and tableB from Group foo to Group bar: > {code} > hbase(main):001:0> get_rsgroup 'foo' > GROUP INFORMATION > > > Servers: > > > hbase-rs1:60020 > > > Tables: > > > tableA > > > tableB > > > 5 row(s) in 0.2800 seconds > hbase(main):002:0> get_rsgroup 'bar' > GROUP INFORMATION > > > Servers: > > > hbase-rs2:60020 > > > Tables: > > > 3 row(s) in 0.0050 seconds > hbase(main):003:0> move_rsgroup_tables 'bar',['tableA','tableB'] > hbase(main):004:0> get_rsgroup 'foo' > GROUP INFORMATION > > > Servers: > > > hbase-rs1:60020 > > > Tables: > > > tableB > > > 4 row(s) in 0.0120 seconds > hbase(main):005:0> get_rsgroup 'bar' > GROUP INFORMATION > > > Servers: > > > hbase-rs2:60020 > > > Tables: > > > tableA > > > tableB > > > 5 row(s) in 0.0130 seconds > {code} > Now, you will be find tableB belongs to Group foo and Group bar. > Implementation of the moveTables as follows: > {code:title=RSGroupInfoManagerImpl.java|borderStyle=solid} > @Override > public synchronized void moveTables( > Set<TableName> tableNames, String groupName) throws IOException { > if (groupName != null && !rsGroupMap.containsKey(groupName)) { > throw new DoNotRetryIOException("Group "+groupName+" does not exist or > is a special group"); > } > Map<String,RSGroupInfo> newGroupMap = Maps.newHashMap(rsGroupMap); > for(TableName tableName: tableNames) { > if (tableMap.containsKey(tableName)) { > RSGroupInfo src = new > RSGroupInfo(rsGroupMap.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); > } > } > flushConfig(newGroupMap); > } > {code} > Should use newGroupMap instead of rsGroupMap: > {code} > RSGroupInfo src = new RSGroupInfo(rsGroupMap.get(tableMap.get(tableName))); > {code} > ==> > {code} > RSGroupInfo src = new RSGroupInfo(newGroupMap.get(tableMap.get(tableName))); > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)