@Override
public void updatePeerIds(ServerConfigurationPayload serverConfig){
votingMember = true;
+ boolean foundSelf = false;
Set<String> currentPeers = new HashSet<>(this.getPeerIds());
for(ServerInfo server: serverConfig.getServerConfig()) {
if(getId().equals(server.getId())) {
+ foundSelf = true;
if(!server.isVoting()) {
votingMember = false;
}
for(String peerIdToRemove: currentPeers) {
this.removePeer(peerIdToRemove);
}
+
+ if(!foundSelf) {
+ votingMember = false;
+ }
+
setDynamicServerConfigurationInUse();
}
peerInfoMap.put(id, new PeerInfo(id, address, votingState));
}
- @Override public void removePeer(String name) {
- peerInfoMap.remove(name);
+ @Override
+ public void removePeer(String name) {
+ if(getId().equals(name)) {
+ votingMember = false;
+ } else {
+ peerInfoMap.remove(name);
+ }
}
@Override public ActorSelection getPeerActorSelection(String peerId) {
}
@Override
- public ServerConfigurationPayload getPeerServerInfo() {
+ public ServerConfigurationPayload getPeerServerInfo(boolean includeSelf) {
if (!isDynamicServerConfigurationInUse()) {
return null;
}
newConfig.add(new ServerInfo(peer.getId(), peer.isVoting()));
}
- newConfig.add(new ServerInfo(getId(), true));
+ if(includeSelf) {
+ newConfig.add(new ServerInfo(getId(), votingMember));
+ }
+
return (new ServerConfigurationPayload(newConfig));
}