You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2020/05/20 10:04:51 UTC
[hbase] branch branch-2 updated: HBASE-24399 [Flakey Tests] Some
UTs about RSGroup should wait RSGroupInfoManager to be online (#1738)
This is an automated email from the ASF dual-hosted git repository.
zghao pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2 by this push:
new 69d8d4b HBASE-24399 [Flakey Tests] Some UTs about RSGroup should wait RSGroupInfoManager to be online (#1738)
69d8d4b is described below
commit 69d8d4b8947489777a19dd62b15dc6f7e2f0fb2b
Author: XinSun <dd...@gmail.com>
AuthorDate: Wed May 20 15:10:21 2020 +0800
HBASE-24399 [Flakey Tests] Some UTs about RSGroup should wait RSGroupInfoManager to be online (#1738)
Signed-off-by: Guanghao Zhang <zg...@apache.org>
---
.../procedure/TestSCPWithReplicasWithRSGroup.java | 5 ++
.../rsgroup/TestDetermineRSGroupInfoForTable.java | 29 +++++------
.../hadoop/hbase/rsgroup/TestRSGroupUtil.java | 58 +++++++++++++---------
.../hadoop/hbase/rsgroup/TestRSGroupsWithACL.java | 7 +++
4 files changed, 62 insertions(+), 37 deletions(-)
diff --git a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/master/procedure/TestSCPWithReplicasWithRSGroup.java b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/master/procedure/TestSCPWithReplicasWithRSGroup.java
index 0acc603..93739e7 100644
--- a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/master/procedure/TestSCPWithReplicasWithRSGroup.java
+++ b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/master/procedure/TestSCPWithReplicasWithRSGroup.java
@@ -20,7 +20,9 @@ package org.apache.hadoop.hbase.master.procedure;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.Waiter.Predicate;
import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;
+import org.apache.hadoop.hbase.master.HMaster;
import org.apache.hadoop.hbase.master.LoadBalancer;
import org.apache.hadoop.hbase.rsgroup.RSGroupAdminEndpoint;
import org.apache.hadoop.hbase.rsgroup.RSGroupBasedLoadBalancer;
@@ -55,6 +57,9 @@ public class TestSCPWithReplicasWithRSGroup extends TestSCPBase {
@Test
public void testCrashTargetRs() throws Exception {
+ HMaster master = util.getHBaseCluster().getMaster();
+ util.waitFor(60000, (Predicate<Exception>) () ->
+ master.isInitialized() && ((RSGroupBasedLoadBalancer) master.getLoadBalancer()).isOnline());
testRecoveryAndDoubleExecution(false, false);
}
}
diff --git a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestDetermineRSGroupInfoForTable.java b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestDetermineRSGroupInfoForTable.java
index e67127d..68da177 100644
--- a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestDetermineRSGroupInfoForTable.java
+++ b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestDetermineRSGroupInfoForTable.java
@@ -18,27 +18,28 @@
package org.apache.hadoop.hbase.rsgroup;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.IOException;
import java.util.Collections;
+import java.util.List;
import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.Waiter.Predicate;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;
import org.apache.hadoop.hbase.master.HMaster;
import org.apache.hadoop.hbase.regionserver.HRegionServer;
import org.apache.hadoop.hbase.rsgroup.RSGroupInfoManagerImpl.RSGroupMappingScript;
import org.apache.hadoop.hbase.testclassification.MediumTests;
-import org.junit.After;
import org.junit.AfterClass;
-import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
@@ -87,6 +88,14 @@ public class TestDetermineRSGroupInfoForTable {
admin = UTIL.getAdmin();
rsGroupAdminClient = new RSGroupAdminClient(UTIL.getConnection());
+ UTIL.waitFor(60000, (Predicate<Exception>) () ->
+ master.isInitialized() && ((RSGroupBasedLoadBalancer) master.getLoadBalancer()).isOnline());
+
+ List<RSGroupAdminEndpoint> cps =
+ master.getMasterCoprocessorHost().findCoprocessors(RSGroupAdminEndpoint.class);
+ assertTrue(cps.size() > 0);
+ rsGroupInfoManager = cps.get(0).getGroupInfoManager();
+
HRegionServer rs = UTIL.getHBaseCluster().getRegionServer(0);
rsGroupAdminClient.addRSGroup(GROUP_NAME);
rsGroupAdminClient.moveServers(
@@ -98,23 +107,12 @@ public class TestDetermineRSGroupInfoForTable {
}
@AfterClass
- public static void tearDown() throws IOException {
+ public static void tearDown() throws Exception {
admin.deleteNamespace(NAMESPACE_NAME);
UTIL.shutdownMiniCluster();
}
- @Before
- public void setUpBeforeMethod() throws IOException {
- rsGroupInfoManager = RSGroupInfoManagerImpl.getInstance(master);
- rsGroupInfoManager.start();
- }
-
- @After
- public void tearDownAfterMethod() throws IOException {
- rsGroupInfoManager = RSGroupInfoManagerImpl.getInstance(master);
- }
-
@Test
public void testByDefault() throws IOException {
RSGroupInfo group =
@@ -139,10 +137,13 @@ public class TestDetermineRSGroupInfoForTable {
public void testDetermineByScript() throws IOException {
RSGroupMappingScript script = mock(RSGroupMappingScript.class);
when(script.getRSGroup(anyString(), anyString())).thenReturn(GROUP_NAME);
+ RSGroupMappingScript oldScript = ((RSGroupInfoManagerImpl) rsGroupInfoManager).script;
((RSGroupInfoManagerImpl) rsGroupInfoManager).script = script;
RSGroupInfo group = rsGroupInfoManager.determineRSGroupInfoForTable(TABLE_NAME);
assertEquals(group.getName(), GROUP_NAME);
+ // reset script to avoid affecting other tests
+ ((RSGroupInfoManagerImpl) rsGroupInfoManager).script = oldScript;
}
}
diff --git a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupUtil.java b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupUtil.java
index 3c73437..32d1e9a 100644
--- a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupUtil.java
+++ b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupUtil.java
@@ -17,26 +17,39 @@
*/
package org.apache.hadoop.hbase.rsgroup;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
import java.io.IOException;
import java.util.Collections;
+import java.util.List;
+import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.NamespaceDescriptor;
-import org.apache.hadoop.hbase.client.Admin;
+import org.apache.hadoop.hbase.Waiter.Predicate;
import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;
import org.apache.hadoop.hbase.master.HMaster;
import org.apache.hadoop.hbase.regionserver.HRegionServer;
+import org.apache.hadoop.hbase.testclassification.MediumTests;
import org.junit.AfterClass;
-import org.junit.Assert;
import org.junit.BeforeClass;
+import org.junit.ClassRule;
import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+@Category({MediumTests.class})
public class TestRSGroupUtil {
- private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();
+ @ClassRule
+ public static final HBaseClassTestRule CLASS_RULE =
+ HBaseClassTestRule.forClass(TestRSGroupUtil.class);
- private static Admin admin;
+ private static final Logger LOG = LoggerFactory.getLogger(TestRSGroupUtil.class);
+
+ private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();
private static HMaster master;
@@ -44,8 +57,6 @@ public class TestRSGroupUtil {
private static final String GROUP_NAME = "rsg";
- private static final String NAMESPACE_NAME = "ns";
-
private static RSGroupInfoManager rsGroupInfoManager;
@BeforeClass
@@ -57,24 +68,20 @@ public class TestRSGroupUtil {
RSGroupAdminEndpoint.class.getName());
UTIL.startMiniCluster(5);
master = UTIL.getMiniHBaseCluster().getMaster();
- admin = UTIL.getAdmin();
- rsGroupAdminClient = new RSGroupAdminClient(UTIL.getConnection());
- HRegionServer rs = UTIL.getHBaseCluster().getRegionServer(0);
- rsGroupAdminClient.addRSGroup(GROUP_NAME);
- rsGroupAdminClient.moveServers(Collections.singleton(rs.getServerName().getAddress()), GROUP_NAME);
- admin.createNamespace(NamespaceDescriptor.create(NAMESPACE_NAME)
- .addConfiguration(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP, GROUP_NAME)
- .build());
+ UTIL.waitFor(60000, (Predicate<Exception>) () ->
+ master.isInitialized() && ((RSGroupBasedLoadBalancer) master.getLoadBalancer()).isOnline());
- rsGroupInfoManager = RSGroupInfoManagerImpl.getInstance(master);
- rsGroupInfoManager.start();
+ rsGroupAdminClient = new RSGroupAdminClient(UTIL.getConnection());
+
+ List<RSGroupAdminEndpoint> cps =
+ master.getMasterCoprocessorHost().findCoprocessors(RSGroupAdminEndpoint.class);
+ assertTrue(cps.size() > 0);
+ rsGroupInfoManager = cps.get(0).getGroupInfoManager();
}
@AfterClass
- public static void tearDown() throws IOException {
- admin.deleteNamespace(NAMESPACE_NAME);
-
+ public static void tearDown() throws Exception {
UTIL.shutdownMiniCluster();
}
@@ -82,14 +89,19 @@ public class TestRSGroupUtil {
public void rsGroupHasOnlineServer() throws IOException {
rsGroupInfoManager.refresh();
RSGroupInfo defaultGroup = rsGroupInfoManager.getRSGroup(RSGroupInfo.DEFAULT_GROUP);
- Assert.assertTrue(RSGroupUtil.rsGroupHasOnlineServer(master, defaultGroup));
+ assertTrue(RSGroupUtil.rsGroupHasOnlineServer(master, defaultGroup));
+
+ HRegionServer rs = UTIL.getHBaseCluster().getRegionServer(0);
+ rsGroupAdminClient.addRSGroup(GROUP_NAME);
+ rsGroupAdminClient.moveServers(Collections.singleton(rs.getServerName().getAddress()), GROUP_NAME);
+ rsGroupInfoManager.refresh();
RSGroupInfo rsGroup = rsGroupInfoManager.getRSGroup(GROUP_NAME);
- Assert.assertTrue(RSGroupUtil.rsGroupHasOnlineServer(master, rsGroup));
+ assertTrue(RSGroupUtil.rsGroupHasOnlineServer(master, rsGroup));
rsGroupAdminClient.addRSGroup("empty");
rsGroupInfoManager.refresh();
RSGroupInfo emptyGroup = rsGroupInfoManager.getRSGroup("empty");
- Assert.assertFalse(RSGroupUtil.rsGroupHasOnlineServer(master, emptyGroup));
+ assertFalse(RSGroupUtil.rsGroupHasOnlineServer(master, emptyGroup));
}
}
diff --git a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.java b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.java
index db43777..eda0845 100644
--- a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.java
+++ b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.java
@@ -27,10 +27,12 @@ import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.TableNotFoundException;
+import org.apache.hadoop.hbase.Waiter.Predicate;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;
+import org.apache.hadoop.hbase.master.HMaster;
import org.apache.hadoop.hbase.security.User;
import org.apache.hadoop.hbase.security.access.AccessControlClient;
import org.apache.hadoop.hbase.security.access.Permission;
@@ -108,6 +110,11 @@ public class TestRSGroupsWithACL extends SecureTestUtil{
configureRSGroupAdminEndpoint(conf);
TEST_UTIL.startMiniCluster();
+
+ HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
+ TEST_UTIL.waitFor(60000, (Predicate<Exception>) () ->
+ master.isInitialized() && ((RSGroupBasedLoadBalancer) master.getLoadBalancer()).isOnline());
+
rsGroupAdminEndpoint = (RSGroupAdminEndpoint) TEST_UTIL.getMiniHBaseCluster().getMaster().
getMasterCoprocessorHost().findCoprocessor(RSGroupAdminEndpoint.class.getName());
// Wait for the ACL table to become available