Fix incorrect last history update
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / ServerConfigurationPayload.java
index db1f193cba360fd389a683d435a9fa8a6ff61698..865594715d4dc2041859076e36f0722cdf1d61ff 100644 (file)
@@ -7,15 +7,16 @@
  */
 package org.opendaylight.controller.cluster.raft;
 
-import com.google.protobuf.GeneratedMessage.GeneratedExtension;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.util.List;
-import java.util.Map;
+import javax.annotation.Nonnull;
 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
-import org.opendaylight.controller.protobuff.messages.cluster.raft.AppendEntriesMessages;
+import org.opendaylight.controller.cluster.raft.protobuff.client.messages.PersistentPayload;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -23,38 +24,34 @@ import org.slf4j.LoggerFactory;
  * Payload data for server configuration log entries.
  *
  * @author Thomas Pantelis
+ *
+ * @deprecated Use {@link org.opendaylight.controller.cluster.raft.persisted.ServerConfigurationPayload} instead.
  */
-public class ServerConfigurationPayload extends Payload implements Serializable {
+@Deprecated
+public class ServerConfigurationPayload extends Payload implements PersistentPayload, Serializable {
     private static final long serialVersionUID = 1L;
 
     private static final Logger LOG = LoggerFactory.getLogger(ServerConfigurationPayload.class);
 
-    private final List<String> newServerConfig;
-    private final List<String> oldServerConfig;
+    private final List<ServerInfo> serverConfig;
     private transient int serializedSize = -1;
 
-    public ServerConfigurationPayload(List<String> newServerConfig, List<String> oldServerConfig) {
-        this.newServerConfig = newServerConfig;
-        this.oldServerConfig = oldServerConfig;
-    }
-
-    public List<String> getNewServerConfig() {
-        return newServerConfig;
+    public ServerConfigurationPayload(@Nonnull List<ServerInfo> serverConfig) {
+        this.serverConfig = Preconditions.checkNotNull(serverConfig);
     }
 
-
-    public List<String> getOldServerConfig() {
-        return oldServerConfig;
+    @Nonnull
+    public List<ServerInfo> getServerConfig() {
+        return serverConfig;
     }
 
     @Override
     public int size() {
-        if(serializedSize < 0) {
+        if (serializedSize < 0) {
             try {
                 ByteArrayOutputStream bos = new ByteArrayOutputStream();
                 ObjectOutputStream out = new ObjectOutputStream(bos);
-                out.writeObject(newServerConfig);
-                out.writeObject(oldServerConfig);
+                out.writeObject(serverConfig);
                 out.close();
 
                 serializedSize = bos.toByteArray().length;
@@ -68,21 +65,58 @@ public class ServerConfigurationPayload extends Payload implements Serializable
     }
 
     @Override
-    @Deprecated
-    @SuppressWarnings("rawtypes")
-    public <T> Map<GeneratedExtension, T> encode() {
-        return null;
+    public String toString() {
+        return "ServerConfigurationPayload [serverConfig=" + serverConfig + "]";
     }
 
-    @Override
-    @Deprecated
-    public Payload decode(AppendEntriesMessages.AppendEntries.ReplicatedLogEntry.Payload payload) {
-        return null;
+    private Object readResolve() {
+        return org.opendaylight.controller.cluster.raft.persisted.ServerConfigurationPayload.createMigrated(
+            Lists.transform(serverConfig, t -> new org.opendaylight.controller.cluster.raft.persisted.ServerInfo(
+                t.getId(), t.isVoting)));
     }
 
-    @Override
-    public String toString() {
-        return "ServerConfigurationPayload [newServerConfig=" + newServerConfig + ", oldServerConfig="
-                + oldServerConfig + "]";
+    public static class ServerInfo implements Serializable {
+        private static final long serialVersionUID = 1L;
+
+        private final String id;
+        private final boolean isVoting;
+
+        public ServerInfo(@Nonnull String id, boolean isVoting) {
+            this.id = Preconditions.checkNotNull(id);
+            this.isVoting = isVoting;
+        }
+
+        @Nonnull
+        public String getId() {
+            return id;
+        }
+
+        public boolean isVoting() {
+            return isVoting;
+        }
+
+        @Override
+        public int hashCode() {
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + Boolean.hashCode(isVoting);
+            result = prime * result + id.hashCode();
+            return result;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj == null || getClass() != obj.getClass()) {
+                return false;
+            }
+
+            ServerInfo other = (ServerInfo) obj;
+            return isVoting == other.isVoting && id.equals(other.id);
+        }
+
+        @Override
+        public String toString() {
+            return "ServerInfo [id=" + id + ", isVoting=" + isVoting + "]";
+        }
     }
 }