YARN-5901. Fix race condition in TestGetGroups beforeclass setup() (Contributed by Haibo Chen via Daniel Templeton)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/2d77dc72 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/2d77dc72 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/2d77dc72 Branch: refs/heads/YARN-5085 Commit: 2d77dc727d9b5e56009bbc36643d85500efcbca5 Parents: 19f373a Author: Daniel Templeton <templ...@apache.org> Authored: Thu Dec 1 15:57:39 2016 -0800 Committer: Daniel Templeton <templ...@apache.org> Committed: Thu Dec 1 15:57:39 2016 -0800 ---------------------------------------------------------------------- .../hadoop/yarn/client/TestGetGroups.java | 36 +++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/2d77dc72/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestGetGroups.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestGetGroups.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestGetGroups.java index e947ece..da0258c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestGetGroups.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestGetGroups.java @@ -20,16 +20,21 @@ package org.apache.hadoop.yarn.client; import java.io.IOException; import java.io.PrintStream; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.service.Service; import org.apache.hadoop.service.Service.STATE; +import org.apache.hadoop.service.ServiceStateChangeListener; import org.apache.hadoop.tools.GetGroupsTestBase; import org.apache.hadoop.util.Tool; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager; import org.junit.AfterClass; +import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; @@ -42,30 +47,37 @@ public class TestGetGroups extends GetGroupsTestBase { private static Configuration conf; @BeforeClass - public static void setUpResourceManager() throws IOException, InterruptedException { + public static void setUpResourceManager() throws InterruptedException { conf = new YarnConfiguration(); resourceManager = new ResourceManager() { @Override protected void doSecureLogin() throws IOException { }; }; + + // a reliable way to wait for resource manager to start + CountDownLatch rmStartedSignal = new CountDownLatch(1); + ServiceStateChangeListener rmStateChangeListener = + new ServiceStateChangeListener() { + @Override + public void stateChanged(Service service) { + if (service.getServiceState() == STATE.STARTED) { + rmStartedSignal.countDown(); + } + } + }; + resourceManager.registerServiceListener(rmStateChangeListener); + resourceManager.init(conf); new Thread() { public void run() { resourceManager.start(); }; }.start(); - int waitCount = 0; - while (resourceManager.getServiceState() == STATE.INITED - && waitCount++ < 10) { - LOG.info("Waiting for RM to start..."); - Thread.sleep(1000); - } - if (resourceManager.getServiceState() != STATE.STARTED) { - throw new IOException( - "ResourceManager failed to start. Final state is " - + resourceManager.getServiceState()); - } + + boolean rmStarted = rmStartedSignal.await(60000L, TimeUnit.MILLISECONDS); + Assert.assertTrue("ResourceManager failed to start up.", rmStarted); + LOG.info("ResourceManager RMAdmin address: " + conf.get(YarnConfiguration.RM_ADMIN_ADDRESS)); } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org