- if(removeServer.getServerId().equals(raftActor.getLeaderId())){
- // Removing current leader is not supported yet
- // TODO: To properly support current leader removal we need to first implement transfer of leadership
- LOG.debug("Cannot remove {} replica because it is the Leader", removeServer.getServerId());
- sender.tell(new RemoveServerReply(ServerChangeStatus.NOT_SUPPORTED, raftActor.getLeaderId()), raftActor.getSelf());
- } else if(!raftContext.getPeerIds().contains(removeServer.getServerId())) {
- sender.tell(new RemoveServerReply(ServerChangeStatus.DOES_NOT_EXIST, raftActor.getLeaderId()), raftActor.getSelf());
+ boolean isSelf = removeServer.getServerId().equals(raftActor.getId());
+ if(isSelf && !raftContext.hasFollowers()) {
+ sender.tell(new RemoveServerReply(ServerChangeStatus.NOT_SUPPORTED, raftActor.getLeaderId()),
+ raftActor.getSelf());
+ } else if(!isSelf && !raftContext.getPeerIds().contains(removeServer.getServerId())) {
+ sender.tell(new RemoveServerReply(ServerChangeStatus.DOES_NOT_EXIST, raftActor.getLeaderId()),
+ raftActor.getSelf());