YARN-2409. RM ActiveToStandBy transition missing stoping previous rmDispatcher. Contributed by Rohith
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1618915 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
31467453ec
commit
375c221960
@ -211,6 +211,9 @@ Release 2.6.0 - UNRELEASED
|
||||
YARN-2397. Avoided loading two authentication filters for RM and TS web
|
||||
interfaces. (Varun Vasudev via zjshen)
|
||||
|
||||
YARN-2409. RM ActiveToStandBy transition missing stoping previous rmDispatcher.
|
||||
(Rohith via jianhe)
|
||||
|
||||
Release 2.5.0 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
@ -1161,6 +1161,9 @@ private void resetDispatcher() {
|
||||
((Service)dispatcher).init(this.conf);
|
||||
((Service)dispatcher).start();
|
||||
removeService((Service)rmDispatcher);
|
||||
// Need to stop previous rmDispatcher before assigning new dispatcher
|
||||
// otherwise causes "AsyncDispatcher event handler" thread leak
|
||||
((Service) rmDispatcher).stop();
|
||||
rmDispatcher = dispatcher;
|
||||
addIfService(rmDispatcher);
|
||||
rmContext.setDispatcher(rmDispatcher);
|
||||
|
@ -331,6 +331,10 @@ protected Dispatcher createDispatcher() {
|
||||
rm.adminService.transitionToStandby(requestInfo);
|
||||
rm.adminService.transitionToActive(requestInfo);
|
||||
rm.adminService.transitionToStandby(requestInfo);
|
||||
|
||||
MyCountingDispatcher dispatcher =
|
||||
(MyCountingDispatcher) rm.getRMContext().getDispatcher();
|
||||
assertTrue(!dispatcher.isStopped());
|
||||
|
||||
rm.adminService.transitionToActive(requestInfo);
|
||||
assertEquals(errorMessageForEventHandler, expectedEventHandlerCount,
|
||||
@ -339,6 +343,11 @@ protected Dispatcher createDispatcher() {
|
||||
assertEquals(errorMessageForService, expectedServiceCount,
|
||||
rm.getServices().size());
|
||||
|
||||
|
||||
// Keep the dispatcher reference before transitioning to standby
|
||||
dispatcher = (MyCountingDispatcher) rm.getRMContext().getDispatcher();
|
||||
|
||||
|
||||
rm.adminService.transitionToStandby(requestInfo);
|
||||
assertEquals(errorMessageForEventHandler, expectedEventHandlerCount,
|
||||
((MyCountingDispatcher) rm.getRMContext().getDispatcher())
|
||||
@ -346,6 +355,8 @@ protected Dispatcher createDispatcher() {
|
||||
assertEquals(errorMessageForService, expectedServiceCount,
|
||||
rm.getServices().size());
|
||||
|
||||
assertTrue(dispatcher.isStopped());
|
||||
|
||||
rm.stop();
|
||||
}
|
||||
|
||||
@ -492,6 +503,8 @@ class MyCountingDispatcher extends AbstractService implements Dispatcher {
|
||||
|
||||
private int eventHandlerCount;
|
||||
|
||||
private volatile boolean stopped = false;
|
||||
|
||||
public MyCountingDispatcher() {
|
||||
super("MyCountingDispatcher");
|
||||
this.eventHandlerCount = 0;
|
||||
@ -510,5 +523,15 @@ public void register(Class<? extends Enum> eventType, EventHandler handler) {
|
||||
public int getEventHandlerCount() {
|
||||
return this.eventHandlerCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void serviceStop() throws Exception {
|
||||
this.stopped = true;
|
||||
super.serviceStop();
|
||||
}
|
||||
|
||||
public boolean isStopped() {
|
||||
return this.stopped;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user