private RaftActorBehavior currentBehavior;
+ private int numVotingPeers = -1;
+
public RaftActorContextImpl(ActorRef actor, ActorContext context, String id,
ElectionTerm termInformation, long commitIndex, long lastApplied, Map<String, String> peerAddresses,
ConfigParams configParams, DataPersistenceProvider persistenceProvider, Logger logger) {
@Override
public void addToPeers(String id, String address, VotingState votingState) {
peerInfoMap.put(id, new PeerInfo(id, address, votingState));
+ numVotingPeers = -1;
}
@Override
votingMember = false;
} else {
peerInfoMap.remove(name);
+ numVotingPeers = -1;
}
}
return votingMember;
}
+ @Override
+ public boolean anyVotingPeers() {
+ if(numVotingPeers < 0) {
+ numVotingPeers = 0;
+ for(PeerInfo info: getPeers()) {
+ if(info.isVoting()) {
+ numVotingPeers++;
+ }
+ }
+ }
+
+ return numVotingPeers > 0;
+ }
+
@Override
public RaftActorBehavior getCurrentBehavior() {
return currentBehavior;