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=1a0b38f778f3a5d07f01147e4ce8b3836ee197fd;hp=cd70812d9d38d9c1f112a3c9978dfe4ee9d31e8c;hb=7b66583e80a8850bcf91c325ee6f6dcfa5036f5f;hpb=a81d98f692b80c45bce3fe6a87e731abfb012a9f 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 cd70812d9d..1a0b38f778 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 @@ -5,13 +5,12 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.cluster.raft; -import akka.japi.Procedure; import java.util.List; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; +import java.util.function.Consumer; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; /** * Represents the ReplicatedLog that needs to be kept in sync by the RaftActor. @@ -26,16 +25,14 @@ public interface ReplicatedLog { * @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); + @Nullable ReplicatedLogEntry get(long index); /** * Return the last replicated log entry in the log or null of not found. * * @return the last replicated log entry in the log or null of not found. */ - @Nullable - ReplicatedLogEntry last(); + @Nullable ReplicatedLogEntry last(); /** * Return the index of the last entry in the log or -1 if the log is empty. @@ -91,16 +88,15 @@ public interface ReplicatedLog { * Appends an entry to the in-memory log and persists it as well. * * @param replicatedLogEntry the entry to append + * @param callback the callback to be notified when persistence is complete (optional). + * @param doAsync if true, the persistent actor can receive subsequent messages to process in between the persist + * call and the execution of the associated callback. If false, subsequent messages are stashed and get + * delivered after persistence is complete and the associated callback is executed. In either case the + * callback is guaranteed to execute in the context of the actor associated with this log. + * @return true if the entry was successfully appended, false otherwise. */ - void appendAndPersist(final ReplicatedLogEntry replicatedLogEntry); - - /** - * Appends an entry to the in-memory log and persists it as well. - * - * @param replicatedLogEntry the entry to append - * @param callback the Procedure to be notified when persistence is complete. - */ - void appendAndPersist(ReplicatedLogEntry replicatedLogEntry, Procedure callback); + boolean appendAndPersist(@NonNull ReplicatedLogEntry replicatedLogEntry, + @Nullable Consumer callback, boolean doAsync); /** * Returns a list of log entries starting from the given index to the end of the log. @@ -108,7 +104,7 @@ public interface ReplicatedLog { * @param index the index of the first log entry to get. * @return the List of entries */ - @Nonnull 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 @@ -119,7 +115,7 @@ public interface ReplicatedLog { * @param maxDataSize the maximum accumulated size of the log entries to get * @return the List of entries meeting the criteria. */ - @Nonnull List getFrom(long index, int maxEntries, long maxDataSize); + @NonNull List getFrom(long index, int maxEntries, long maxDataSize); /** * Returns the number of entries in the journal. @@ -207,9 +203,17 @@ public interface ReplicatedLog { int dataSize(); /** - * Determines if a snapshot need to be captured based on the count/memory consumed. + * Determines if a snapshot needs to be captured based on the count/memory consumed and initiates the capture. * * @param replicatedLogEntry the last log entry. */ void captureSnapshotIfReady(ReplicatedLogEntry replicatedLogEntry); + + /** + * Determines if a snapshot should be captured based on the count/memory consumed. + * + * @param logIndex the log index to use to determine if the log count has exceeded the threshold + * @return true if a snapshot should be captured, false otherwise + */ + boolean shouldCaptureSnapshot(long logIndex); }