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
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: dbist13Authored: 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
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: dbist13Authored: 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
HBASE-20104 Fix infinite loop of RIT when creating table on a rsgroup that has no online servers Signed-off-by: tedyuProject: 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
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: haxiaolinAuthored: 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
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: tedyuProject: 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
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: tedyuProject: 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
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: tedyuProject: 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
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: haxiaolinAuthored: 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 =