*
* @author Thomas Pantelis
*/
+// Not final for mocking
public class Snapshot implements Serializable {
/**
* @author Thomas Pantelis
*/
public interface State extends Serializable {
+ /**
+ * Indicate whether the snapshot requires migration, i.e. a new snapshot should be created after recovery.
+ * Default implementation returns false, i.e. do not re-snapshot.
+ *
+ * @return True if complete recovery based upon this snapshot should trigger a new snapshot.
+ */
+ default boolean needsMigration() {
+ return false;
+ }
}
private static final class Proxy implements Externalizable {
private final String electionVotedFor;
private final ServerConfigurationPayload serverConfig;
- private Snapshot(State state, List<ReplicatedLogEntry> unAppliedEntries, long lastIndex, long lastTerm,
- long lastAppliedIndex, long lastAppliedTerm, long electionTerm, String electionVotedFor,
- ServerConfigurationPayload serverConfig) {
+ Snapshot(final State state, final List<ReplicatedLogEntry> unAppliedEntries, final long lastIndex,
+ final long lastTerm, final long lastAppliedIndex, final long lastAppliedTerm, final long electionTerm,
+ final String electionVotedFor, final ServerConfigurationPayload serverConfig) {
this.state = state;
this.unAppliedEntries = unAppliedEntries;
this.lastIndex = lastIndex;
this.serverConfig = serverConfig;
}
- public static Snapshot create(State state, List<ReplicatedLogEntry> entries, long lastIndex, long lastTerm,
- long lastAppliedIndex, long lastAppliedTerm, long electionTerm, String electionVotedFor,
- ServerConfigurationPayload serverConfig) {
+ public static Snapshot create(final State state, final List<ReplicatedLogEntry> entries, final long lastIndex,
+ final long lastTerm, final long lastAppliedIndex, final long lastAppliedTerm, final long electionTerm,
+ final String electionVotedFor, final ServerConfigurationPayload serverConfig) {
return new Snapshot(state, entries, lastIndex, lastTerm, lastAppliedIndex, lastAppliedTerm,
electionTerm, electionVotedFor, serverConfig);
}
return serverConfig;
}
- @SuppressWarnings("static-method")
private Object writeReplace() {
return new Proxy(this);
}