diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java index e0695e9c3d..fc020f73f0 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java @@ -3116,7 +3116,8 @@ public long checkAndGetApplicationLifetime(String queueName, // check only for maximum, that's enough because default can't // exceed maximum if (maximumApplicationLifetime <= 0) { - return lifetimeRequestedByApp; + return (lifetimeRequestedByApp <= 0) ? defaultApplicationLifetime : + lifetimeRequestedByApp; } if (lifetimeRequestedByApp <= 0) { diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java index 934fc1b728..781f0d605f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java @@ -259,7 +259,8 @@ protected void setupQueueConfigs(Resource clusterResource, conf.getMaximumLifetimePerQueue((getQueuePath())); defaultApplicationLifetime = conf.getDefaultLifetimePerQueue((getQueuePath())); - if (defaultApplicationLifetime > maxApplicationLifetime) { + if (maxApplicationLifetime > 0 && + defaultApplicationLifetime > maxApplicationLifetime) { throw new YarnRuntimeException( "Default lifetime" + defaultApplicationLifetime + " can't exceed maximum lifetime " + maxApplicationLifetime); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java index 855c793edc..8036a21998 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java @@ -5171,7 +5171,8 @@ public void testcheckAndGetApplicationLifetime() throws Exception { Assert.assertEquals(100, cs.checkAndGetApplicationLifetime("default", 100)); Assert.assertEquals(defaultLifetime, cs.checkAndGetApplicationLifetime("default", -1)); - Assert.assertEquals(0, cs.checkAndGetApplicationLifetime("default", 0)); + Assert.assertEquals(defaultLifetime, + cs.checkAndGetApplicationLifetime("default", 0)); Assert.assertEquals(maxLifetime, cs.getMaximumApplicationLifetime("default")); @@ -5191,8 +5192,10 @@ public void testcheckAndGetApplicationLifetime() throws Exception { defaultLifetime = 0; cs = setUpCSQueue(maxLifetime, defaultLifetime); Assert.assertEquals(100, cs.checkAndGetApplicationLifetime("default", 100)); - Assert.assertEquals(-1, cs.checkAndGetApplicationLifetime("default", -1)); - Assert.assertEquals(0, cs.checkAndGetApplicationLifetime("default", 0)); + Assert.assertEquals(defaultLifetime, + cs.checkAndGetApplicationLifetime("default", -1)); + Assert.assertEquals(defaultLifetime, + cs.checkAndGetApplicationLifetime("default", 0)); maxLifetime = 10; defaultLifetime = -1; @@ -5213,6 +5216,16 @@ public void testcheckAndGetApplicationLifetime() throws Exception { Assert.assertTrue( ye.getMessage().contains("can't exceed maximum lifetime")); } + + maxLifetime = -1; + defaultLifetime = 10; + cs = setUpCSQueue(maxLifetime, defaultLifetime); + Assert.assertEquals(100, + cs.checkAndGetApplicationLifetime("default", 100)); + Assert.assertEquals(defaultLifetime, + cs.checkAndGetApplicationLifetime("default", -1)); + Assert.assertEquals(defaultLifetime, + cs.checkAndGetApplicationLifetime("default", 0)); } private CapacityScheduler setUpCSQueue(long maxLifetime,