You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2017/07/19 22:33:01 UTC
[13/23] hbase git commit: HBASE-17785 RSGroupBasedLoadBalancer fails
to assign new table regions when cloning snapshot
HBASE-17785 RSGroupBasedLoadBalancer fails to assign new table regions when cloning snapshot
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/8d0cd98d
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8d0cd98d
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8d0cd98d
Branch: refs/heads/HBASE-15631-branch-1
Commit: 8d0cd98dd04b1ca2dbcbb6f5f040643c73b23262
Parents: a860e48
Author: Andrew Purtell <ap...@apache.org>
Authored: Wed Apr 5 16:25:56 2017 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Wed Jul 19 15:32:37 2017 -0700
----------------------------------------------------------------------
.../hbase/rsgroup/RSGroupAdminEndpoint.java | 28 +++++++++++++++++---
.../hadoop/hbase/rsgroup/TestRSGroups.java | 22 +++++++++++++++
2 files changed, 47 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/8d0cd98d/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.java
----------------------------------------------------------------------
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 00cd6b0..8fa9fdc 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
@@ -77,7 +77,6 @@ import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGro
import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupResponse;
import org.apache.hadoop.hbase.protobuf.generated.SnapshotProtos.SnapshotDescription;
-
public class RSGroupAdminEndpoint extends RSGroupAdminService
implements CoprocessorService, Coprocessor, MasterObserver {
@@ -274,12 +273,36 @@ public class RSGroupAdminEndpoint extends RSGroupAdminService
done.run(builder.build());
}
+ void assignTableToGroup(HTableDescriptor desc) throws IOException {
+ String groupName =
+ master.getNamespaceDescriptor(desc.getTableName().getNamespaceAsString())
+ .getConfigurationValue(RSGroupInfo.NAMESPACEDESC_PROP_GROUP);
+ 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())) {
+ groupAdminServer.moveTables(Sets.newHashSet(desc.getTableName()), groupName);
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ // MasterObserver overrides
+ /////////////////////////////////////////////////////////////////////////////
+
+ // Assign table to default RSGroup.
@Override
public void preCreateTable(ObserverContext<MasterCoprocessorEnvironment> ctx,
HTableDescriptor desc, HRegionInfo[] regions) throws IOException {
groupAdminServer.prepareRSGroupForTable(desc);
+ assignTableToGroup(desc);
}
+ // Remove table from its RSGroup.
@Override
public void postDeleteTable(ObserverContext<MasterCoprocessorEnvironment> ctx,
TableName tableName) throws IOException {
@@ -663,7 +686,7 @@ public class RSGroupAdminEndpoint extends RSGroupAdminService
public void preCloneSnapshot(ObserverContext<MasterCoprocessorEnvironment> ctx,
SnapshotDescription snapshot,
HTableDescriptor hTableDescriptor) throws IOException {
-
+ assignTableToGroup(hTableDescriptor);
}
@Override
@@ -951,5 +974,4 @@ public class RSGroupAdminEndpoint extends RSGroupAdminService
}
-
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/8d0cd98d/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java
----------------------------------------------------------------------
diff --git a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java
index 34add63..e5a1f6a 100644
--- a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java
+++ b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java
@@ -39,6 +39,7 @@ import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;
import org.apache.hadoop.hbase.master.HMaster;
import org.apache.hadoop.hbase.master.MasterServices;
import org.apache.hadoop.hbase.master.ServerManager;
+import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;
import org.apache.hadoop.hbase.testclassification.MediumTests;
@@ -90,6 +91,7 @@ public class TestRSGroups extends TestRSGroupsBase {
TEST_UTIL.getConfiguration().set(
ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,
""+NUM_SLAVES_BASE);
+ TEST_UTIL.getConfiguration().setBoolean(SnapshotManager.HBASE_SNAPSHOT_ENABLED, true);
admin = TEST_UTIL.getHBaseAdmin();
cluster = TEST_UTIL.getHBaseCluster();
@@ -284,4 +286,24 @@ public class TestRSGroups extends TestRSGroupsBase {
}
});
}
+
+ @Test
+ public void testCloneSnapshot() throws Exception {
+ final TableName tableName = TableName.valueOf(tablePrefix+"_testCloneSnapshot");
+ LOG.info("testCloneSnapshot");
+
+ byte[] FAMILY = Bytes.toBytes("test");
+ String snapshotName = tableName.getNameAsString() + "_snap";
+ TableName clonedTableName = TableName.valueOf(tableName.getNameAsString() + "_clone");
+
+ // create base table
+ TEST_UTIL.createTable(tableName, FAMILY);
+
+ // create snapshot
+ admin.snapshot(snapshotName, tableName);
+
+ // clone
+ admin.cloneSnapshot(snapshotName, clonedTableName);
+ }
+
}