private void resetRMContext() { RMContextImpl rmContextImpl = new RMContextImpl(); // transfer service context to new RM service Context rmContextImpl.setServiceContext(rmContext.getServiceContext()); // reset dispatcher Dispatcher dispatcher = setupDispatcher(); ((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); rmContextImpl.setDispatcher(dispatcher); rmContext = rmContextImpl; }