YARN-3941. Proportional Preemption policy should try to avoid sending duplicate PREEMPT_CONTAINER event to scheduler. (Sunil G via wangda)
This commit is contained in:
parent
ee98d6354b
commit
3bba180051
|
@ -664,6 +664,8 @@ Release 2.8.0 - UNRELEASED
|
||||||
|
|
||||||
YARN-3956. Fix TestNodeManagerHardwareUtils fails on Mac (Varun Vasudev via wangda)
|
YARN-3956. Fix TestNodeManagerHardwareUtils fails on Mac (Varun Vasudev via wangda)
|
||||||
|
|
||||||
|
YARN-3941. Proportional Preemption policy should try to avoid sending duplicate PREEMPT_CONTAINER event to scheduler. (Sunil G via wangda)
|
||||||
|
|
||||||
Release 2.7.2 - UNRELEASED
|
Release 2.7.2 - UNRELEASED
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -260,13 +260,16 @@ public class ProportionalCapacityPreemptionPolicy implements SchedulingEditPolic
|
||||||
SchedulerEventType.KILL_CONTAINER));
|
SchedulerEventType.KILL_CONTAINER));
|
||||||
preempted.remove(container);
|
preempted.remove(container);
|
||||||
} else {
|
} else {
|
||||||
|
if (preempted.get(container) != null) {
|
||||||
|
// We already updated the information to scheduler earlier, we need
|
||||||
|
// not have to raise another event.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
//otherwise just send preemption events
|
//otherwise just send preemption events
|
||||||
rmContext.getDispatcher().getEventHandler().handle(
|
rmContext.getDispatcher().getEventHandler().handle(
|
||||||
new ContainerPreemptEvent(appAttemptId, container,
|
new ContainerPreemptEvent(appAttemptId, container,
|
||||||
SchedulerEventType.PREEMPT_CONTAINER));
|
SchedulerEventType.PREEMPT_CONTAINER));
|
||||||
if (preempted.get(container) == null) {
|
preempted.put(container, clock.getTime());
|
||||||
preempted.put(container, clock.getTime());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -280,14 +280,14 @@ public class TestProportionalCapacityPreemptionPolicy {
|
||||||
// requests reiterated
|
// requests reiterated
|
||||||
when(mClock.getTime()).thenReturn(killTime / 2);
|
when(mClock.getTime()).thenReturn(killTime / 2);
|
||||||
policy.editSchedule();
|
policy.editSchedule();
|
||||||
verify(mDisp, times(20)).handle(argThat(new IsPreemptionRequestFor(appC)));
|
verify(mDisp, times(10)).handle(argThat(new IsPreemptionRequestFor(appC)));
|
||||||
|
|
||||||
// kill req sent
|
// kill req sent
|
||||||
when(mClock.getTime()).thenReturn(killTime + 1);
|
when(mClock.getTime()).thenReturn(killTime + 1);
|
||||||
policy.editSchedule();
|
policy.editSchedule();
|
||||||
verify(mDisp, times(30)).handle(evtCaptor.capture());
|
verify(mDisp, times(20)).handle(evtCaptor.capture());
|
||||||
List<ContainerPreemptEvent> events = evtCaptor.getAllValues();
|
List<ContainerPreemptEvent> events = evtCaptor.getAllValues();
|
||||||
for (ContainerPreemptEvent e : events.subList(20, 30)) {
|
for (ContainerPreemptEvent e : events.subList(20, 20)) {
|
||||||
assertEquals(appC, e.getAppId());
|
assertEquals(appC, e.getAppId());
|
||||||
assertEquals(KILL_CONTAINER, e.getType());
|
assertEquals(KILL_CONTAINER, e.getType());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue