void addListener(EmbeddedLeaderRetrievalService service, LeaderRetrievalListener listener) { synchronized (lock) { checkState(!shutdown, "leader election service is shut down"); checkState(!service.running, "leader retrieval service is already started"); try { if (!listeners.add(service)) { throw new IllegalStateException("leader retrieval service was added to this service multiple times"); } service.listener = listener; service.running = true; // if we already have a leader, immediately notify this new listener if (leader != null) { notificationExecutor.execute( new NotifyOfLeaderCall(leaderAddress, leaderId, listener, LOG)); } } catch (Throwable t) { fatalError(t); } } }
@Override public void stop() { synchronized (lock) { // notify all listeners that there is no leader for (EmbeddedLeaderRetrievalService listener : listeners) { notificationExecutor.execute( new NotifyOfLeaderCall(null, null, listener.listener, LOG)); } // if there was a leader, revoke its leadership if (leader != null) { try { leader.revokeLeadership(); } catch (Throwable t) { leader.handleError(t instanceof Exception ? (Exception) t : new Exception(t)); } } proposedLeader = null; leader = null; leaderAddress = null; } }
@Override public void stop() { synchronized (lock) { // notify all listeners that there is no leader for (EmbeddedLeaderRetrievalService listener : listeners) { notificationExecutor.execute( new NotifyOfLeaderCall(null, null, listener.listener, LOG)); } // if there was a leader, revoke its leadership if (leader != null) { try { leader.revokeLeadership(); } catch (Throwable t) { leader.handleError(t instanceof Exception ? (Exception) t : new Exception(t)); } } proposedLeader = null; leader = null; leaderAddress = null; } }
void addListener(EmbeddedLeaderRetrievalService service, LeaderRetrievalListener listener) { synchronized (lock) { checkState(!shutdown, "leader election service is shut down"); checkState(!service.running, "leader retrieval service is already started"); try { if (!listeners.add(service)) { throw new IllegalStateException("leader retrieval service was added to this service multiple times"); } service.listener = listener; service.running = true; // if we already have a leader, immediately notify this new listener if (leader != null) { notificationExecutor.execute( new NotifyOfLeaderCall(leaderAddress, leaderId, listener, LOG)); } } catch (Throwable t) { fatalError(t); } } }
@Override public void stop() { synchronized (lock) { // notify all listeners that there is no leader for (EmbeddedLeaderRetrievalService listener : listeners) { notificationExecutor.execute( new NotifyOfLeaderCall(null, null, listener.listener, LOG)); } // if there was a leader, revoke its leadership if (leader != null) { try { leader.revokeLeadership(); } catch (Throwable t) { leader.handleError(t instanceof Exception ? (Exception) t : new Exception(t)); } } proposedLeader = null; leader = null; leaderAddress = null; } }
void addListener(EmbeddedLeaderRetrievalService service, LeaderRetrievalListener listener) { synchronized (lock) { checkState(!shutdown, "leader election service is shut down"); checkState(!service.running, "leader retrieval service is already started"); try { if (!listeners.add(service)) { throw new IllegalStateException("leader retrieval service was added to this service multiple times"); } service.listener = listener; service.running = true; // if we already have a leader, immediately notify this new listener if (leader != null) { notificationExecutor.execute( new NotifyOfLeaderCall(leaderAddress, leaderId, listener, LOG)); } } catch (Throwable t) { fatalError(t); } } }
@Override public void confirmLeaderSessionID(UUID leaderSessionID) { checkNotNull(leaderSessionID, "leaderSessionID"); checkArgument(leaderSessionID.equals(leaderId), "confirmed wrong leader session id"); synchronized (lock) { checkState(!shutdown, "service is shut down"); checkState(proposedLeader != null, "no leader proposed yet"); checkState(leader == null, "leader already confirmed"); // accept the confirmation final String address = proposedLeader.getAddress(); leaderAddress = address; leader = proposedLeader; // notify all listeners for (EmbeddedLeaderRetrievalService listener : listeners) { notificationExecutor.execute( new NotifyOfLeaderCall(address, leaderId, listener.listener, LOG)); } } }
@Override public void confirmLeaderSessionID(UUID leaderSessionID) { checkNotNull(leaderSessionID, "leaderSessionID"); checkArgument(leaderSessionID.equals(leaderId), "confirmed wrong leader session id"); synchronized (lock) { checkState(!shutdown, "service is shut down"); checkState(proposedLeader != null, "no leader proposed yet"); checkState(leader == null, "leader already confirmed"); // accept the confirmation final String address = proposedLeader.getAddress(); leaderAddress = address; leader = proposedLeader; // notify all listeners for (EmbeddedLeaderRetrievalService listener : listeners) { notificationExecutor.execute( new NotifyOfLeaderCall(address, leaderId, listener.listener, LOG)); } } }
@Override public void confirmLeaderSessionID(UUID leaderSessionID) { checkNotNull(leaderSessionID, "leaderSessionID"); checkArgument(leaderSessionID.equals(leaderId), "confirmed wrong leader session id"); synchronized (lock) { checkState(!shutdown, "service is shut down"); checkState(proposedLeader != null, "no leader proposed yet"); checkState(leader == null, "leader already confirmed"); // accept the confirmation final String address = proposedLeader.getAddress(); leaderAddress = address; leader = proposedLeader; // notify all listeners for (EmbeddedLeaderRetrievalService listener : listeners) { notificationExecutor.execute( new NotifyOfLeaderCall(address, leaderId, listener.listener, LOG)); } } }
@Override public void stop() { synchronized (lock) { // notify all listeners that there is no leader for (EmbeddedLeaderRetrievalService listener : listeners) { notificationExecutor.execute( new NotifyOfLeaderCall(null, null, listener.listener, LOG)); } // if there was a leader, revoke its leadership if (leader != null) { try { leader.revokeLeadership(); } catch (Throwable t) { leader.handleError(t instanceof Exception ? (Exception) t : new Exception(t)); } } proposedLeader = null; leader = null; leaderAddress = null; } }
void addListener(EmbeddedLeaderRetrievalService service, LeaderRetrievalListener listener) { synchronized (lock) { checkState(!shutdown, "leader election service is shut down"); checkState(!service.running, "leader retrieval service is already started"); try { if (!listeners.add(service)) { throw new IllegalStateException("leader retrieval service was added to this service multiple times"); } service.listener = listener; service.running = true; // if we already have a leader, immediately notify this new listener if (leader != null) { notificationExecutor.execute( new NotifyOfLeaderCall(leaderAddress, leaderId, listener, LOG)); } } catch (Throwable t) { fatalError(t); } } }
@Override public void confirmLeaderSessionID(UUID leaderSessionID) { checkNotNull(leaderSessionID, "leaderSessionID"); checkArgument(leaderSessionID.equals(leaderId), "confirmed wrong leader session id"); synchronized (lock) { checkState(!shutdown, "service is shut down"); checkState(proposedLeader != null, "no leader proposed yet"); checkState(leader == null, "leader already confirmed"); // accept the confirmation final String address = proposedLeader.getAddress(); leaderAddress = address; leader = proposedLeader; // notify all listeners for (EmbeddedLeaderRetrievalService listener : listeners) { notificationExecutor.execute( new NotifyOfLeaderCall(address, leaderId, listener.listener, LOG)); } } }