Add direct in-memory journal threshold
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / ConfigParams.java
index ed6439d8c33bceb545927fd6c2f892665b160f8a..8351374d60fe0e73bb5ca2fbfa2ea01cbd5a3f52 100644 (file)
  */
 package org.opendaylight.controller.cluster.raft;
 
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.controller.cluster.raft.policy.RaftPolicy;
 import scala.concurrent.duration.FiniteDuration;
 
 /**
- * Configuration Parameter interface for configuring the Raft consensus system
- * <p/>
- * Any component using this implementation might want to provide an implementation of
- * this interface to configure
- *
- * A default implementation will be used if none is provided.
+ * Configuration Parameter interface for configuring the Raft consensus system. Any component using this implementation
+ * might want to provide an implementation of this interface to configure. A default implementation will be used if none
+ * is provided.
  *
  * @author Kamal Rameshan
  */
 public interface ConfigParams {
+    int MEGABYTE = 1048576;
+
+    /**
+     * Returns the minimum number of entries to be present in the in-memory Raft log for a snapshot to be taken.
+     *
+     * @return the minimum number of entries.
+     */
+    long getSnapshotBatchCount();
+
+    /**
+     * Returns the percentage of total memory used in the in-memory Raft log before a snapshot should be taken.
+     * Disabled when direct threshold is enabled.
+     *
+     * @return the percentage.
+     */
+    int getSnapshotDataThresholdPercentage();
+
+    /**
+     * Returns the max size of memory used in the in-memory Raft log before a snapshot should be taken. 0 means that
+     * direct threshold is disabled and percentage is used instead.
+     *
+     * @return maximum journal size (in MiB).
+     */
+    int getSnapshotDataThreshold();
+
+    /**
+     * Returns the interval(in seconds) after which a snapshot should be taken during recovery. Negative value means
+     * do not take snapshots.
+     *
+     * @return the interval of recovery snapshot in seconds
+     */
+    int getRecoverySnapshotIntervalSeconds();
+
+    /**
+     * Returns the interval at which a heart beat message should be sent to remote followers.
+     *
+     * @return the interval as a FiniteDuration.
+     */
+    FiniteDuration getHeartBeatInterval();
+
+    /**
+     * Returns the interval after which a new election should be triggered if no leader is available.
+     *
+     * @return the interval as a FiniteDuration.
+     */
+    FiniteDuration getElectionTimeOutInterval();
+
+    /**
+     * Returns the number by which a candidate should divide the election timeout it has calculated. This serves
+     * to speed up retries when elections result in a stalemate.
+     *
+     * @return the interval as a FiniteDuration.
+     */
+    long getCandidateElectionTimeoutDivisor();
+
+    /**
+     * Returns the maximum election time variance. The election is scheduled using both the election timeout
+     * and variance.
+     *
+     * @return the election time variance.
+     */
+    int getElectionTimeVariance();
+
     /**
-     * The minimum number of entries to be present in the in-memory Raft log
-     * for a snapshot to be taken
+     * Returns the maximum size (in bytes) for the snapshot chunk sent from a Leader.
      *
-     * @return long
+     * @return the maximum size (in bytes).
      */
-    public long getSnapshotBatchCount();
+    int getSnapshotChunkSize();
 
     /**
-     * The interval at which a heart beat message will be sent to the remote
-     * RaftActor
+     * Returns the maximum number of journal log entries to batch on recovery before applying.
      *
-     * @return FiniteDuration
+     * @return the maximum number of journal log entries.
      */
-    public FiniteDuration getHeartBeatInterval();
+    int getJournalRecoveryLogBatchSize();
 
     /**
-     * The interval in which a new election would get triggered if no leader is found
+     * Returns the interval in which the leader needs to check if its isolated.
      *
-     * Normally its set to atleast twice the heart beat interval
+     * @return the interval in ms.
+     */
+    long getIsolatedCheckIntervalInMillis();
+
+    /**
+     * Returns the multiplication factor to be used to determine the shard election timeout. The election timeout
+     * is determined by multiplying the election timeout factor with the heart beat duration.
+     *
+     * @return the election timeout factor.
+     */
+    long getElectionTimeoutFactor();
+
+    /**
+     * Returns the RaftPolicy used to determine certain Raft behaviors.
      *
-     * @return FiniteDuration
+     * @return an instance of RaftPolicy, if set, or an instance of the DefaultRaftPolicy.
      */
-    public FiniteDuration getElectionTimeOutInterval();
+    @NonNull RaftPolicy getRaftPolicy();
 
     /**
-     * The maximum election time variance. The election is scheduled using both
-     * the Election Timeout and Variance
+     * Returns the PeerAddressResolver.
      *
-     * @return int
+     * @return the PeerAddressResolver instance.
      */
-    public int getElectionTimeVariance();
+    @NonNull PeerAddressResolver getPeerAddressResolver();
 
     /**
-     * The size (in bytes) of the snapshot chunk sent from Leader
+     * Returns the custom RaftPolicy class name.
+     *
+     * @return the RaftPolicy class name or null if none set.
+     */
+    String getCustomRaftPolicyImplementationClass();
+
+    /**
+     * Returns the directory in which to create temp files.
+     *
+     * @return the directory in which to create temp files.
+     */
+    @NonNull String getTempFileDirectory();
+
+    /**
+     * Returns the threshold in terms of number of bytes when streaming data before it should switch from storing in
+     * memory to buffering to a file.
+     *
+     * @return the threshold in terms of number of bytes.
+     */
+    int getFileBackedStreamingThreshold();
+
+    /**
+     * Returns the threshold in terms of number journal entries that we can lag behind a leader until we raise a
+     * 'not synced' transition.
+     *
+     * @return the threshold in terms of number of journal entries.
      */
-    public int getSnapshotChunkSize();
+    long getSyncIndexThreshold();
 }