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=8882e6077db69d22bcc57fcf12dd4a02a81a4967;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..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,36 +8,185 @@ package org.opendaylight.controller.cluster.raft; +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 - * @return + * @param index the index of the log entry + * @return the ReplicatedLogEntry if found, otherwise null if the adjusted index less than 0 or + * greater than the size of the in-memory journal. + */ + @Nullable ReplicatedLogEntry get(long index); + + /** + * Return the last replicated log entry in the log or null of not found. */ - ReplicatedLogEntry get(long index); + @Nullable ReplicatedLogEntry last(); + /** + * Return the index of the last entry in the log or -1 if the log is empty. + */ + long lastIndex(); + + /** + * Return the term of the last entry in the log or -1 if the log is empty. + */ + long lastTerm(); /** - * Get the last replicated log entry + * Removes entries from the in-memory log starting at the given index. * - * @return + * @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. */ - ReplicatedLogEntry last(); + long removeFrom(long index); /** - * Remove all the entries from the logs >= 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
+ * @param index the index of the first log entry to remove
*/
- void removeFrom(long index);
+ 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);
+
+ /**
+ * 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);
+
+ /**
+ * Appends an entry to the in-memory log and persists it as well.
+ *
+ * @param replicatedLogEntry the entry to append
+ */
+ void appendAndPersist(final ReplicatedLogEntry replicatedLogEntry);
+
+ void appendAndPersist(ReplicatedLogEntry replicatedLogEntry, Procedure