diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java index 10b9bbb..327c206 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java @@ -1215,4 +1215,36 @@ private ReservationSubmissionRequest createSimpleReservationRequest( ReservationSystemTestUtil.reservationQ); return request; } + + @Test(timeout = 30000, expected = ApplicationNotFoundException.class) + public void testShouldNotRetryForeverForNonNetworkExceptions() throws Exception { + YarnConfiguration conf = new YarnConfiguration(); + conf.setInt(YarnConfiguration.RESOURCEMANAGER_CONNECT_MAX_WAIT_MS, -1); + + ResourceManager rm = null; + YarnClient yarnClient = null; + try { + // start rm + rm = new ResourceManager(); + rm.init(conf); + rm.start(); + + yarnClient = YarnClient.createYarnClient(); + yarnClient.init(conf); + yarnClient.start(); + + // create invalid application id + ApplicationId appId = ApplicationId.newInstance(1430126768L, 10645); + + // RM should throw ApplicationNotFoundException exception + yarnClient.getApplicationReport(appId); + } finally { + if (yarnClient != null) { + yarnClient.stop(); + } + if (rm != null) { + rm.stop(); + } + } + } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/RMProxy.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/RMProxy.java index fa8d642..28628f3 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/RMProxy.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/RMProxy.java @@ -224,19 +224,20 @@ public static RetryPolicy createRetryPolicy(Configuration conf) { failoverSleepBaseMs, failoverSleepMaxMs); } - if (waitForEver) { - return RetryPolicies.RETRY_FOREVER; - } - if (rmConnectionRetryIntervalMS < 0) { throw new YarnRuntimeException("Invalid Configuration. " + YarnConfiguration.RESOURCEMANAGER_CONNECT_RETRY_INTERVAL_MS + " should not be negative."); } - RetryPolicy retryPolicy = - RetryPolicies.retryUpToMaximumTimeWithFixedSleep(rmConnectWaitMS, - rmConnectionRetryIntervalMS, TimeUnit.MILLISECONDS); + RetryPolicy retryPolicy = null; + if (waitForEver) { + retryPolicy = RetryPolicies.RETRY_FOREVER; + } else { + retryPolicy = + RetryPolicies.retryUpToMaximumTimeWithFixedSleep(rmConnectWaitMS, + rmConnectionRetryIntervalMS, TimeUnit.MILLISECONDS); + } Map, RetryPolicy> exceptionToPolicyMap = new HashMap, RetryPolicy>();