YARN-4525. Fix bug in RLESparseResourceAllocation.getRangeOverlapping(). (Ishai Menache and Carlo Curino via asuresh)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/3a154f75 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/3a154f75 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/3a154f75 Branch: refs/heads/HDFS-7240 Commit: 3a154f75ed85d864b3ffd35818992418f2b6aa59 Parents: 7a9b737 Author: Arun Suresh <asur...@apache.org> Authored: Mon Jun 6 21:18:32 2016 -0700 Committer: Arun Suresh <asur...@apache.org> Committed: Mon Jun 6 21:18:32 2016 -0700 ---------------------------------------------------------------------- .../RLESparseResourceAllocation.java | 6 +++++- .../TestRLESparseResourceAllocation.java | 22 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/3a154f75/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/RLESparseResourceAllocation.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/RLESparseResourceAllocation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/RLESparseResourceAllocation.java index 63defb5..c18a93e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/RLESparseResourceAllocation.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/RLESparseResourceAllocation.java @@ -510,7 +510,11 @@ public class RLESparseResourceAllocation { long previous = a.floorKey(start); a = a.tailMap(previous, true); } - a = a.headMap(end, true); + + if (end < a.lastKey()) { + a = a.headMap(end, true); + } + } RLESparseResourceAllocation ret = new RLESparseResourceAllocation(a, resourceCalculator); http://git-wip-us.apache.org/repos/asf/hadoop/blob/3a154f75/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestRLESparseResourceAllocation.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestRLESparseResourceAllocation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestRLESparseResourceAllocation.java index b526484..f8d2a4a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestRLESparseResourceAllocation.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/reservation/TestRLESparseResourceAllocation.java @@ -283,6 +283,28 @@ public class TestRLESparseResourceAllocation { } @Test + public void testRangeOverlapping() { + ResourceCalculator resCalc = new DefaultResourceCalculator(); + + RLESparseResourceAllocation r = + new RLESparseResourceAllocation(resCalc); + int[] alloc = {10, 10, 10, 10, 10, 10}; + int start = 100; + Set<Entry<ReservationInterval, Resource>> inputs = + generateAllocation(start, alloc, false).entrySet(); + for (Entry<ReservationInterval, Resource> ip : inputs) { + r.addInterval(ip.getKey(), ip.getValue()); + } + long s = r.getEarliestStartTime(); + long d = r.getLatestNonNullTime(); + + // tries to trigger "out-of-range" bug + r = r.getRangeOverlapping(s, d); + r = r.getRangeOverlapping(s-1, d-1); + r = r.getRangeOverlapping(s+1, d+1); + } + + @Test public void testBlocks() { ResourceCalculator resCalc = new DefaultResourceCalculator(); --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org