hbase git commit: HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has no online servers - revert due to TestRSGroups failing

2018-03-13 Thread tedyu
Repository: hbase
Updated Branches:
  refs/heads/branch-1.4 1889a4277 -> 5e85a99b4


HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has 
no online servers - revert due to TestRSGroups failing


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/5e85a99b
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/5e85a99b
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/5e85a99b

Branch: refs/heads/branch-1.4
Commit: 5e85a99b4ad75517f0004f9a016e1ffe747b6b00
Parents: 1889a42
Author: dbist13 
Authored: Tue Mar 13 14:13:09 2018 -0700
Committer: dbist13 
Committed: Tue Mar 13 14:13:09 2018 -0700

--
 .../hbase/rsgroup/RSGroupAdminEndpoint.java | 38 +++---
 .../hadoop/hbase/rsgroup/TestRSGroups.java  |  3 +-
 .../hadoop/hbase/rsgroup/TestRSGroupsBase.java  | 73 ++--
 3 files changed, 17 insertions(+), 97 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/5e85a99b/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 56aee14..fb9c6a6 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
@@ -34,7 +34,6 @@ import java.util.Set;
 import org.apache.hadoop.hbase.ClusterStatus;
 import org.apache.hadoop.hbase.Coprocessor;
 import org.apache.hadoop.hbase.CoprocessorEnvironment;
-import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionInfo;
@@ -364,34 +363,20 @@ public class RSGroupAdminEndpoint extends 
RSGroupAdminService
   }
 
   void assignTableToGroup(HTableDescriptor desc) throws IOException {
-RSGroupInfo rsGroupInfo = preGetRSGroupInfoOfTable(desc);
-if (!rsGroupInfo.containsTable(desc.getTableName())) {
-  groupAdminServer.moveTables(Sets.newHashSet(desc.getTableName()), 
rsGroupInfo.getName());
-}
-  }
-
-  public boolean rsgroupHasOnlineServers(HTableDescriptor desc) throws 
IOException {
-RSGroupInfo rsGroupInfo = preGetRSGroupInfoOfTable(desc);
-for (ServerName onlineServer : 
master.getServerManager().createDestinationServersList()) {
-  if (rsGroupInfo.getServers().contains(onlineServer.getAddress())) {
-return true;
-  }
-}
-return false;
-  }
-
-  public RSGroupInfo preGetRSGroupInfoOfTable(HTableDescriptor desc) throws 
IOException{
 String groupName =
-
master.getTableNamespaceManager().get(desc.getTableName().getNamespaceAsString())
-.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);
+
master.getNamespaceDescriptor(desc.getTableName().getNamespaceAsString())
+.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);
 if (groupName == null) {
   groupName = RSGroupInfo.DEFAULT_GROUP;
 }
-RSGroupInfo RSGroupInfo = groupAdminServer.getRSGroupInfo(groupName);
-if (RSGroupInfo == null) {
-  throw new ConstraintException("RSGroup " + groupName + " does not 
exist.");
+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);
 }
-return RSGroupInfo;
   }
 
   /
@@ -425,10 +410,7 @@ public class RSGroupAdminEndpoint extends 
RSGroupAdminService
   public void 
preCreateTableHandler(ObserverContext ctx,
 HTableDescriptor desc,
 HRegionInfo[] regions) throws IOException {
-if (!desc.getTableName().isSystemTable() && 
!rsgroupHasOnlineServers(desc)) {
-  throw new HBaseIOException("No online servers in the rsgroup, which 
table " +
-  desc.getTableName().getNameAsString() + " belongs to");
-}
+
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/5e85a99b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java
--
diff --git 

hbase git commit: HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has no online servers - revert due to TestRSGroups failing

2018-03-13 Thread tedyu
Repository: hbase
Updated Branches:
  refs/heads/branch-1 8da331c4d -> 7b5af225e


HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has 
no online servers - revert due to TestRSGroups failing


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/7b5af225
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/7b5af225
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/7b5af225

Branch: refs/heads/branch-1
Commit: 7b5af225e584856472e3b0d891ad4d49ddb35050
Parents: 8da331c
Author: dbist13 
Authored: Tue Mar 13 14:09:45 2018 -0700
Committer: dbist13 
Committed: Tue Mar 13 14:09:45 2018 -0700

--
 .../hbase/rsgroup/RSGroupAdminEndpoint.java | 38 +++---
 .../hadoop/hbase/rsgroup/TestRSGroups.java  |  3 +-
 .../hadoop/hbase/rsgroup/TestRSGroupsBase.java  | 73 ++--
 3 files changed, 17 insertions(+), 97 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/7b5af225/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 0b39ae6..26111c2 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
@@ -34,7 +34,6 @@ import java.util.Set;
 import org.apache.hadoop.hbase.ClusterStatus;
 import org.apache.hadoop.hbase.Coprocessor;
 import org.apache.hadoop.hbase.CoprocessorEnvironment;
-import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionInfo;
@@ -362,34 +361,20 @@ public class RSGroupAdminEndpoint extends 
RSGroupAdminService
   }
 
   void assignTableToGroup(HTableDescriptor desc) throws IOException {
-RSGroupInfo rsGroupInfo = preGetRSGroupInfoOfTable(desc);
-if (!rsGroupInfo.containsTable(desc.getTableName())) {
-  groupAdminServer.moveTables(Sets.newHashSet(desc.getTableName()), 
rsGroupInfo.getName());
-}
-  }
-
-  public boolean rsgroupHasOnlineServers(HTableDescriptor desc) throws 
IOException {
-RSGroupInfo rsGroupInfo = preGetRSGroupInfoOfTable(desc);
-for (ServerName onlineServer : 
master.getServerManager().createDestinationServersList()) {
-  if (rsGroupInfo.getServers().contains(onlineServer.getAddress())) {
-return true;
-  }
-}
-return false;
-  }
-
-  public RSGroupInfo preGetRSGroupInfoOfTable(HTableDescriptor desc) throws 
IOException{
 String groupName =
-
master.getTableNamespaceManager().get(desc.getTableName().getNamespaceAsString())
-.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);
+
master.getNamespaceDescriptor(desc.getTableName().getNamespaceAsString())
+.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);
 if (groupName == null) {
   groupName = RSGroupInfo.DEFAULT_GROUP;
 }
-RSGroupInfo RSGroupInfo = groupAdminServer.getRSGroupInfo(groupName);
-if (RSGroupInfo == null) {
-  throw new ConstraintException("RSGroup " + groupName + " does not 
exist.");
+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);
 }
-return RSGroupInfo;
   }
 
   /
@@ -423,10 +408,7 @@ public class RSGroupAdminEndpoint extends 
RSGroupAdminService
   public void 
preCreateTableHandler(ObserverContext ctx,
 HTableDescriptor desc,
 HRegionInfo[] regions) throws IOException {
-if (!desc.getTableName().isSystemTable() && 
!rsgroupHasOnlineServers(desc)) {
-  throw new HBaseIOException("No online servers in the rsgroup, which 
table " +
-  desc.getTableName().getNameAsString() + " belongs to");
-}
+
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/7b5af225/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java
--
diff --git 

[08/50] [abbrv] hbase git commit: HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has no online servers

2018-03-01 Thread zhangduo
HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has 
no online servers

Signed-off-by: tedyu 


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/a08ade9f
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a08ade9f
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a08ade9f

Branch: refs/heads/HBASE-19397-branch-2
Commit: a08ade9f1aa733b41b1f6fb0b5f7cd6643c4b8a9
Parents: a2bf2ad
Author: haxiaolin 
Authored: Wed Feb 28 19:15:57 2018 +0800
Committer: tedyu 
Committed: Thu Mar 1 08:34:58 2018 -0800

--
 .../hbase/rsgroup/RSGroupAdminEndpoint.java | 34 +++-
 .../hadoop/hbase/rsgroup/TestRSGroupsBase.java  | 43 
 2 files changed, 76 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/a08ade9f/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 ce74bb4..0006d68 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
@@ -18,7 +18,6 @@
 
 package org.apache.hadoop.hbase.rsgroup;
 
-
 import com.google.protobuf.RpcCallback;
 import com.google.protobuf.RpcController;
 import com.google.protobuf.Service;
@@ -32,6 +31,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import org.apache.hadoop.hbase.CoprocessorEnvironment;
+import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.NamespaceDescriptor;
 import org.apache.hadoop.hbase.ServerName;
@@ -353,6 +353,27 @@ public class RSGroupAdminEndpoint implements 
MasterCoprocessor, MasterObserver {
 }
   }
 
+  boolean rsgroupHasServersOnline(TableDescriptor desc) throws IOException {
+String groupName =
+
master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())
+.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_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.");
+}
+
+for (ServerName onlineServer : 
master.getServerManager().createDestinationServersList()) {
+  if (rsGroupInfo.getServers().contains(onlineServer.getAddress())) {
+return true;
+  }
+}
+return false;
+  }
+
   void assignTableToGroup(TableDescriptor desc) throws IOException {
 String groupName =
 
master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())
@@ -375,6 +396,17 @@ public class RSGroupAdminEndpoint implements 
MasterCoprocessor, MasterObserver {
   // MasterObserver overrides
   /
 
+  @Override
+  public void preCreateTableAction(
+  final ObserverContext ctx,
+  final TableDescriptor desc,
+  final RegionInfo[] regions) throws IOException {
+if (!desc.getTableName().isSystemTable() && 
!rsgroupHasServersOnline(desc)) {
+  throw new HBaseIOException("No online servers in the rsgroup, which 
table " +
+  desc.getTableName().getNameAsString() + " belongs to");
+}
+  }
+
   // Assign table to default RSGroup.
   @Override
   public void postCreateTable(ObserverContext 
ctx,

http://git-wip-us.apache.org/repos/asf/hbase/blob/a08ade9f/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 fdc29b3..9422bf8 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
@@ -997,4 +997,47 @@ public abstract class TestRSGroupsBase {
 assertFalse(newGroupServers.contains(targetServer.getAddress()));
 assertEquals(2, newGroupServers.size());
   }
+
+  @Test
+  public void testCreateWhenRsgroupNoOnlineServers() throws Exception {
+LOG.info("testCreateWhenRsgroupNoOnlineServers");
+
+// set rsgroup has no 

[34/50] [abbrv] hbase git commit: HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has no online servers

2018-03-01 Thread zhangduo
HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has 
no online servers


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/ee1f26c4
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/ee1f26c4
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/ee1f26c4

Branch: refs/heads/HBASE-19064
Commit: ee1f26c4bbb5490e257eee63933fd3943f102a7d
Parents: 776eb5d
Author: haxiaolin 
Authored: Thu Mar 1 08:34:31 2018 -0800
Committer: tedyu 
Committed: Thu Mar 1 08:34:31 2018 -0800

--
 .../hbase/rsgroup/RSGroupAdminEndpoint.java | 33 +++
 .../hadoop/hbase/rsgroup/TestRSGroupsBase.java  | 43 
 2 files changed, 76 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/ee1f26c4/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 7fec32d..624aa44 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
@@ -31,6 +31,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import org.apache.hadoop.hbase.CoprocessorEnvironment;
+import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.NamespaceDescriptor;
 import org.apache.hadoop.hbase.ServerName;
@@ -352,6 +353,27 @@ public class RSGroupAdminEndpoint implements 
MasterCoprocessor, MasterObserver {
 }
   }
 
+  boolean rsgroupHasServersOnline(TableDescriptor desc) throws IOException {
+String groupName =
+
master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())
+.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_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.");
+}
+
+for (ServerName onlineServer : 
master.getServerManager().createDestinationServersList()) {
+  if (rsGroupInfo.getServers().contains(onlineServer.getAddress())) {
+return true;
+  }
+}
+return false;
+  }
+
   void assignTableToGroup(TableDescriptor desc) throws IOException {
 String groupName =
 
master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())
@@ -374,6 +396,17 @@ public class RSGroupAdminEndpoint implements 
MasterCoprocessor, MasterObserver {
   // MasterObserver overrides
   /
 
+  @Override
+  public void preCreateTableAction(
+  final ObserverContext ctx,
+  final TableDescriptor desc,
+  final RegionInfo[] regions) throws IOException {
+if (!desc.getTableName().isSystemTable() && 
!rsgroupHasServersOnline(desc)) {
+  throw new HBaseIOException("No online servers in the rsgroup, which 
table " +
+  desc.getTableName().getNameAsString() + " belongs to");
+}
+  }
+
   // Assign table to default RSGroup.
   @Override
   public void postCreateTable(ObserverContext 
ctx,

http://git-wip-us.apache.org/repos/asf/hbase/blob/ee1f26c4/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 76bcd20..fef3a5e 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
@@ -999,4 +999,47 @@ public abstract class TestRSGroupsBase {
 assertFalse(newGroupServers.contains(targetServer.getAddress()));
 assertEquals(2, newGroupServers.size());
   }
+
+  @Test
+  public void testCreateWhenRsgroupNoOnlineServers() throws Exception {
+LOG.info("testCreateWhenRsgroupNoOnlineServers");
+
+// set rsgroup has no online servers and test create table
+final RSGroupInfo appInfo = addGroup("appInfo", 1);
+Iterator iterator = appInfo.getServers().iterator();
+List serversToDecommission = new ArrayList<>();
+ServerName targetServer = 

hbase git commit: HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has no online servers

2018-03-01 Thread tedyu
Repository: hbase
Updated Branches:
  refs/heads/branch-1.4 7f54a0895 -> ebf9e3834


HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has 
no online servers

Signed-off-by: tedyu 


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/ebf9e383
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/ebf9e383
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/ebf9e383

Branch: refs/heads/branch-1.4
Commit: ebf9e38348666fefeded652ac24200223135fa1e
Parents: 7f54a08
Author: haxiaolin 
Authored: Thu Mar 1 16:05:22 2018 +0800
Committer: tedyu 
Committed: Thu Mar 1 08:37:55 2018 -0800

--
 .../hbase/rsgroup/RSGroupAdminEndpoint.java | 38 +++---
 .../hadoop/hbase/rsgroup/TestRSGroups.java  |  3 +-
 .../hadoop/hbase/rsgroup/TestRSGroupsBase.java  | 73 ++--
 3 files changed, 97 insertions(+), 17 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/ebf9e383/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 fb9c6a6..56aee14 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
@@ -34,6 +34,7 @@ import java.util.Set;
 import org.apache.hadoop.hbase.ClusterStatus;
 import org.apache.hadoop.hbase.Coprocessor;
 import org.apache.hadoop.hbase.CoprocessorEnvironment;
+import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionInfo;
@@ -363,20 +364,34 @@ public class RSGroupAdminEndpoint extends 
RSGroupAdminService
   }
 
   void assignTableToGroup(HTableDescriptor desc) throws IOException {
+RSGroupInfo rsGroupInfo = preGetRSGroupInfoOfTable(desc);
+if (!rsGroupInfo.containsTable(desc.getTableName())) {
+  groupAdminServer.moveTables(Sets.newHashSet(desc.getTableName()), 
rsGroupInfo.getName());
+}
+  }
+
+  public boolean rsgroupHasOnlineServers(HTableDescriptor desc) throws 
IOException {
+RSGroupInfo rsGroupInfo = preGetRSGroupInfoOfTable(desc);
+for (ServerName onlineServer : 
master.getServerManager().createDestinationServersList()) {
+  if (rsGroupInfo.getServers().contains(onlineServer.getAddress())) {
+return true;
+  }
+}
+return false;
+  }
+
+  public RSGroupInfo preGetRSGroupInfoOfTable(HTableDescriptor desc) throws 
IOException{
 String groupName =
-
master.getNamespaceDescriptor(desc.getTableName().getNamespaceAsString())
-.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);
+
master.getTableNamespaceManager().get(desc.getTableName().getNamespaceAsString())
+.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_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);
+RSGroupInfo RSGroupInfo = groupAdminServer.getRSGroupInfo(groupName);
+if (RSGroupInfo == null) {
+  throw new ConstraintException("RSGroup " + groupName + " does not 
exist.");
 }
+return RSGroupInfo;
   }
 
   /
@@ -410,7 +425,10 @@ public class RSGroupAdminEndpoint extends 
RSGroupAdminService
   public void 
preCreateTableHandler(ObserverContext ctx,
 HTableDescriptor desc,
 HRegionInfo[] regions) throws IOException {
-
+if (!desc.getTableName().isSystemTable() && 
!rsgroupHasOnlineServers(desc)) {
+  throw new HBaseIOException("No online servers in the rsgroup, which 
table " +
+  desc.getTableName().getNameAsString() + " belongs to");
+}
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/ebf9e383/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java
--
diff --git 

hbase git commit: HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has no online servers

2018-03-01 Thread tedyu
Repository: hbase
Updated Branches:
  refs/heads/branch-1 c4401b607 -> 1fbe4deb0


HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has 
no online servers

Signed-off-by: tedyu 


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/1fbe4deb
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/1fbe4deb
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/1fbe4deb

Branch: refs/heads/branch-1
Commit: 1fbe4deb01cd543ca0ebb08791acdf1ecd34203e
Parents: c4401b6
Author: haxiaolin 
Authored: Thu Mar 1 15:58:20 2018 +0800
Committer: tedyu 
Committed: Thu Mar 1 08:35:45 2018 -0800

--
 .../hbase/rsgroup/RSGroupAdminEndpoint.java | 38 +++---
 .../hadoop/hbase/rsgroup/TestRSGroups.java  |  3 +-
 .../hadoop/hbase/rsgroup/TestRSGroupsBase.java  | 73 ++--
 3 files changed, 97 insertions(+), 17 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/1fbe4deb/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 26111c2..0b39ae6 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
@@ -34,6 +34,7 @@ import java.util.Set;
 import org.apache.hadoop.hbase.ClusterStatus;
 import org.apache.hadoop.hbase.Coprocessor;
 import org.apache.hadoop.hbase.CoprocessorEnvironment;
+import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionInfo;
@@ -361,20 +362,34 @@ public class RSGroupAdminEndpoint extends 
RSGroupAdminService
   }
 
   void assignTableToGroup(HTableDescriptor desc) throws IOException {
+RSGroupInfo rsGroupInfo = preGetRSGroupInfoOfTable(desc);
+if (!rsGroupInfo.containsTable(desc.getTableName())) {
+  groupAdminServer.moveTables(Sets.newHashSet(desc.getTableName()), 
rsGroupInfo.getName());
+}
+  }
+
+  public boolean rsgroupHasOnlineServers(HTableDescriptor desc) throws 
IOException {
+RSGroupInfo rsGroupInfo = preGetRSGroupInfoOfTable(desc);
+for (ServerName onlineServer : 
master.getServerManager().createDestinationServersList()) {
+  if (rsGroupInfo.getServers().contains(onlineServer.getAddress())) {
+return true;
+  }
+}
+return false;
+  }
+
+  public RSGroupInfo preGetRSGroupInfoOfTable(HTableDescriptor desc) throws 
IOException{
 String groupName =
-
master.getNamespaceDescriptor(desc.getTableName().getNamespaceAsString())
-.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);
+
master.getTableNamespaceManager().get(desc.getTableName().getNamespaceAsString())
+.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_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);
+RSGroupInfo RSGroupInfo = groupAdminServer.getRSGroupInfo(groupName);
+if (RSGroupInfo == null) {
+  throw new ConstraintException("RSGroup " + groupName + " does not 
exist.");
 }
+return RSGroupInfo;
   }
 
   /
@@ -408,7 +423,10 @@ public class RSGroupAdminEndpoint extends 
RSGroupAdminService
   public void 
preCreateTableHandler(ObserverContext ctx,
 HTableDescriptor desc,
 HRegionInfo[] regions) throws IOException {
-
+if (!desc.getTableName().isSystemTable() && 
!rsgroupHasOnlineServers(desc)) {
+  throw new HBaseIOException("No online servers in the rsgroup, which 
table " +
+  desc.getTableName().getNameAsString() + " belongs to");
+}
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/1fbe4deb/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroups.java
--
diff --git 

hbase git commit: HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has no online servers

2018-03-01 Thread tedyu
Repository: hbase
Updated Branches:
  refs/heads/branch-2 a2bf2ad71 -> a08ade9f1


HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has 
no online servers

Signed-off-by: tedyu 


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/a08ade9f
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a08ade9f
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a08ade9f

Branch: refs/heads/branch-2
Commit: a08ade9f1aa733b41b1f6fb0b5f7cd6643c4b8a9
Parents: a2bf2ad
Author: haxiaolin 
Authored: Wed Feb 28 19:15:57 2018 +0800
Committer: tedyu 
Committed: Thu Mar 1 08:34:58 2018 -0800

--
 .../hbase/rsgroup/RSGroupAdminEndpoint.java | 34 +++-
 .../hadoop/hbase/rsgroup/TestRSGroupsBase.java  | 43 
 2 files changed, 76 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/a08ade9f/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 ce74bb4..0006d68 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
@@ -18,7 +18,6 @@
 
 package org.apache.hadoop.hbase.rsgroup;
 
-
 import com.google.protobuf.RpcCallback;
 import com.google.protobuf.RpcController;
 import com.google.protobuf.Service;
@@ -32,6 +31,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import org.apache.hadoop.hbase.CoprocessorEnvironment;
+import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.NamespaceDescriptor;
 import org.apache.hadoop.hbase.ServerName;
@@ -353,6 +353,27 @@ public class RSGroupAdminEndpoint implements 
MasterCoprocessor, MasterObserver {
 }
   }
 
+  boolean rsgroupHasServersOnline(TableDescriptor desc) throws IOException {
+String groupName =
+
master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())
+.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_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.");
+}
+
+for (ServerName onlineServer : 
master.getServerManager().createDestinationServersList()) {
+  if (rsGroupInfo.getServers().contains(onlineServer.getAddress())) {
+return true;
+  }
+}
+return false;
+  }
+
   void assignTableToGroup(TableDescriptor desc) throws IOException {
 String groupName =
 
master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())
@@ -375,6 +396,17 @@ public class RSGroupAdminEndpoint implements 
MasterCoprocessor, MasterObserver {
   // MasterObserver overrides
   /
 
+  @Override
+  public void preCreateTableAction(
+  final ObserverContext ctx,
+  final TableDescriptor desc,
+  final RegionInfo[] regions) throws IOException {
+if (!desc.getTableName().isSystemTable() && 
!rsgroupHasServersOnline(desc)) {
+  throw new HBaseIOException("No online servers in the rsgroup, which 
table " +
+  desc.getTableName().getNameAsString() + " belongs to");
+}
+  }
+
   // Assign table to default RSGroup.
   @Override
   public void postCreateTable(ObserverContext 
ctx,

http://git-wip-us.apache.org/repos/asf/hbase/blob/a08ade9f/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 fdc29b3..9422bf8 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
@@ -997,4 +997,47 @@ public abstract class TestRSGroupsBase {
 assertFalse(newGroupServers.contains(targetServer.getAddress()));
 assertEquals(2, newGroupServers.size());
   }
+
+  @Test
+  public void testCreateWhenRsgroupNoOnlineServers() throws Exception {
+

hbase git commit: HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has no online servers

2018-03-01 Thread tedyu
Repository: hbase
Updated Branches:
  refs/heads/master 776eb5d9c -> ee1f26c4b


HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has 
no online servers


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/ee1f26c4
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/ee1f26c4
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/ee1f26c4

Branch: refs/heads/master
Commit: ee1f26c4bbb5490e257eee63933fd3943f102a7d
Parents: 776eb5d
Author: haxiaolin 
Authored: Thu Mar 1 08:34:31 2018 -0800
Committer: tedyu 
Committed: Thu Mar 1 08:34:31 2018 -0800

--
 .../hbase/rsgroup/RSGroupAdminEndpoint.java | 33 +++
 .../hadoop/hbase/rsgroup/TestRSGroupsBase.java  | 43 
 2 files changed, 76 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/hbase/blob/ee1f26c4/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 7fec32d..624aa44 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
@@ -31,6 +31,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import org.apache.hadoop.hbase.CoprocessorEnvironment;
+import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.NamespaceDescriptor;
 import org.apache.hadoop.hbase.ServerName;
@@ -352,6 +353,27 @@ public class RSGroupAdminEndpoint implements 
MasterCoprocessor, MasterObserver {
 }
   }
 
+  boolean rsgroupHasServersOnline(TableDescriptor desc) throws IOException {
+String groupName =
+
master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())
+.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_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.");
+}
+
+for (ServerName onlineServer : 
master.getServerManager().createDestinationServersList()) {
+  if (rsGroupInfo.getServers().contains(onlineServer.getAddress())) {
+return true;
+  }
+}
+return false;
+  }
+
   void assignTableToGroup(TableDescriptor desc) throws IOException {
 String groupName =
 
master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())
@@ -374,6 +396,17 @@ public class RSGroupAdminEndpoint implements 
MasterCoprocessor, MasterObserver {
   // MasterObserver overrides
   /
 
+  @Override
+  public void preCreateTableAction(
+  final ObserverContext ctx,
+  final TableDescriptor desc,
+  final RegionInfo[] regions) throws IOException {
+if (!desc.getTableName().isSystemTable() && 
!rsgroupHasServersOnline(desc)) {
+  throw new HBaseIOException("No online servers in the rsgroup, which 
table " +
+  desc.getTableName().getNameAsString() + " belongs to");
+}
+  }
+
   // Assign table to default RSGroup.
   @Override
   public void postCreateTable(ObserverContext 
ctx,

http://git-wip-us.apache.org/repos/asf/hbase/blob/ee1f26c4/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 76bcd20..fef3a5e 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
@@ -999,4 +999,47 @@ public abstract class TestRSGroupsBase {
 assertFalse(newGroupServers.contains(targetServer.getAddress()));
 assertEquals(2, newGroupServers.size());
   }
+
+  @Test
+  public void testCreateWhenRsgroupNoOnlineServers() throws Exception {
+LOG.info("testCreateWhenRsgroupNoOnlineServers");
+
+// set rsgroup has no online servers and test create table
+final RSGroupInfo appInfo = addGroup("appInfo", 1);
+Iterator iterator = appInfo.getServers().iterator();
+List serversToDecommission =