diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java
index 88b57f1..5d506a8 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.yarn.api.records;
+import org.apache.hadoop.classification.InterfaceAudience.Private;
import org.apache.hadoop.classification.InterfaceAudience.Public;
import org.apache.hadoop.classification.InterfaceStability.Evolving;
import org.apache.hadoop.classification.InterfaceStability.Stable;
@@ -54,9 +55,16 @@
@Public
@Stable
public static Resource newInstance(int memory, int vCores) {
+ return newInstance(memory, vCores, 0);
+ }
+
+ @Private
+ @Evolving
+ public static Resource newInstance(int memory, int vCores, int vDisks) {
Resource resource = Records.newRecord(Resource.class);
resource.setMemory(memory);
resource.setVirtualCores(vCores);
+ resource.setVirtualDisks(vDisks);
return resource;
}
@@ -105,12 +113,31 @@ public static Resource newInstance(int memory, int vCores) {
@Evolving
public abstract void setVirtualCores(int vCores);
+ /**
+ * Get number of virtual disk I/O of the resource.
+ *
+ * @return number of virtual disk I/O of the resource
+ */
+ @Private
+ @Evolving
+ public abstract int getVirtualDisks();
+
+ /**
+ * Set number of virtual disk I/O of the resource.
+ *
+ * @param vDisks number of virtual disk I/O of the resource
+ */
+ @Private
+ @Evolving
+ public abstract void setVirtualDisks(int vDisks);
+
@Override
public int hashCode() {
final int prime = 263167;
int result = 3571;
result = 939769357 + getMemory(); // prime * result = 939769357 initially
result = prime * result + getVirtualCores();
+ result = prime * result + getVirtualDisks();
return result;
}
@@ -124,7 +151,8 @@ public boolean equals(Object obj) {
return false;
Resource other = (Resource) obj;
if (getMemory() != other.getMemory() ||
- getVirtualCores() != other.getVirtualCores()) {
+ getVirtualCores() != other.getVirtualCores() ||
+ getVirtualDisks() != other.getVirtualDisks()) {
return false;
}
return true;
@@ -132,6 +160,7 @@ public boolean equals(Object obj) {
@Override
public String toString() {
- return "";
+ return "";
}
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
index f0f88d8..393acef 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
@@ -160,7 +160,12 @@ private static void addDeprecatedKeys() {
public static final int DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB = 1024;
public static final String RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES =
YARN_PREFIX + "scheduler.minimum-allocation-vcores";
- public static final int DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES = 1;
+ public static final int DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES = 1;
+ /** Now we limit the vdisks for each container as 1. This will be updated
+ * once we support the various vdisks requests. */
+ public static final String RM_SCHEDULER_MINIMUM_ALLOCATION_DISK_VDISKS =
+ YARN_PREFIX + "scheduler.minimum-allocation-disk-vdisks";
+ public static final int DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_DISK_VDISKS = 1;
/** Maximum request grant-able by the RM scheduler. */
public static final String RM_SCHEDULER_MAXIMUM_ALLOCATION_MB =
@@ -169,6 +174,9 @@ private static void addDeprecatedKeys() {
public static final String RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES =
YARN_PREFIX + "scheduler.maximum-allocation-vcores";
public static final int DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES = 4;
+ public static final String RM_SCHEDULER_MAXIMUM_ALLOCATION_DISK_VDISKS =
+ YARN_PREFIX + "scheduler.maximum-allocation-disk-vdisks";
+ public static final int DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_DISK_VDISKS = 1;
/** Number of threads to handle scheduler interface.*/
public static final String RM_SCHEDULER_CLIENT_THREAD_COUNT =
@@ -793,7 +801,11 @@ private static void addDeprecatedKeys() {
NM_PREFIX + "resource.percentage-physical-cpu-limit";
public static final int DEFAULT_NM_RESOURCE_PERCENTAGE_PHYSICAL_CPU_LIMIT =
100;
-
+
+ /** Number of virtual disk I/O resources which can be allocated for containers. */
+ public static final String NM_DISK_VDISKS = NM_PREFIX + "resource.disk-vdisks";
+ public static final int DEFAULT_NM_DISK_VDISKS = 20;
+
/** NM Webapp address.**/
public static final String NM_WEBAPP_ADDRESS = NM_PREFIX + "webapp.address";
public static final int DEFAULT_NM_WEBAPP_PORT = 8042;
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
index c4e756d..65a36b8 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
@@ -56,6 +56,7 @@ message ContainerIdProto {
message ResourceProto {
optional int32 memory = 1;
optional int32 virtual_cores = 2;
+ optional int32 virtual_disks = 3;
}
message ResourceOptionProto {
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/NodeCLI.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/NodeCLI.java
index fa2779e..a793c8f 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/NodeCLI.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/NodeCLI.java
@@ -202,6 +202,11 @@ private void printNodeStatus(String nodeIdStr) throws YarnException,
: (nodeReport.getUsed().getVirtualCores() + " vcores"));
nodeReportStr.print("\tCPU-Capacity : ");
nodeReportStr.println(nodeReport.getCapability().getVirtualCores() + " vcores");
+ nodeReportStr.print("\tDisk-I/O-Used : ");
+ nodeReportStr.println((nodeReport.getUsed() == null) ?
+ "0 vdisks" : (nodeReport.getUsed().getVirtualDisks() + " vdisks"));
+ nodeReportStr.print("\tDisk-I/O-Capacity : ");
+ nodeReportStr.println(nodeReport.getCapability().getVirtualDisks() + " vdisks");
nodeReportStr.print("\tNode-Labels : ");
// Create a List for node labels since we need it get sorted
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java
index a28c6ed..6f4cd86 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java
@@ -80,10 +80,25 @@ public void setVirtualCores(int vCores) {
}
@Override
+ public int getVirtualDisks() {
+ ResourceProtoOrBuilder p = viaProto ? proto : builder;
+ return (p.getVirtualDisks());
+ }
+
+ @Override
+ public void setVirtualDisks(int vDisks) {
+ maybeInitBuilder();
+ builder.setVirtualDisks((vDisks));
+ }
+
+ @Override
public int compareTo(Resource other) {
int diff = this.getMemory() - other.getMemory();
if (diff == 0) {
diff = this.getVirtualCores() - other.getVirtualCores();
+ if (diff == 0) {
+ diff = this.getVirtualDisks() - other.getVirtualDisks();
+ }
}
return diff;
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java
index 6f5b40e..c9e95ab 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java
@@ -21,6 +21,9 @@
import org.apache.hadoop.classification.InterfaceStability.Unstable;
import org.apache.hadoop.yarn.api.records.Resource;
+import java.util.Iterator;
+import java.util.TreeSet;
+
/**
* A {@link ResourceCalculator} which uses the concept of
* dominant resource to compare multi-dimensional resources.
@@ -52,62 +55,55 @@ public int compare(Resource clusterResource, Resource lhs, Resource rhs) {
if (lhs.equals(rhs)) {
return 0;
}
-
- float l = getResourceAsValue(clusterResource, lhs, true);
- float r = getResourceAsValue(clusterResource, rhs, true);
-
- if (l < r) {
- return -1;
- } else if (l > r) {
- return 1;
- } else {
- l = getResourceAsValue(clusterResource, lhs, false);
- r = getResourceAsValue(clusterResource, rhs, false);
- if (l < r) {
- return -1;
- } else if (l > r) {
- return 1;
+
+ TreeSet lhsValues = new TreeSet();
+ lhsValues.add((float) lhs.getMemory() / clusterResource.getMemory());
+ lhsValues.add((float) lhs.getVirtualCores() / clusterResource.getVirtualCores());
+ lhsValues.add((float) lhs.getVirtualDisks() / clusterResource.getVirtualDisks());
+ TreeSet rhsValues = new TreeSet();
+ rhsValues.add((float) rhs.getMemory() / clusterResource.getMemory());
+ rhsValues.add((float) rhs.getVirtualCores() / clusterResource.getVirtualCores());
+ rhsValues.add((float) rhs.getVirtualDisks() / clusterResource.getVirtualDisks());
+
+ Iterator lhsIter = lhsValues.descendingIterator();
+ Iterator rhsIter = rhsValues.descendingIterator();
+
+ int diff = 0;
+ while (lhsIter.hasNext() && diff == 0) {
+ if (lhsIter.next() < rhsIter.next()) {
+ diff = -1;
+ } else if (lhsIter.next() > rhsIter.next()) {
+ diff = 1;
}
}
-
- return 0;
+
+ return diff;
}
- /**
- * Use 'dominant' for now since we only have 2 resources - gives us a slight
- * performance boost.
- *
- * Once we add more resources, we'll need a more complicated (and slightly
- * less performant algorithm).
- */
- protected float getResourceAsValue(
- Resource clusterResource, Resource resource, boolean dominant) {
- // Just use 'dominant' resource
- return (dominant) ?
- Math.max(
- (float)resource.getMemory() / clusterResource.getMemory(),
- (float)resource.getVirtualCores() / clusterResource.getVirtualCores()
- )
- :
- Math.min(
- (float)resource.getMemory() / clusterResource.getMemory(),
- (float)resource.getVirtualCores() / clusterResource.getVirtualCores()
- );
+ protected float getResourceAsValueMax(Resource clusterResource,
+ Resource resource) {
+ return Math.max((float) resource.getMemory() / clusterResource.getMemory(),
+ (float) resource.getVirtualCores() / clusterResource.getVirtualCores());
}
-
+
@Override
public int computeAvailableContainers(Resource available, Resource required) {
- return Math.min(
- available.getMemory() / required.getMemory(),
+ int min = Math.min(
+ available.getMemory() / required.getMemory(),
available.getVirtualCores() / required.getVirtualCores());
+ if (required.getVirtualDisks() != 0) {
+ min = Math.min(min,
+ available.getVirtualDisks() / required.getVirtualDisks());
+ }
+ return min;
}
@Override
public float divide(Resource clusterResource,
Resource numerator, Resource denominator) {
return
- getResourceAsValue(clusterResource, numerator, true) /
- getResourceAsValue(clusterResource, denominator, true);
+ getResourceAsValueMax(clusterResource, numerator) /
+ getResourceAsValueMax(clusterResource, denominator);
}
@Override
@@ -120,17 +116,22 @@ public boolean isInvalidDivisor(Resource r) {
@Override
public float ratio(Resource a, Resource b) {
- return Math.max(
- (float)a.getMemory()/b.getMemory(),
- (float)a.getVirtualCores()/b.getVirtualCores()
- );
+ float max = Math.max(
+ (float) a.getMemory() / b.getMemory(),
+ (float) a.getVirtualCores() / b.getVirtualCores());
+ if (b.getVirtualDisks() != 0) {
+ max = Math.max(max,
+ (float) a.getVirtualDisks() / b.getVirtualDisks());
+ }
+ return max;
}
@Override
public Resource divideAndCeil(Resource numerator, int denominator) {
return Resources.createResource(
divideAndCeil(numerator.getMemory(), denominator),
- divideAndCeil(numerator.getVirtualCores(), denominator)
+ divideAndCeil(numerator.getVirtualCores(), denominator),
+ divideAndCeil(numerator.getVirtualDisks(), denominator)
);
}
@@ -147,15 +148,22 @@ public Resource normalize(Resource r, Resource minimumResource,
Math.max(r.getVirtualCores(), minimumResource.getVirtualCores()),
stepFactor.getVirtualCores()),
maximumResource.getVirtualCores());
+ int normalizedVdisks = Math.min(
+ roundUp(
+ Math.max(r.getVirtualDisks(), minimumResource.getVirtualDisks()),
+ stepFactor.getVirtualDisks()),
+ maximumResource.getVirtualDisks());
+
return Resources.createResource(normalizedMemory,
- normalizedCores);
+ normalizedCores, normalizedVdisks);
}
@Override
public Resource roundUp(Resource r, Resource stepFactor) {
return Resources.createResource(
roundUp(r.getMemory(), stepFactor.getMemory()),
- roundUp(r.getVirtualCores(), stepFactor.getVirtualCores())
+ roundUp(r.getVirtualCores(), stepFactor.getVirtualCores()),
+ roundUp(r.getVirtualDisks(), stepFactor.getVirtualDisks())
);
}
@@ -163,7 +171,8 @@ public Resource roundUp(Resource r, Resource stepFactor) {
public Resource roundDown(Resource r, Resource stepFactor) {
return Resources.createResource(
roundDown(r.getMemory(), stepFactor.getMemory()),
- roundDown(r.getVirtualCores(), stepFactor.getVirtualCores())
+ roundDown(r.getVirtualCores(), stepFactor.getVirtualCores()),
+ roundDown(r.getVirtualDisks(), stepFactor.getVirtualDisks())
);
}
@@ -175,7 +184,10 @@ public Resource multiplyAndNormalizeUp(Resource r, double by,
(int)Math.ceil(r.getMemory() * by), stepFactor.getMemory()),
roundUp(
(int)Math.ceil(r.getVirtualCores() * by),
- stepFactor.getVirtualCores())
+ stepFactor.getVirtualCores()),
+ roundDown(
+ (int)Math.ceil(r.getVirtualDisks() * by),
+ stepFactor.getVirtualDisks())
);
}
@@ -190,6 +202,10 @@ public Resource multiplyAndNormalizeDown(Resource r, double by,
roundDown(
(int)(r.getVirtualCores() * by),
stepFactor.getVirtualCores()
+ ),
+ roundDown(
+ (int)(r.getVirtualDisks() * by),
+ stepFactor.getVirtualDisks()
)
);
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java
index a205bd1..bc6fd0e 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java
@@ -51,10 +51,23 @@ public void setVirtualCores(int cores) {
}
@Override
+ public int getVirtualDisks() {
+ return 0;
+ }
+
+ @Override
+ public void setVirtualDisks(int disks) {
+ throw new RuntimeException("NONE cannot be modified!");
+ }
+
+ @Override
public int compareTo(Resource o) {
int diff = 0 - o.getMemory();
if (diff == 0) {
diff = 0 - o.getVirtualCores();
+ if (diff == 0) {
+ diff = 0 - o.getVirtualDisks();
+ }
}
return diff;
}
@@ -70,7 +83,7 @@ public int getMemory() {
@Override
public void setMemory(int memory) {
- throw new RuntimeException("NONE cannot be modified!");
+ throw new RuntimeException("UNBOUNDED cannot be modified!");
}
@Override
@@ -80,7 +93,17 @@ public int getVirtualCores() {
@Override
public void setVirtualCores(int cores) {
- throw new RuntimeException("NONE cannot be modified!");
+ throw new RuntimeException("UNBOUNDED cannot be modified!");
+ }
+
+ @Override
+ public int getVirtualDisks() {
+ return Integer.MAX_VALUE;
+ }
+
+ @Override
+ public void setVirtualDisks(int disks) {
+ throw new RuntimeException("UNBOUNDED cannot be modified!");
}
@Override
@@ -88,6 +111,9 @@ public int compareTo(Resource o) {
int diff = 0 - o.getMemory();
if (diff == 0) {
diff = 0 - o.getVirtualCores();
+ if (diff == 0) {
+ diff = 0 - o.getVirtualDisks();
+ }
}
return diff;
}
@@ -99,9 +125,14 @@ public static Resource createResource(int memory) {
}
public static Resource createResource(int memory, int cores) {
+ return createResource(memory, cores, (memory > 0) ? 1 : 0);
+ }
+
+ public static Resource createResource(int memory, int cores, int vdisks) {
Resource resource = Records.newRecord(Resource.class);
resource.setMemory(memory);
resource.setVirtualCores(cores);
+ resource.setVirtualDisks(vdisks);
return resource;
}
@@ -114,12 +145,14 @@ public static Resource unbounded() {
}
public static Resource clone(Resource res) {
- return createResource(res.getMemory(), res.getVirtualCores());
+ return createResource(
+ res.getMemory(), res.getVirtualCores(), res.getVirtualDisks());
}
public static Resource addTo(Resource lhs, Resource rhs) {
lhs.setMemory(lhs.getMemory() + rhs.getMemory());
lhs.setVirtualCores(lhs.getVirtualCores() + rhs.getVirtualCores());
+ lhs.setVirtualDisks(lhs.getVirtualDisks() + rhs.getVirtualDisks());
return lhs;
}
@@ -130,6 +163,7 @@ public static Resource add(Resource lhs, Resource rhs) {
public static Resource subtractFrom(Resource lhs, Resource rhs) {
lhs.setMemory(lhs.getMemory() - rhs.getMemory());
lhs.setVirtualCores(lhs.getVirtualCores() - rhs.getVirtualCores());
+ lhs.setVirtualDisks(lhs.getVirtualDisks() - rhs.getVirtualDisks());
return lhs;
}
@@ -144,6 +178,7 @@ public static Resource negate(Resource resource) {
public static Resource multiplyTo(Resource lhs, double by) {
lhs.setMemory((int)(lhs.getMemory() * by));
lhs.setVirtualCores((int)(lhs.getVirtualCores() * by));
+ lhs.setVirtualDisks((int)(lhs.getVirtualDisks() * by));
return lhs;
}
@@ -165,6 +200,7 @@ public static Resource multiplyAndRoundDown(Resource lhs, double by) {
Resource out = clone(lhs);
out.setMemory((int)(lhs.getMemory() * by));
out.setVirtualCores((int)(lhs.getVirtualCores() * by));
+ out.setVirtualDisks((int)(lhs.getVirtualDisks() * by));
return out;
}
@@ -253,11 +289,13 @@ public static Resource max(
public static boolean fitsIn(Resource smaller, Resource bigger) {
return smaller.getMemory() <= bigger.getMemory() &&
- smaller.getVirtualCores() <= bigger.getVirtualCores();
+ smaller.getVirtualCores() <= bigger.getVirtualCores() &&
+ smaller.getVirtualDisks() <= bigger.getVirtualDisks();
}
public static Resource componentwiseMin(Resource lhs, Resource rhs) {
return createResource(Math.min(lhs.getMemory(), rhs.getMemory()),
- Math.min(lhs.getVirtualCores(), rhs.getVirtualCores()));
+ Math.min(lhs.getVirtualCores(), rhs.getVirtualCores()),
+ Math.min(lhs.getVirtualDisks(), rhs.getVirtualDisks()));
}
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
index 73a6b5d..3bfee14 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
@@ -260,6 +260,22 @@
+ The minimum allocation for every container request at the RM,
+ in terms of virtual disks. Requests lower than this won't take effect,
+ and the specified value will get allocated the minimum.
+ yarn.scheduler.minimum-allocation-disk-vdisks
+ 1
+
+
+
+ The maximum allocation for every container request at the RM,
+ in terms of virtual disks. Requests higher than this won't take effect,
+ and will get capped to this value.
+ yarn.scheduler.maximum-allocation-disk-vdisks
+ 1
+
+
+
Enable RM to recover state after starting. If true, then
yarn.resourcemanager.store.class must be specified.
yarn.resourcemanager.recovery.enabled
@@ -908,6 +924,13 @@
+ Number of virtual disk I/O resources which can be
+ allocated for containers.
+ yarn.nodemanager.resource.disk-vdisks
+ 20
+
+
+
NM Webapp address.
yarn.nodemanager.webapp.address
${yarn.nodemanager.hostname}:8042
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/utils/BuilderUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/utils/BuilderUtils.java
index 1b32671..dfac613 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/utils/BuilderUtils.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/utils/BuilderUtils.java
@@ -402,6 +402,14 @@ public static Resource newResource(int memory, int vCores) {
return resource;
}
+ public static Resource newResource(int memory, int vCores, int vDisks) {
+ Resource resource = recordFactory.newRecordInstance(Resource.class);
+ resource.setMemory(memory);
+ resource.setVirtualCores(vCores);
+ resource.setVirtualDisks(vDisks);
+ return resource;
+ }
+
public static URL newURL(String scheme, String host, int port, String file) {
URL url = recordFactory.newRecordInstance(URL.class);
url.setScheme(scheme);
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestYarnServerApiClasses.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestYarnServerApiClasses.java
index 20983b6..542951d 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestYarnServerApiClasses.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestYarnServerApiClasses.java
@@ -133,6 +133,7 @@ public void testRegisterNodeManagerRequestPBImpl() {
Resource resource = recordFactory.newRecordInstance(Resource.class);
resource.setMemory(10000);
resource.setVirtualCores(2);
+ resource.setVirtualDisks(3);
original.setResource(resource);
RegisterNodeManagerRequestPBImpl copy = new RegisterNodeManagerRequestPBImpl(
original.getProto());
@@ -141,7 +142,7 @@ public void testRegisterNodeManagerRequestPBImpl() {
assertEquals(9090, copy.getNodeId().getPort());
assertEquals(10000, copy.getResource().getMemory());
assertEquals(2, copy.getResource().getVirtualCores());
-
+ assertEquals(3, copy.getResource().getVirtualDisks());
}
/**
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java
index f561dbb..4b2e6c0 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java
@@ -142,8 +142,11 @@ protected void serviceInit(Configuration conf) throws Exception {
int virtualCores =
conf.getInt(
YarnConfiguration.NM_VCORES, YarnConfiguration.DEFAULT_NM_VCORES);
+ int virtualDisks =
+ conf.getInt(
+ YarnConfiguration.NM_DISK_VDISKS, YarnConfiguration.DEFAULT_NM_DISK_VDISKS);
- this.totalResource = Resource.newInstance(memoryMb, virtualCores);
+ this.totalResource = Resource.newInstance(memoryMb, virtualCores, virtualDisks);
metrics.addResource(totalResource);
this.tokenKeepAliveEnabled = isTokenKeepAliveEnabled(conf);
this.tokenRemovalDelayMs =
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceTrackerService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceTrackerService.java
index 4beb895..5ebf754 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceTrackerService.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceTrackerService.java
@@ -99,6 +99,7 @@
private int minAllocMb;
private int minAllocVcores;
+ private int minAllocVdisks;
static {
resync.setNodeAction(NodeAction.RESYNC);
@@ -144,6 +145,9 @@ protected void serviceInit(Configuration conf) throws Exception {
minAllocVcores = conf.getInt(
YarnConfiguration.RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES,
YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES);
+ minAllocVdisks = conf.getInt(
+ YarnConfiguration.RM_SCHEDULER_MINIMUM_ALLOCATION_DISK_VDISKS,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_DISK_VDISKS);
minimumNodeManagerVersion = conf.get(
YarnConfiguration.RM_NODEMANAGER_MINIMUM_VERSION,
@@ -285,7 +289,8 @@ public RegisterNodeManagerResponse registerNodeManager(
// Check if this node has minimum allocations
if (capability.getMemory() < minAllocMb
- || capability.getVirtualCores() < minAllocVcores) {
+ || capability.getVirtualCores() < minAllocVcores
+ || capability.getVirtualDisks() < minAllocVdisks) {
String message =
"NodeManager from " + host
+ " doesn't satisfy minimum allocations, Sending SHUTDOWN"
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerUtils.java
index 5d00009..de8382a 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerUtils.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerUtils.java
@@ -190,7 +190,7 @@ public static void normalizeRequest(
/**
* Utility method to validate a resource request, by insuring that the
- * requested memory/vcore is non-negative and not greater than max
+ * requested memory/vcore/vdisks is non-negative and not greater than max
*
* @throws InvalidResourceRequestException when there is invalid
* request
@@ -216,7 +216,17 @@ public static void validateResourceRequest(ResourceRequest resReq,
+ resReq.getCapability().getVirtualCores()
+ ", maxVirtualCores=" + maximumResource.getVirtualCores());
}
-
+ if (resReq.getCapability().getVirtualDisks() < 0 ||
+ resReq.getCapability().getVirtualDisks() >
+ maximumResource.getVirtualDisks()) {
+ throw new InvalidResourceRequestException("Invalid resource request"
+ + ", requested virtual disks < 0"
+ + ", or requested virtual disks > max configured"
+ + ", requestedVirtualDisks="
+ + resReq.getCapability().getVirtualDisks()
+ + ", maxVirtualDisks=" + maximumResource.getVirtualDisks());
+ }
+
// Get queue from scheduler
QueueInfo queueInfo = null;
try {
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockNM.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockNM.java
index 5f53805..6337ca4 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockNM.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockNM.java
@@ -50,6 +50,7 @@
private NodeId nodeId;
private final int memory;
private final int vCores;
+ private final int vDisks;
private ResourceTrackerService resourceTracker;
private final int httpPort = 2;
private MasterKey currentContainerTokenMasterKey;
@@ -65,14 +66,33 @@ public MockNM(String nodeIdStr, int memory, ResourceTrackerService resourceTrack
}
public MockNM(String nodeIdStr, int memory, int vcores,
+ ResourceTrackerService resourceTracker) {
+ // scale vdisks based on the requested memory
+ this(nodeIdStr, memory, vcores,
+ Math.max(1, (memory * YarnConfiguration.DEFAULT_NM_DISK_VDISKS) /
+ YarnConfiguration.DEFAULT_NM_PMEM_MB),
+ resourceTracker);
+ }
+
+ public MockNM(String nodeIdStr, int memory, int vcores, int vdisks,
ResourceTrackerService resourceTracker) {
- this(nodeIdStr, memory, vcores, resourceTracker, YarnVersionInfo.getVersion());
+ this(nodeIdStr, memory, vcores, vdisks, resourceTracker,
+ YarnVersionInfo.getVersion());
}
public MockNM(String nodeIdStr, int memory, int vcores,
ResourceTrackerService resourceTracker, String version) {
+ this(nodeIdStr, memory, vcores,
+ Math.max(1, (memory * YarnConfiguration.DEFAULT_NM_DISK_VDISKS) /
+ YarnConfiguration.DEFAULT_NM_PMEM_MB),
+ resourceTracker, version);
+ }
+
+ public MockNM(String nodeIdStr, int memory, int vcores, int vDisks,
+ ResourceTrackerService resourceTracker, String version) {
this.memory = memory;
this.vCores = vcores;
+ this.vDisks = vDisks;
this.resourceTracker = resourceTracker;
this.version = version;
String[] splits = nodeIdStr.split(":");
@@ -115,7 +135,7 @@ public RegisterNodeManagerResponse registerNode(
RegisterNodeManagerRequest.class);
req.setNodeId(nodeId);
req.setHttpPort(httpPort);
- Resource resource = BuilderUtils.newResource(memory, vCores);
+ Resource resource = BuilderUtils.newResource(memory, vCores, vDisks);
req.setResource(resource);
req.setContainerStatuses(containerReports);
req.setNMVersion(version);
@@ -198,4 +218,8 @@ public int getMemory() {
public int getvCores() {
return vCores;
}
+
+ public int getVDisks() {
+ return vDisks;
+ }
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/resource/TestResources.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/resource/TestResources.java
index ae98660..9fc9ccc 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/resource/TestResources.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/resource/TestResources.java
@@ -24,20 +24,20 @@
public class TestResources {
@Test(timeout=1000)
public void testFitsIn() {
- assertTrue(fitsIn(createResource(1, 1), createResource(2, 2)));
- assertTrue(fitsIn(createResource(2, 2), createResource(2, 2)));
- assertFalse(fitsIn(createResource(2, 2), createResource(1, 1)));
- assertFalse(fitsIn(createResource(1, 2), createResource(2, 1)));
- assertFalse(fitsIn(createResource(2, 1), createResource(1, 2)));
+ assertTrue(fitsIn(createResource(1, 1, 1), createResource(2, 2, 2)));
+ assertTrue(fitsIn(createResource(2, 2, 2), createResource(2, 2, 2)));
+ assertFalse(fitsIn(createResource(2, 2, 2), createResource(1, 1, 1)));
+ assertFalse(fitsIn(createResource(1, 2, 3), createResource(3, 2, 1)));
+ assertFalse(fitsIn(createResource(2, 1, 3), createResource(1, 2, 3)));
}
@Test(timeout=1000)
public void testComponentwiseMin() {
- assertEquals(createResource(1, 1),
- componentwiseMin(createResource(1, 1), createResource(2, 2)));
- assertEquals(createResource(1, 1),
- componentwiseMin(createResource(2, 2), createResource(1, 1)));
- assertEquals(createResource(1, 1),
- componentwiseMin(createResource(1, 2), createResource(2, 1)));
+ assertEquals(createResource(1, 1, 1),
+ componentwiseMin(createResource(1, 1, 1), createResource(2, 2, 2)));
+ assertEquals(createResource(1, 1, 1),
+ componentwiseMin(createResource(2, 2, 2), createResource(1, 1, 1)));
+ assertEquals(createResource(1, 1, 1),
+ componentwiseMin(createResource(1, 2, 1), createResource(2, 1, 2)));
}
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestSchedulerUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestSchedulerUtils.java
index c9e81ee..d0b7ece 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestSchedulerUtils.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/TestSchedulerUtils.java
@@ -91,12 +91,12 @@
@Test (timeout = 30000)
public void testNormalizeRequest() {
ResourceCalculator resourceCalculator = new DefaultResourceCalculator();
-
+
final int minMemory = 1024;
final int maxMemory = 8192;
- Resource minResource = Resources.createResource(minMemory, 0);
- Resource maxResource = Resources.createResource(maxMemory, 0);
-
+ Resource minResource = Resources.createResource(minMemory, 0, 0);
+ Resource maxResource = Resources.createResource(maxMemory, 0, 0);
+
ResourceRequest ask = new ResourceRequestPBImpl();
// case negative memory
@@ -155,33 +155,35 @@ public void testNormalizeRequest() {
public void testNormalizeRequestWithDominantResourceCalculator() {
ResourceCalculator resourceCalculator = new DominantResourceCalculator();
- Resource minResource = Resources.createResource(1024, 1);
- Resource maxResource = Resources.createResource(10240, 10);
- Resource clusterResource = Resources.createResource(10 * 1024, 10);
+ Resource minResource = Resources.createResource(1024, 1, 1);
+ Resource maxResource = Resources.createResource(10240, 10, 8);
+ Resource clusterResource = Resources.createResource(10 * 1024, 10, 8);
ResourceRequest ask = new ResourceRequestPBImpl();
- // case negative memory/vcores
- ask.setCapability(Resources.createResource(-1024, -1));
+ // case negative memory/vcores/vdisks
+ ask.setCapability(Resources.createResource(-1024, -1, -1));
SchedulerUtils.normalizeRequest(
ask, resourceCalculator, clusterResource, minResource, maxResource);
assertEquals(minResource, ask.getCapability());
- // case zero memory/vcores
- ask.setCapability(Resources.createResource(0, 0));
+ // case zero memory/vcores/vdisks
+ ask.setCapability(Resources.createResource(0, 0, 0));
SchedulerUtils.normalizeRequest(
ask, resourceCalculator, clusterResource, minResource, maxResource);
assertEquals(minResource, ask.getCapability());
assertEquals(1, ask.getCapability().getVirtualCores());
assertEquals(1024, ask.getCapability().getMemory());
+ assertEquals(1, ask.getCapability().getVirtualDisks());
- // case non-zero memory & zero cores
- ask.setCapability(Resources.createResource(1536, 0));
+ // case non-zero memory & zero cores & zero vdisks
+ ask.setCapability(Resources.createResource(1536, 0, 0));
SchedulerUtils.normalizeRequest(
ask, resourceCalculator, clusterResource, minResource, maxResource);
- assertEquals(Resources.createResource(2048, 1), ask.getCapability());
+ assertEquals(Resources.createResource(2048, 1, 1), ask.getCapability());
assertEquals(1, ask.getCapability().getVirtualCores());
assertEquals(2048, ask.getCapability().getMemory());
+ assertEquals(1, ask.getCapability().getVirtualDisks());
}
@Test (timeout = 30000)
@@ -347,13 +349,15 @@ public void testValidateResourceRequest() {
Resource maxResource =
Resources.createResource(
YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB,
- YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES);
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_DISK_VDISKS);
// zero memory
try {
Resource resource =
Resources.createResource(0,
- YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES);
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_DISK_VDISKS);
ResourceRequest resReq =
BuilderUtils.newResourceRequest(mock(Priority.class),
ResourceRequest.ANY, resource, 1);
@@ -367,7 +371,8 @@ public void testValidateResourceRequest() {
try {
Resource resource =
Resources.createResource(
- YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB, 0);
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB, 0,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_DISK_VDISKS);
ResourceRequest resReq =
BuilderUtils.newResourceRequest(mock(Priority.class),
ResourceRequest.ANY, resource, 1);
@@ -377,12 +382,27 @@ public void testValidateResourceRequest() {
fail("Zero vcores should be accepted");
}
+ // zero vdisks
+ try {
+ Resource resource = Resources.createResource(
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES,
+ 0);
+ ResourceRequest resReq = BuilderUtils.newResourceRequest(
+ mock(Priority.class), ResourceRequest.ANY, resource, 1);
+ SchedulerUtils.validateResourceRequest(resReq, maxResource, null,
+ mockScheduler);
+ } catch (InvalidResourceRequestException e) {
+ fail("Zero vdisks should be accepted");
+ }
+
// max memory
try {
Resource resource =
Resources.createResource(
YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB,
- YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES);
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_DISK_VDISKS);
ResourceRequest resReq =
BuilderUtils.newResourceRequest(mock(Priority.class),
ResourceRequest.ANY, resource, 1);
@@ -397,7 +417,8 @@ public void testValidateResourceRequest() {
Resource resource =
Resources.createResource(
YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB,
- YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES);
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_DISK_VDISKS);
ResourceRequest resReq =
BuilderUtils.newResourceRequest(mock(Priority.class),
ResourceRequest.ANY, resource, 1);
@@ -407,11 +428,26 @@ public void testValidateResourceRequest() {
fail("Max vcores should not be accepted");
}
+ // max vdisks
+ try {
+ Resource resource = Resources.createResource(
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_DISK_VDISKS);
+ ResourceRequest resReq = BuilderUtils.newResourceRequest(
+ mock(Priority.class), ResourceRequest.ANY, resource, 1);
+ SchedulerUtils.validateResourceRequest(resReq, maxResource, null,
+ mockScheduler);
+ } catch (InvalidResourceRequestException e) {
+ fail("Max vdisks should not be accepted");
+ }
+
// negative memory
try {
Resource resource =
Resources.createResource(-1,
- YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES);
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_DISK_VDISKS);
ResourceRequest resReq =
BuilderUtils.newResourceRequest(mock(Priority.class),
ResourceRequest.ANY, resource, 1);
@@ -426,7 +462,8 @@ public void testValidateResourceRequest() {
try {
Resource resource =
Resources.createResource(
- YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB, -1);
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB, -1,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_DISK_VDISKS);
ResourceRequest resReq =
BuilderUtils.newResourceRequest(mock(Priority.class),
ResourceRequest.ANY, resource, 1);
@@ -437,12 +474,28 @@ public void testValidateResourceRequest() {
// expected
}
+ // negative vdisks
+ try {
+ Resource resource = Resources.createResource(
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES,
+ -1);
+ ResourceRequest resReq = BuilderUtils.newResourceRequest(
+ mock(Priority.class), ResourceRequest.ANY, resource, 1);
+ SchedulerUtils.validateResourceRequest(resReq, maxResource, null,
+ mockScheduler);
+ fail("Negative vdisks should not be accepted");
+ } catch (InvalidResourceRequestException e) {
+ // expected
+ }
+
// more than max memory
try {
Resource resource =
Resources.createResource(
YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB + 1,
- YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES);
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_DISK_VDISKS);
ResourceRequest resReq =
BuilderUtils.newResourceRequest(mock(Priority.class),
ResourceRequest.ANY, resource, 1);
@@ -459,7 +512,8 @@ public void testValidateResourceRequest() {
Resources
.createResource(
YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB,
- YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES + 1);
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES + 1,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_DISK_VDISKS);
ResourceRequest resReq =
BuilderUtils.newResourceRequest(mock(Priority.class),
ResourceRequest.ANY, resource, 1);
@@ -469,8 +523,23 @@ public void testValidateResourceRequest() {
} catch (InvalidResourceRequestException e) {
// expected
}
+
+ // more than max vcores
+ try {
+ Resource resource = Resources.createResource(
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES,
+ YarnConfiguration.DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_DISK_VDISKS + 1);
+ ResourceRequest resReq = BuilderUtils.newResourceRequest(
+ mock(Priority.class), ResourceRequest.ANY, resource, 1);
+ SchedulerUtils.validateResourceRequest(resReq, maxResource, null,
+ mockScheduler);
+ fail("More than max vdisks should not be accepted");
+ } catch (InvalidResourceRequestException e) {
+ // expected
+ }
}
-
+
@Test
public void testValidateResourceBlacklistRequest() throws Exception {