X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FSnapshot.java;h=2677baff6da40d1e2caba4a7b257594e5233bb3b;hp=77bf10370184894d6a510990e08fb1a8bc785a84;hb=97542f208267cb5392fc8c8d9baf6c1d3ee4ae32;hpb=71ef4097b2cb06531766c053c3486745e3a5b6ee diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/Snapshot.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/Snapshot.java index 77bf103701..2677baff6d 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/Snapshot.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/Snapshot.java @@ -7,38 +7,65 @@ */ package org.opendaylight.controller.cluster.raft; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.Serializable; import java.util.List; +import org.opendaylight.controller.cluster.raft.persisted.ServerConfigurationPayload; - +/** + * Represents a snapshot of the raft data. + * + * @author Moiz Raja + * @author Thomas Pantelis + */ public class Snapshot implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = -8298574936724056236L; + private final byte[] state; private final List unAppliedEntries; private final long lastIndex; private final long lastTerm; private final long lastAppliedIndex; private final long lastAppliedTerm; + private final long electionTerm; + private final String electionVotedFor; + private final ServerConfigurationPayload serverConfig; - private Snapshot(byte[] state, - List unAppliedEntries, long lastIndex, - long lastTerm, long lastAppliedIndex, long lastAppliedTerm) { + private Snapshot(byte[] state, List unAppliedEntries, long lastIndex, long lastTerm, + long lastAppliedIndex, long lastAppliedTerm, long electionTerm, String electionVotedFor, + ServerConfigurationPayload serverConfig) { this.state = state; this.unAppliedEntries = unAppliedEntries; this.lastIndex = lastIndex; this.lastTerm = lastTerm; this.lastAppliedIndex = lastAppliedIndex; this.lastAppliedTerm = lastAppliedTerm; + this.electionTerm = electionTerm; + this.electionVotedFor = electionVotedFor; + this.serverConfig = serverConfig; } + public static Snapshot create(byte[] state, List entries, long lastIndex, long lastTerm, + long lastAppliedIndex, long lastAppliedTerm) { + return new Snapshot(state, entries, lastIndex, lastTerm, lastAppliedIndex, lastAppliedTerm, -1, null, null); + } + + public static Snapshot create(byte[] state, List entries, long lastIndex, long lastTerm, + long lastAppliedIndex, long lastAppliedTerm, long electionTerm, String electionVotedFor) { + return new Snapshot(state, entries, lastIndex, lastTerm, lastAppliedIndex, lastAppliedTerm, + electionTerm, electionVotedFor, null); + } - public static Snapshot create(byte[] state, - List entries, long lastIndex, long lastTerm, - long lastAppliedIndex, long lastAppliedTerm) { - return new Snapshot(state, entries, lastIndex, lastTerm, - lastAppliedIndex, lastAppliedTerm); + public static Snapshot create(byte[] state, List entries, long lastIndex, long lastTerm, + long lastAppliedIndex, long lastAppliedTerm, long electionTerm, String electionVotedFor, + ServerConfigurationPayload serverConfig) { + return new Snapshot(state, entries, lastIndex, lastTerm, lastAppliedIndex, lastAppliedTerm, + electionTerm, electionVotedFor, serverConfig); } + @SuppressFBWarnings(value = "EI_EXPOSE_REP", justification = "Exposes a mutable object stored in a field but " + + "this is OK since this class is merely a DTO and does not process the byte[] internally. " + + "Also it would be inefficient to create a return copy as the byte[] could be large.") public byte[] getState() { return state; } @@ -63,15 +90,24 @@ public class Snapshot implements Serializable { return this.lastIndex; } - public String getLogMessage() { - StringBuilder sb = new StringBuilder(); - return sb.append("Snapshot={") - .append("lastTerm:" + this.getLastTerm() + ", ") - .append("lastIndex:" + this.getLastIndex() + ", ") - .append("LastAppliedIndex:" + this.getLastAppliedIndex() + ", ") - .append("LastAppliedTerm:" + this.getLastAppliedTerm() + ", ") - .append("UnAppliedEntries size:" + this.getUnAppliedEntries().size() + "}") - .toString(); + public long getElectionTerm() { + return electionTerm; + } + + + public String getElectionVotedFor() { + return electionVotedFor; + } + + public ServerConfigurationPayload getServerConfiguration() { + return serverConfig; + } + @Override + public String toString() { + return "Snapshot [lastIndex=" + lastIndex + ", lastTerm=" + lastTerm + ", lastAppliedIndex=" + lastAppliedIndex + + ", lastAppliedTerm=" + lastAppliedTerm + ", unAppliedEntries size=" + unAppliedEntries.size() + + ", state size=" + state.length + ", electionTerm=" + electionTerm + ", electionVotedFor=" + + electionVotedFor + ", ServerConfigPayload=" + serverConfig + "]"; } }