package org.opendaylight.controller.cluster.raft.persisted;
import com.google.common.collect.ImmutableList;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.ByteArrayOutputStream;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
-import javax.annotation.Nonnull;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
import org.opendaylight.controller.cluster.raft.protobuff.client.messages.PersistentPayload;
import org.slf4j.Logger;
*
* @author Thomas Pantelis
*/
-public final class ServerConfigurationPayload extends Payload implements PersistentPayload, MigratedSerializable {
+public final class ServerConfigurationPayload extends Payload implements PersistentPayload, Serializable {
private static final class Proxy implements Externalizable {
private static final long serialVersionUID = 1L;
private List<ServerInfo> serverConfig;
+ // checkstyle flags the public modifier as redundant which really doesn't make sense since it clearly isn't
+ // redundant. It is explicitly needed for Java serialization to be able to create instances via reflection.
+ @SuppressWarnings("checkstyle:RedundantModifier")
public Proxy() {
// For Externalizable
}
out.writeObject(i.getId());
out.writeBoolean(i.isVoting());
}
- }
+ }
@Override
public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
private static final Logger LOG = LoggerFactory.getLogger(ServerConfigurationPayload.class);
private static final long serialVersionUID = 1L;
+ @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "This field is not Serializable but this class "
+ + "implements writeReplace to delegate serialization to a Proxy class and thus instances of this class "
+ + "aren't serialized. FindBugs does not recognize this.")
private final List<ServerInfo> serverConfig;
- private final boolean migrated;
private int serializedSize = -1;
- private ServerConfigurationPayload(final @Nonnull List<ServerInfo> serverConfig, boolean migrated) {
+ public ServerConfigurationPayload(final @NonNull List<ServerInfo> serverConfig) {
this.serverConfig = ImmutableList.copyOf(serverConfig);
- this.migrated = migrated;
- }
-
- public ServerConfigurationPayload(final @Nonnull List<ServerInfo> serverConfig) {
- this(serverConfig, false);
}
- @Deprecated
- public static ServerConfigurationPayload createMigrated(final @Nonnull List<ServerInfo> serverConfig) {
- return new ServerConfigurationPayload(serverConfig, true);
- }
-
- @Deprecated
- @Override
- public boolean isMigrated() {
- return migrated;
- }
-
- public @Nonnull List<ServerInfo> getServerConfig() {
+ public @NonNull List<ServerInfo> getServerConfig() {
return serverConfig;
}
return serializedSize;
}
+ @Override
+ public int hashCode() {
+ return serverConfig.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ if (obj == null) {
+ return false;
+ }
+
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+
+ ServerConfigurationPayload other = (ServerConfigurationPayload) obj;
+ return serverConfig.equals(other.serverConfig);
+ }
+
@Override
public String toString() {
return "ServerConfigurationPayload [serverConfig=" + serverConfig + "]";
}
- @Override
- public Object writeReplace() {
+ private Object writeReplace() {
return new Proxy(this);
}
}