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=ffa4cb117231f3f603e2cd8a51db3853fd9b2fe8;hb=3676d1686706dbee6656e86a23c4bdb516d5267b;hp=85893333c2892eadf43e9aacc374f574c1b4a03a;hpb=b3e553ce5b3d3e972cbe19465ab7af2fcb39934c;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 85893333c2..ffa4cb1172 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,69 +8,63 @@ package org.opendaylight.controller.cluster.raft; -import com.google.protobuf.ByteString; - +import akka.japi.Procedure; import java.util.List; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; /** * Represents the ReplicatedLog that needs to be kept in sync by the RaftActor */ public interface ReplicatedLog { + long NO_MAX_SIZE = -1; + /** - * Get a replicated log entry at the specified index + * Return the replicated log entry at the specified index. * * @param index the index of the log entry - * @return the ReplicatedLogEntry at index. null if index less than 0 or + * @return the ReplicatedLogEntry if found, otherwise null if the adjusted index less than 0 or * greater than the size of the in-memory journal. */ - ReplicatedLogEntry get(long index); - + @Nullable ReplicatedLogEntry get(long index); /** - * Get the last replicated log entry - * - * @return + * Return the last replicated log entry in the log or null of not found. */ - ReplicatedLogEntry last(); + @Nullable ReplicatedLogEntry last(); /** - * - * @return + * Return the index of the last entry in the log or -1 if the log is empty. */ long lastIndex(); /** - * - * @return + * Return the term of the last entry in the log or -1 if the log is empty. */ 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 + * Removes entries from the in-memory log starting at the given index. * - * @param index the index of the log entry + * @param index the index of the first log entry to remove + * @return the adjusted index of the first log entry removed or -1 if the log entry is not found. */ - void removeFrom(long index); - + long 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. + * Removes entries from the in-memory log a nd the persisted log starting at the given 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 + * @param index the index of the first log entry to remove */ void removeFromAndPersist(long index); /** - * Append an entry to the log - * @param replicatedLogEntry + * Appends an entry to the log. + * + * @param replicatedLogEntry the entry to append */ void append(ReplicatedLogEntry replicatedLogEntry); @@ -82,26 +76,36 @@ public interface ReplicatedLog { void increaseJournalLogCapacity(int amount); /** + * Appends an entry to the in-memory log and persists it as well. * - * @param replicatedLogEntry + * @param replicatedLogEntry the entry to append */ void appendAndPersist(final ReplicatedLogEntry replicatedLogEntry); + void appendAndPersist(ReplicatedLogEntry replicatedLogEntry, Procedure callback); + /** + * Returns a list of log entries starting from the given index to the end of the log. * - * @param index the index of the log entry + * @param index the index of the first log entry to get. + * @return the List of entries */ - List getFrom(long index); + @Nonnull List getFrom(long index); /** + * Returns a list of log entries starting from the given index up to the given maximum of entries or + * the given maximum accumulated size, whichever comes first. * - * @param index the index of the log entry + * @param index the index of the first log entry to get + * @param maxEntries the maximum number of entries to get + * @param maxDataSize the maximum accumulated size of the log entries to get + * @return the List of entries meeting the criteria. */ - List getFrom(long index, int max); + @Nonnull List getFrom(long index, int maxEntries, long maxDataSize); /** * - * @return + * @return the number of entries in the journal */ long size(); @@ -122,13 +126,6 @@ public interface ReplicatedLog { */ boolean isInSnapshot(long index); - /** - * Get the snapshot - * - * @return an object representing the snapshot if it exists. null otherwise - */ - ByteString getSnapshot(); - /** * Get the index of the snapshot * @@ -154,38 +151,42 @@ public interface ReplicatedLog { * sets snapshot term * @param snapshotTerm */ - public void setSnapshotTerm(long snapshotTerm); - - /** - * sets the snapshot in bytes - * @param snapshot - */ - public void setSnapshot(ByteString snapshot); + void setSnapshotTerm(long snapshotTerm); /** * Clears the journal entries with startIndex(inclusive) and endIndex (exclusive) * @param startIndex * @param endIndex */ - public void clear(int startIndex, int endIndex); + void clear(int startIndex, int endIndex); /** * Handles all the bookkeeping in order to perform a rollback in the * event of SaveSnapshotFailure - * @param snapshot * @param snapshotCapturedIndex * @param snapshotCapturedTerm */ - public void snapshotPreCommit(ByteString snapshot, - long snapshotCapturedIndex, long snapshotCapturedTerm); + void snapshotPreCommit(long snapshotCapturedIndex, long snapshotCapturedTerm); /** * Sets the Replicated log to state after snapshot success. */ - public void snapshotCommit(); + void snapshotCommit(); /** * Restores the replicated log to a state in the event of a save snapshot failure */ - public void snapshotRollback(); + void snapshotRollback(); + + /** + * Size of the data in the log (in bytes) + */ + int dataSize(); + + /** + * We decide if snapshot need to be captured based on the count/memory consumed. + * @param replicatedLogEntry + */ + void captureSnapshotIfReady(ReplicatedLogEntry replicatedLogEntry); + }