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%2FReplicatedLog.java;h=8388eaf7436f251c63aa277024bf886f803153cb;hp=29d6a4557db8dde765accbfe767b9b4f8debd290;hb=f9a9cd1ea40d2477ccb16b03c71a87595226595a;hpb=3019650e87a3fc05f80e8f6359e01ca5f1c5f197 diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/ReplicatedLog.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/ReplicatedLog.java index 29d6a4557d..8388eaf743 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/ReplicatedLog.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/ReplicatedLog.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.cluster.raft; +import akka.japi.Procedure; import java.util.List; /** @@ -44,18 +45,26 @@ public interface ReplicatedLog { long lastTerm(); /** - * Remove all the entries from the logs >= index + * To be called when we need to remove entries from the in-memory log. + * This method will remove all entries >= index. This method should be used + * during recovery to appropriately trim the log based on persisted + * information * * @param index the index of the log entry + * @return the adjusted index of the first log entry removed or -1 if log entry not found. */ - void removeFrom(long index); + long removeFrom(long index); /** - * Remove all entries starting from the specified entry and persist the - * information to disk + * To be called when we need to remove entries from the in-memory log and we + * need that information persisted to disk. This method will remove all + * entries >= index. + *

+ * The persisted information would then be used during recovery to properly + * reconstruct the state of the in-memory replicated log * - * @param index + * @param index the index of the log entry */ void removeFromAndPersist(long index); @@ -65,18 +74,32 @@ public interface ReplicatedLog { */ void append(ReplicatedLogEntry replicatedLogEntry); + /** + * Optimization method to increase the capacity of the journal log prior to appending entries. + * + * @param amount the amount to increase by + */ + void increaseJournalLogCapacity(int amount); + /** * * @param replicatedLogEntry */ void appendAndPersist(final ReplicatedLogEntry replicatedLogEntry); + void appendAndPersist(ReplicatedLogEntry replicatedLogEntry, Procedure callback); + /** * * @param index the index of the log entry */ List getFrom(long index); + /** + * + * @param index the index of the log entry + */ + List getFrom(long index, int max); /** * @@ -101,13 +124,6 @@ public interface ReplicatedLog { */ boolean isInSnapshot(long index); - /** - * Get the snapshot - * - * @return an object representing the snapshot if it exists. null otherwise - */ - Object getSnapshot(); - /** * Get the index of the snapshot * @@ -122,4 +138,47 @@ public interface ReplicatedLog { * otherwise */ long getSnapshotTerm(); + + /** + * sets the snapshot index in the replicated log + * @param snapshotIndex + */ + void setSnapshotIndex(long snapshotIndex); + + /** + * sets snapshot term + * @param snapshotTerm + */ + void setSnapshotTerm(long snapshotTerm); + + /** + * Clears the journal entries with startIndex(inclusive) and endIndex (exclusive) + * @param startIndex + * @param endIndex + */ + void clear(int startIndex, int endIndex); + + /** + * Handles all the bookkeeping in order to perform a rollback in the + * event of SaveSnapshotFailure + * @param snapshotCapturedIndex + * @param snapshotCapturedTerm + */ + void snapshotPreCommit(long snapshotCapturedIndex, long snapshotCapturedTerm); + + /** + * Sets the Replicated log to state after snapshot success. + */ + void snapshotCommit(); + + /** + * Restores the replicated log to a state in the event of a save snapshot failure + */ + void snapshotRollback(); + + /** + * Size of the data in the log (in bytes) + */ + int dataSize(); + }