*/
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;
* 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;
}
@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 + "]";
+ }
}
}