Repository: hadoop Updated Branches: refs/heads/trunk 56a13a6a5 -> 38e66d4d6
YARN-5903. Fix race condition in TestResourceManagerAdministrationProtocolPBClientImpl beforeclass setup method (Haibo Chen via Varun Saxena) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/38e66d4d Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/38e66d4d Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/38e66d4d Branch: refs/heads/trunk Commit: 38e66d4d64f3c2e2bb43d8e5dca3866d672322b6 Parents: 56a13a6 Author: Varun Saxena <[email protected]> Authored: Thu Dec 22 23:08:33 2016 +0530 Committer: Varun Saxena <[email protected]> Committed: Thu Dec 22 23:08:33 2016 +0530 ---------------------------------------------------------------------- ...nagerAdministrationProtocolPBClientImpl.java | 33 ++++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/38e66d4d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestResourceManagerAdministrationProtocolPBClientImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestResourceManagerAdministrationProtocolPBClientImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestResourceManagerAdministrationProtocolPBClientImpl.java index c3dd93d..fd83028 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestResourceManagerAdministrationProtocolPBClientImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestResourceManagerAdministrationProtocolPBClientImpl.java @@ -19,11 +19,15 @@ package org.apache.hadoop.yarn.client; import java.io.IOException; import java.net.InetSocketAddress; +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.yarn.api.records.DecommissionType; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.factories.RecordFactory; @@ -46,6 +50,7 @@ import org.apache.hadoop.yarn.server.api.protocolrecords.UpdateNodeResourceReque import org.apache.hadoop.yarn.server.api.protocolrecords.UpdateNodeResourceResponse; import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager; import org.junit.AfterClass; +import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; @@ -77,22 +82,30 @@ public class TestResourceManagerAdministrationProtocolPBClientImpl { protected void doSecureLogin() throws IOException { } }; + + // a reliable way to wait for resource manager to fully start + final 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(configuration); 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: " + configuration.get(YarnConfiguration.RM_ADMIN_ADDRESS)); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
