You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2016/08/19 14:44:42 UTC
hbase git commit: HBASE-16430 Fix RegionServer Group's bug when
moving multiple tables (Guangxu Cheng)
Repository: hbase
Updated Branches:
refs/heads/master fbd87f91b -> 741d0a451
HBASE-16430 Fix RegionServer Group's bug when moving multiple tables (Guangxu Cheng)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/741d0a45
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/741d0a45
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/741d0a45
Branch: refs/heads/master
Commit: 741d0a4511b9c397b2eb821aef49e858e217bf1e
Parents: fbd87f9
Author: tedyu <yu...@gmail.com>
Authored: Fri Aug 19 07:44:38 2016 -0700
Committer: tedyu <yu...@gmail.com>
Committed: Fri Aug 19 07:44:38 2016 -0700
----------------------------------------------------------------------
.../hbase/rsgroup/RSGroupInfoManagerImpl.java | 2 +-
.../hadoop/hbase/rsgroup/TestRSGroupsBase.java | 54 ++++++++++++++++++++
2 files changed, 55 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/741d0a45/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java
----------------------------------------------------------------------
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 01efefc..542ad9a 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
@@ -229,7 +229,7 @@ public class RSGroupInfoManagerImpl implements RSGroupInfoManager, ServerListene
Map<String,RSGroupInfo> newGroupMap = Maps.newHashMap(rsGroupMap);
for(TableName tableName: tableNames) {
if (tableMap.containsKey(tableName)) {
- RSGroupInfo src = new RSGroupInfo(rsGroupMap.get(tableMap.get(tableName)));
+ RSGroupInfo src = new RSGroupInfo(newGroupMap.get(tableMap.get(tableName)));
src.removeTable(tableName);
newGroupMap.put(src.getName(), src);
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/741d0a45/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.java
----------------------------------------------------------------------
diff --git a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.java b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.java
index b1c7b3b..eb7da8f 100644
--- a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.java
+++ b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.java
@@ -641,4 +641,58 @@ public abstract class TestRSGroupsBase {
private String getGroupName(String baseName) {
return groupPrefix+"_"+baseName+"_"+rand.nextInt(Integer.MAX_VALUE);
}
+
+ @Test
+ public void testMultiTableMove() throws Exception {
+ LOG.info("testMultiTableMove");
+
+ final TableName tableNameA = TableName.valueOf(tablePrefix + "_testMultiTableMoveA");
+ final TableName tableNameB = TableName.valueOf(tablePrefix + "_testMultiTableMoveB");
+ final byte[] familyNameBytes = Bytes.toBytes("f");
+ String newGroupName = getGroupName("testMultiTableMove");
+ final RSGroupInfo newGroup = addGroup(rsGroupAdmin, newGroupName, 1);
+
+ TEST_UTIL.createTable(tableNameA, familyNameBytes);
+ TEST_UTIL.createTable(tableNameB, familyNameBytes);
+ TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate<Exception>() {
+ @Override
+ public boolean evaluate() throws Exception {
+ List<String> regionsA = getTableRegionMap().get(tableNameA);
+ if (regionsA == null)
+ return false;
+ List<String> regionsB = getTableRegionMap().get(tableNameB);
+ if (regionsB == null)
+ return false;
+
+ return getTableRegionMap().get(tableNameA).size() >= 1
+ && getTableRegionMap().get(tableNameB).size() >= 1;
+ }
+ });
+
+ RSGroupInfo tableGrpA = rsGroupAdmin.getRSGroupInfoOfTable(tableNameA);
+ assertTrue(tableGrpA.getName().equals(RSGroupInfo.DEFAULT_GROUP));
+
+ RSGroupInfo tableGrpB = rsGroupAdmin.getRSGroupInfoOfTable(tableNameB);
+ assertTrue(tableGrpB.getName().equals(RSGroupInfo.DEFAULT_GROUP));
+ //change table's group
+ LOG.info("Moving table [" + tableNameA + "," + tableNameB + "] to " + newGroup.getName());
+ rsGroupAdmin.moveTables(Sets.newHashSet(tableNameA, tableNameB), newGroup.getName());
+
+ //verify group change
+ Assert.assertEquals(newGroup.getName(),
+ rsGroupAdmin.getRSGroupInfoOfTable(tableNameA).getName());
+
+ Assert.assertEquals(newGroup.getName(),
+ rsGroupAdmin.getRSGroupInfoOfTable(tableNameB).getName());
+
+ //verify tables' not exist in old group
+ Set<TableName> DefaultTables = rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP).getTables();
+ assertFalse(DefaultTables.contains(tableNameA));
+ assertFalse(DefaultTables.contains(tableNameB));
+
+ //verify tables' exist in new group
+ Set<TableName> newGroupTables = rsGroupAdmin.getRSGroupInfo(newGroupName).getTables();
+ assertTrue(newGroupTables.contains(tableNameA));
+ assertTrue(newGroupTables.contains(tableNameB));
+ }
}