YARN-4525. Fix bug in RLESparseResourceAllocation.getRangeOverlapping(). (Ishai Menache and Carlo Curino via asuresh)

(cherry picked from commit 3a154f75ed)
(cherry picked from commit d3655f4123)
This commit is contained in:
Arun Suresh 2016-06-06 21:18:32 -07:00
parent 934bd8989b
commit 51a16b1ff0
2 changed files with 27 additions and 1 deletions

View File

@ -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);

View File

@ -282,6 +282,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();