Add ServerConfigPayload to InstallSnapshot message
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / messages / InstallSnapshot.java
index f2f9cd39d81e9d5dd5d8d342f3cc7f018f7b0973..2c141ea5817b94bc864660f9880cdb19fc20b0e3 100644 (file)
@@ -15,6 +15,7 @@ import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import org.opendaylight.controller.cluster.raft.RaftVersions;
+import org.opendaylight.controller.cluster.raft.ServerConfigurationPayload;
 import org.opendaylight.controller.protobuff.messages.cluster.raft.InstallSnapshotMessages;
 
 public class InstallSnapshot extends AbstractRaftRPC implements Externalizable {
@@ -28,6 +29,7 @@ public class InstallSnapshot extends AbstractRaftRPC implements Externalizable {
     private int chunkIndex;
     private int totalChunks;
     private Optional<Integer> lastChunkHashCode;
+    private Optional<ServerConfigurationPayload> serverConfig;
 
     /**
      * Empty constructor to satisfy Externalizable.
@@ -35,8 +37,8 @@ public class InstallSnapshot extends AbstractRaftRPC implements Externalizable {
     public InstallSnapshot() {
     }
 
-    public InstallSnapshot(long term, String leaderId, long lastIncludedIndex,
-        long lastIncludedTerm, byte[] data, int chunkIndex, int totalChunks, Optional<Integer> lastChunkHashCode) {
+    public InstallSnapshot(long term, String leaderId, long lastIncludedIndex, long lastIncludedTerm, byte[] data,
+            int chunkIndex, int totalChunks, Optional<Integer> lastChunkHashCode, Optional<ServerConfigurationPayload> serverConfig) {
         super(term);
         this.leaderId = leaderId;
         this.lastIncludedIndex = lastIncludedIndex;
@@ -45,11 +47,13 @@ public class InstallSnapshot extends AbstractRaftRPC implements Externalizable {
         this.chunkIndex = chunkIndex;
         this.totalChunks = totalChunks;
         this.lastChunkHashCode = lastChunkHashCode;
+        this.serverConfig = serverConfig;
     }
 
     public InstallSnapshot(long term, String leaderId, long lastIncludedIndex,
                            long lastIncludedTerm, byte[] data, int chunkIndex, int totalChunks) {
-        this(term, leaderId, lastIncludedIndex, lastIncludedTerm, data, chunkIndex, totalChunks, Optional.<Integer>absent());
+        this(term, leaderId, lastIncludedIndex, lastIncludedTerm, data, chunkIndex, totalChunks,
+                Optional.<Integer>absent(), Optional.<ServerConfigurationPayload>absent());
     }
 
     public String getLeaderId() {
@@ -80,6 +84,10 @@ public class InstallSnapshot extends AbstractRaftRPC implements Externalizable {
         return lastChunkHashCode;
     }
 
+    public Optional<ServerConfigurationPayload> getServerConfig() {
+        return serverConfig;
+    }
+
     @Override
     public void writeExternal(ObjectOutput out) throws IOException {
         out.writeShort(RaftVersions.CURRENT_VERSION);
@@ -95,6 +103,11 @@ public class InstallSnapshot extends AbstractRaftRPC implements Externalizable {
             out.writeInt(lastChunkHashCode.get().intValue());
         }
 
+        out.writeByte(serverConfig.isPresent() ? 1 : 0);
+        if(serverConfig.isPresent()) {
+            out.writeObject(serverConfig.get());
+        }
+
         out.writeObject(data);
     }
 
@@ -114,6 +127,12 @@ public class InstallSnapshot extends AbstractRaftRPC implements Externalizable {
             lastChunkHashCode = Optional.of(in.readInt());
         }
 
+        serverConfig = Optional.absent();
+        boolean serverConfigPresent = in.readByte() == 1;
+        if(serverConfigPresent) {
+            serverConfig = Optional.of((ServerConfigurationPayload)in.readObject());
+        }
+
         data = (byte[])in.readObject();
     }
 
@@ -141,7 +160,8 @@ public class InstallSnapshot extends AbstractRaftRPC implements Externalizable {
     public String toString() {
         return "InstallSnapshot [term=" + getTerm() + ", leaderId=" + leaderId + ", lastIncludedIndex="
                 + lastIncludedIndex + ", lastIncludedTerm=" + lastIncludedTerm + ", datasize=" + data.length
-                + ", Chunk=" + chunkIndex + "/" + totalChunks + ", lastChunkHashCode=" + lastChunkHashCode + "]";
+                + ", Chunk=" + chunkIndex + "/" + totalChunks + ", lastChunkHashCode=" + lastChunkHashCode
+                + ", serverConfig=" + serverConfig.orNull() + "]";
     }
 
     public static InstallSnapshot fromSerializable (Object o) {
@@ -159,7 +179,8 @@ public class InstallSnapshot extends AbstractRaftRPC implements Externalizable {
             InstallSnapshot installSnapshot = new InstallSnapshot(from.getTerm(),
                     from.getLeaderId(), from.getLastIncludedIndex(),
                     from.getLastIncludedTerm(), from.getData().toByteArray(),
-                    from.getChunkIndex(), from.getTotalChunks(), lastChunkHashCode);
+                    from.getChunkIndex(), from.getTotalChunks(), lastChunkHashCode,
+                    Optional.<ServerConfigurationPayload>absent());
 
             return installSnapshot;
         }