X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FReplicatedLog.java;h=82d0839bee772bd8efba88a8d1392ab1d336ff1c;hb=4f295e3104c4b0c3fccc4f7ac8010dbddf613ef7;hp=f12bc9af7357501a9670d72f3ddf45edbfd07def;hpb=a0c5aba42aa36337ff1c6760175918b786897c9e;p=controller.git 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 f12bc9af73..82d0839bee 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,8 @@ package org.opendaylight.controller.cluster.raft; +import java.util.List; + /** * Represents the ReplicatedLog that needs to be kept in sync by the RaftActor */ @@ -15,8 +17,9 @@ public interface ReplicatedLog { /** * Get a replicated log entry at the specified index * - * @param index - * @return + * @param index the index of the log entry + * @return the ReplicatedLogEntry at index. null if index less than 0 or + * greater than the size of the in-memory journal. */ ReplicatedLogEntry get(long index); @@ -29,15 +32,149 @@ public interface ReplicatedLog { ReplicatedLogEntry last(); /** - * Remove all the entries from the logs >= index * - * @param index + * @return + */ + long lastIndex(); + + /** + * + * @return + */ + long lastTerm(); + + /** + * 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 */ void removeFrom(long index); + + /** + * 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 the index of the log entry + */ + void removeFromAndPersist(long index); + /** * Append an entry to the log * @param replicatedLogEntry */ 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); + + /** + * + * @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); + + /** + * + * @return + */ + long size(); + + /** + * Checks if the entry at the specified index is present or not + * + * @param index the index of the log entry + * @return true if the entry is present in the in-memory journal + */ + boolean isPresent(long index); + + /** + * Checks if the entry is present in a snapshot + * + * @param index the index of the log entry + * @return true if the entry is in the snapshot. false if the entry is not + * in the snapshot even if the entry may be present in the replicated log + */ + boolean isInSnapshot(long index); + + /** + * Get the index of the snapshot + * + * @return the index from which the snapshot was created. -1 otherwise. + */ + long getSnapshotIndex(); + + /** + * Get the term of the snapshot + * + * @return the term of the index from which the snapshot was created. -1 + * 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(); + }