YARN-370. Fix SchedulerUtils to correctly round up the resource for containers. Contributed by Zhijie Shen.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1442840 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Arun Murthy 2013-02-06 04:24:56 +00:00
parent e28edbffe1
commit 38bb4ad738
3 changed files with 27 additions and 1 deletions

View File

@ -219,6 +219,9 @@ Release 2.0.3-alpha - Unreleased
YARN-372. Move InlineDispatcher from hadoop-yarn-server-resourcemanager to YARN-372. Move InlineDispatcher from hadoop-yarn-server-resourcemanager to
hadoop-yarn-common (sseth via hitesh) hadoop-yarn-common (sseth via hitesh)
YARN-370. Fix SchedulerUtils to correctly round up the resource for
containers. (Zhijie Shen via acmurthy)
Release 2.0.2-alpha - 2012-09-07 Release 2.0.2-alpha - 2012-09-07
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -108,7 +108,8 @@ public class SchedulerUtils {
Resource normalized = Resource normalized =
Resources.normalize( Resources.normalize(
resourceCalculator, ask.getCapability(), minimumResource); resourceCalculator, ask.getCapability(), minimumResource);
ask.setCapability(normalized); ask.getCapability().setMemory(normalized.getMemory());
ask.getCapability().setVirtualCores(normalized.getVirtualCores());
} }
} }

View File

@ -19,6 +19,7 @@
package org.apache.hadoop.yarn.server.resourcemanager.scheduler; package org.apache.hadoop.yarn.server.resourcemanager.scheduler;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.api.records.Resource;
import org.apache.hadoop.yarn.api.records.ResourceRequest; import org.apache.hadoop.yarn.api.records.ResourceRequest;
@ -42,23 +43,35 @@ public class TestSchedulerUtils {
// case negative memory // case negative memory
ask.setCapability(Resources.createResource(-1024)); ask.setCapability(Resources.createResource(-1024));
Resource before = ask.getCapability();
SchedulerUtils.normalizeRequest(ask, resourceCalculator, null, minResource); SchedulerUtils.normalizeRequest(ask, resourceCalculator, null, minResource);
Resource after = ask.getCapability();
assertEquals(minMemory, ask.getCapability().getMemory()); assertEquals(minMemory, ask.getCapability().getMemory());
assertTrue(before == after);
// case zero memory // case zero memory
ask.setCapability(Resources.createResource(0)); ask.setCapability(Resources.createResource(0));
before = ask.getCapability();
SchedulerUtils.normalizeRequest(ask, resourceCalculator, null, minResource); SchedulerUtils.normalizeRequest(ask, resourceCalculator, null, minResource);
after = ask.getCapability();
assertEquals(minMemory, ask.getCapability().getMemory()); assertEquals(minMemory, ask.getCapability().getMemory());
assertTrue(before == after);
// case memory is a multiple of minMemory // case memory is a multiple of minMemory
ask.setCapability(Resources.createResource(2 * minMemory)); ask.setCapability(Resources.createResource(2 * minMemory));
before = ask.getCapability();
SchedulerUtils.normalizeRequest(ask, resourceCalculator, null, minResource); SchedulerUtils.normalizeRequest(ask, resourceCalculator, null, minResource);
after = ask.getCapability();
assertEquals(2 * minMemory, ask.getCapability().getMemory()); assertEquals(2 * minMemory, ask.getCapability().getMemory());
assertTrue(before == after);
// case memory is not a multiple of minMemory // case memory is not a multiple of minMemory
ask.setCapability(Resources.createResource(minMemory + 10)); ask.setCapability(Resources.createResource(minMemory + 10));
before = ask.getCapability();
SchedulerUtils.normalizeRequest(ask, resourceCalculator, null, minResource); SchedulerUtils.normalizeRequest(ask, resourceCalculator, null, minResource);
after = ask.getCapability();
assertEquals(2 * minMemory, ask.getCapability().getMemory()); assertEquals(2 * minMemory, ask.getCapability().getMemory());
assertTrue(before == after);
} }
@ -73,24 +86,33 @@ public class TestSchedulerUtils {
// case negative memory/vcores // case negative memory/vcores
ask.setCapability(Resources.createResource(-1024, -1)); ask.setCapability(Resources.createResource(-1024, -1));
Resource before = ask.getCapability();
SchedulerUtils.normalizeRequest( SchedulerUtils.normalizeRequest(
ask, resourceCalculator, clusterResource, minResource); ask, resourceCalculator, clusterResource, minResource);
Resource after = ask.getCapability();
assertEquals(minResource, ask.getCapability()); assertEquals(minResource, ask.getCapability());
assertTrue(before == after);
// case zero memory/vcores // case zero memory/vcores
ask.setCapability(Resources.createResource(0, 0)); ask.setCapability(Resources.createResource(0, 0));
before = ask.getCapability();
SchedulerUtils.normalizeRequest( SchedulerUtils.normalizeRequest(
ask, resourceCalculator, clusterResource, minResource); ask, resourceCalculator, clusterResource, minResource);
after = ask.getCapability();
assertEquals(minResource, ask.getCapability()); assertEquals(minResource, ask.getCapability());
assertEquals(1, ask.getCapability().getVirtualCores()); assertEquals(1, ask.getCapability().getVirtualCores());
assertEquals(1024, ask.getCapability().getMemory()); assertEquals(1024, ask.getCapability().getMemory());
assertTrue(before == after);
// case non-zero memory & zero cores // case non-zero memory & zero cores
ask.setCapability(Resources.createResource(1536, 0)); ask.setCapability(Resources.createResource(1536, 0));
before = ask.getCapability();
SchedulerUtils.normalizeRequest( SchedulerUtils.normalizeRequest(
ask, resourceCalculator, clusterResource, minResource); ask, resourceCalculator, clusterResource, minResource);
after = ask.getCapability();
assertEquals(Resources.createResource(2048, 1), ask.getCapability()); assertEquals(Resources.createResource(2048, 1), ask.getCapability());
assertEquals(1, ask.getCapability().getVirtualCores()); assertEquals(1, ask.getCapability().getVirtualCores());
assertEquals(2048, ask.getCapability().getMemory()); assertEquals(2048, ask.getCapability().getMemory());
assertTrue(before == after);
} }
} }