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 2018/05/08 14:59:07 UTC
hbase git commit: HBASE-20500 [rsgroup] should keep at least one
server in default group
Repository: hbase
Updated Branches:
refs/heads/master 1825af45b -> 102f0bf9c
HBASE-20500 [rsgroup] should keep at least one server in default group
Signed-off-by: tedyu <yu...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/102f0bf9
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/102f0bf9
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/102f0bf9
Branch: refs/heads/master
Commit: 102f0bf9c565f70afd272cd5f2cb39305c3783f8
Parents: 1825af4
Author: Yechao Chen <ch...@gmail.com>
Authored: Tue May 8 14:04:59 2018 +0800
Committer: tedyu <yu...@gmail.com>
Committed: Tue May 8 07:59:01 2018 -0700
----------------------------------------------------------------------
.../hbase/rsgroup/RSGroupAdminServer.java | 5 +++
.../hadoop/hbase/rsgroup/TestRSGroupsBase.java | 47 ++++++++++++++++++++
2 files changed, 52 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/102f0bf9/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.java
----------------------------------------------------------------------
diff --git a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.java b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.java
index 094fc1d..670e8aa 100644
--- a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.java
+++ b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.java
@@ -56,6 +56,8 @@ import org.apache.hbase.thirdparty.com.google.common.collect.Maps;
@InterfaceAudience.Private
public class RSGroupAdminServer implements RSGroupAdmin {
private static final Logger LOG = LoggerFactory.getLogger(RSGroupAdminServer.class);
+ public static final String KEEP_ONE_SERVER_IN_DEFAULT_ERROR_MESSAGE = "should keep at least " +
+ "one server in 'default' RSGroup.";
private MasterServices master;
private final RSGroupInfoManager rsGroupInfoManager;
@@ -307,6 +309,9 @@ public class RSGroupAdminServer implements RSGroupAdmin {
// Only move online servers (when moving from 'default') or servers from other
// groups. This prevents bogus servers from entering groups
if (RSGroupInfo.DEFAULT_GROUP.equals(srcGrp.getName())) {
+ if (srcGrp.getServers().size() <= servers.size()) {
+ throw new ConstraintException(KEEP_ONE_SERVER_IN_DEFAULT_ERROR_MESSAGE);
+ }
checkOnlineServersOnly(servers);
}
// Ensure all servers are of same rsgroup.
http://git-wip-us.apache.org/repos/asf/hbase/blob/102f0bf9/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 9e29637..199dd98 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
@@ -340,6 +340,53 @@ public abstract class TestRSGroupsBase {
}
@Test
+ public void testMoveServersFromDefaultGroup() throws Exception {
+ //create groups and assign servers
+ rsGroupAdmin.addRSGroup("foo");
+
+ RSGroupInfo fooGroup = rsGroupAdmin.getRSGroupInfo("foo");
+ assertEquals(0, fooGroup.getServers().size());
+ RSGroupInfo defaultGroup = rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP);
+
+ //test remove all servers from default
+ try {
+ rsGroupAdmin.moveServers(defaultGroup.getServers(), fooGroup.getName());
+ fail(RSGroupAdminServer.KEEP_ONE_SERVER_IN_DEFAULT_ERROR_MESSAGE);
+ } catch (ConstraintException ex) {
+ assertTrue(ex.getMessage().contains(RSGroupAdminServer
+ .KEEP_ONE_SERVER_IN_DEFAULT_ERROR_MESSAGE));
+ }
+
+ //test success case, remove one server from default ,keep at least one server
+ if (defaultGroup.getServers().size() > 1) {
+ Address serverInDefaultGroup = defaultGroup.getServers().iterator().next();
+ LOG.info("moving server " + serverInDefaultGroup + " from group default to group " +
+ fooGroup.getName());
+ rsGroupAdmin.moveServers(Sets.newHashSet(serverInDefaultGroup), fooGroup.getName());
+ }
+
+ fooGroup = rsGroupAdmin.getRSGroupInfo("foo");
+ LOG.info("moving servers " + fooGroup.getServers() + " to group default");
+ rsGroupAdmin.moveServers(fooGroup.getServers(), RSGroupInfo.DEFAULT_GROUP);
+
+ TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate<Exception>() {
+ @Override
+ public boolean evaluate() throws Exception {
+ return getNumServers() ==
+ rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP).getServers().size();
+ }
+ });
+
+ fooGroup = rsGroupAdmin.getRSGroupInfo("foo");
+ assertEquals(0, fooGroup.getServers().size());
+
+ //test group removal
+ LOG.info("Remove group " + fooGroup.getName());
+ rsGroupAdmin.removeRSGroup(fooGroup.getName());
+ Assert.assertEquals(null, rsGroupAdmin.getRSGroupInfo(fooGroup.getName()));
+ }
+
+ @Test
public void testTableMoveTruncateAndDrop() throws Exception {
final byte[] familyNameBytes = Bytes.toBytes("f");
String newGroupName = getGroupName(name.getMethodName());