Add voting state to ServerConfigurationPayload
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / RaftActorServerConfigurationSupport.java
index 7c37b2a68daa62768407bfd66365a2b0509f1b8e..aba94f653efdc1bc455d1a66b1ac88f48e8fb0f9 100644 (file)
@@ -12,12 +12,13 @@ import akka.actor.ActorSelection;
 import akka.actor.Cancellable;
 import com.google.common.base.Preconditions;
 import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Queue;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
+import org.opendaylight.controller.cluster.raft.ServerConfigurationPayload.ServerInfo;
 import org.opendaylight.controller.cluster.raft.base.messages.ApplyState;
 import org.opendaylight.controller.cluster.raft.behaviors.AbstractLeader;
 import org.opendaylight.controller.cluster.raft.messages.AddServer;
@@ -171,12 +172,17 @@ class RaftActorServerConfigurationSupport {
         }
 
         protected void persistNewServerConfiguration(RaftActor raftActor, ServerOperationContext<?> operationContext){
-            List <String> newConfig = new ArrayList<String>(raftContext.getPeerIds());
-            newConfig.add(raftContext.getId());
+            Collection<PeerInfo> peers = raftContext.getPeers();
+            List<ServerInfo> newConfig = new ArrayList<>(peers.size() + 1);
+            for(PeerInfo peer: peers) {
+                newConfig.add(new ServerInfo(peer.getId(), peer.isVoting()));
+            }
+
+            newConfig.add(new ServerInfo(raftContext.getId(), true));
 
             LOG.debug("{}: New server configuration : {}", raftContext.getId(), newConfig);
 
-            ServerConfigurationPayload payload = new ServerConfigurationPayload(newConfig, Collections.<String>emptyList());
+            ServerConfigurationPayload payload = new ServerConfigurationPayload(newConfig);
 
             raftActor.persistData(operationContext.getClientRequestor(), operationContext.getContextId(), payload);