public EmbeddedHaServices(Executor executor) { this.executor = Preconditions.checkNotNull(executor); this.resourceManagerLeaderService = new EmbeddedLeaderService(executor); this.dispatcherLeaderService = new EmbeddedLeaderService(executor); this.jobManagerLeaderServices = new HashMap<>(); this.webMonitorLeaderService = new EmbeddedLeaderService(executor); }
@Override public LeaderElectionService getResourceManagerLeaderElectionService() { return resourceManagerLeaderService.createLeaderElectionService(); }
@Override public LeaderRetrievalService getDispatcherLeaderRetriever() { return dispatcherLeaderService.createLeaderRetrievalService(); }
void removeListener(EmbeddedLeaderRetrievalService service) { synchronized (lock) { // if the service was not even started, simply do nothing if (!service.running || shutdown) { return; } try { if (!listeners.remove(service)) { throw new IllegalStateException("leader retrieval service does not belong to this service"); } // stop the service service.listener = null; service.running = false; } catch (Throwable t) { fatalError(t); } } }
@Override public void start(LeaderRetrievalListener listener) throws Exception { checkNotNull(listener); addListener(this, listener); }
@Override public void confirmLeaderSessionID(UUID leaderSessionID) { checkNotNull(leaderSessionID); confirmLeader(this, leaderSessionID); }
@Override public void start(LeaderContender contender) throws Exception { checkNotNull(contender); addContender(this, contender); }
@Override public void stop() throws Exception { removeContender(this); }
@Override public void stop() throws Exception { removeListener(this); }
@Override public void close() throws Exception { synchronized (lock) { if (!isShutDown()) { // stop all job manager leader services for (EmbeddedLeaderService service : jobManagerLeaderServices.values()) { service.shutdown(); } jobManagerLeaderServices.clear(); resourceManagerLeaderService.shutdown(); webMonitorLeaderService.shutdown(); } super.close(); } } }
void removeListener(EmbeddedLeaderRetrievalService service) { synchronized (lock) { // if the service was not even started, simply do nothing if (!service.running || shutdown) { return; } try { if (!listeners.remove(service)) { throw new IllegalStateException("leader retrieval service does not belong to this service"); } // stop the service service.listener = null; service.running = false; } catch (Throwable t) { fatalError(t); } } }
@Override public void start(LeaderRetrievalListener listener) throws Exception { checkNotNull(listener); addListener(this, listener); }
@Override public void confirmLeaderSessionID(UUID leaderSessionID) { checkNotNull(leaderSessionID); confirmLeader(this, leaderSessionID); }
@Override public void start(LeaderContender contender) throws Exception { checkNotNull(contender); addContender(this, contender); }
@Override public void stop() throws Exception { removeContender(this); }
@Override public void stop() throws Exception { removeListener(this); }
@Override public void close() throws Exception { synchronized (lock) { if (!isShutDown()) { // stop all job manager leader services for (EmbeddedLeaderService service : jobManagerLeaderServices.values()) { service.shutdown(); } jobManagerLeaderServices.clear(); resourceManagerLeaderService.shutdown(); webMonitorLeaderService.shutdown(); } super.close(); } } }