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%2FSnapshotState.java;h=acb6e01230ecd64b8b6625f3f1c54eae227bd629;hp=9949211c63c416d69fb6a97ba6d6ae6bc823c086;hb=73ab61a037dd2489600acbc1eaf6f9ee549c204a;hpb=9fb1df14f2dc885fee1dce821b753cc99af6e54f diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/SnapshotState.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/SnapshotState.java index 9949211c63..acb6e01230 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/SnapshotState.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/SnapshotState.java @@ -8,62 +8,87 @@ package org.opendaylight.controller.cluster.raft; -import org.opendaylight.controller.cluster.raft.behaviors.RaftActorBehavior; +import java.io.OutputStream; +import java.util.Optional; +import org.opendaylight.controller.cluster.raft.base.messages.ApplySnapshot; +import org.opendaylight.controller.cluster.raft.persisted.Snapshot; +/** + * Interface for a snapshot phase state. + * + * @author Moiz Raja + * @author Thomas Pantelis + */ public interface SnapshotState { /** - * Should return true when a snapshot is being captured - * @return + * Returns whether or not a capture is in progress. + * + * @return true when a snapshot is being captured, false otherwise */ boolean isCapturing(); /** - * Initiate capture snapshot + * Initiates a capture snapshot. * * @param lastLogEntry the last entry in the replicated log * @param replicatedToAllIndex the current replicatedToAllIndex - * * @return true if capture was started */ boolean capture(ReplicatedLogEntry lastLogEntry, long replicatedToAllIndex); /** - * Initiate capture snapshot for the purposing of installing that snapshot - * - * @param lastLogEntry - * @param replicatedToAllIndex - * @param targetFollower + * Initiates a capture snapshot for the purposing of installing the snapshot on a follower. * + * @param lastLogEntry the last entry in the replicated log + * @param replicatedToAllIndex the current replicatedToAllIndex + * @param targetFollower the id of the follower on which to install * @return true if capture was started */ boolean captureToInstall(ReplicatedLogEntry lastLogEntry, long replicatedToAllIndex, String targetFollower); /** - * Persist the snapshot + * Initiates a capture snapshot, while enforcing trimming of the log up to lastAppliedIndex. + * @param lastLogEntry the last entry in the replicated log + * @param replicatedToAllIndex the current replicatedToAllIndex + * @return true if capture was started + */ + boolean captureWithForcedTrim(ReplicatedLogEntry lastLogEntry, long replicatedToAllIndex); + + /** + * Applies a snapshot on a follower that was installed by the leader. + * + * @param snapshot the Snapshot to apply. + */ + void apply(ApplySnapshot snapshot); + + /** + * Persists a snapshot. * - * @param snapshotBytes - * @param currentBehavior - * @param totalMemory + * @param snapshotState the snapshot State + * @param installSnapshotStream Optional OutputStream that is present if the snapshot is to also be installed + * on a follower. + * @param totalMemory the total memory threshold */ - void persist(byte[] snapshotBytes, RaftActorBehavior currentBehavior, long totalMemory); + void persist(Snapshot.State snapshotState, Optional installSnapshotStream, long totalMemory); /** - * Commit the snapshot by trimming the log + * Commit the snapshot by trimming the log. * - * @param sequenceNumber + * @param sequenceNumber the sequence number of the persisted snapshot + * @param timeStamp the time stamp of the persisted snapshot */ - void commit(long sequenceNumber); + void commit(long sequenceNumber, long timeStamp); /** - * Rollback the snapshot + * Rolls back the snapshot on failure. */ void rollback(); /** - * Trim the log + * Trims the in-memory log. * - * @param desiredTrimIndex + * @param desiredTrimIndex the desired index to trim from * @return the actual trim index */ - long trimLog(long desiredTrimIndex, RaftActorBehavior currentBehavior); + long trimLog(long desiredTrimIndex); }