*/
package org.opendaylight.controller.cluster.raft;
+import javax.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/>
+ *
+ * <p>
* Any component using this implementation might want to provide an implementation of
* this interface to configure
*
+ * <p>
* A default implementation will be used if none is provided.
*
* @author Kamal Rameshan
*/
public interface ConfigParams {
+ int MEGABYTE = 1048576;
+
/**
- * The minimum number of entries to be present in the in-memory Raft log
- * for a snapshot to be taken
+ * Returns the minimum number of entries to be present in the in-memory Raft log for a snapshot to be taken.
*
- * @return long
+ * @return the minimum number of entries.
*/
long getSnapshotBatchCount();
/**
- * The percentage of total memory in the in-memory Raft log before a snapshot
- * is to be taken
+ * Returns the percentage of total memory used in the in-memory Raft log before a snapshot should be taken.
*
- * @return int
+ * @return the percentage.
*/
int getSnapshotDataThresholdPercentage();
/**
- * The interval at which a heart beat message will be sent to the remote
- * RaftActor
+ * Returns the interval at which a heart beat message should be sent to remote followers.
*
- * @return FiniteDuration
+ * @return the interval as a FiniteDuration.
*/
FiniteDuration getHeartBeatInterval();
/**
- * The interval in which a new election would get triggered if no leader is found
+ * Returns the interval after which a new election should be triggered if no leader is available.
*
- * Normally its set to atleast twice the heart beat interval
- *
- * @return FiniteDuration
+ * @return the interval as a FiniteDuration.
*/
FiniteDuration getElectionTimeOutInterval();
/**
- * The maximum election time variance. The election is scheduled using both
- * the Election Timeout and Variance
+ * Returns the maximum election time variance. The election is scheduled using both the election timeout
+ * and variance.
*
- * @return int
+ * @return the election time variance.
*/
int getElectionTimeVariance();
/**
- * The size (in bytes) of the snapshot chunk sent from Leader
+ * Returns the maximum size (in bytes) for the snapshot chunk sent from a Leader.
+ *
+ * @return the maximum size (in bytes).
*/
int getSnapshotChunkSize();
/**
- * The number of journal log entries to batch on recovery before applying.
+ * Returns the maximum number of journal log entries to batch on recovery before applying.
+ *
+ * @return the maximum number of journal log entries.
*/
int getJournalRecoveryLogBatchSize();
/**
- * The interval in which the leader needs to check itself if its isolated
- * @return FiniteDuration
+ * Returns the interval in which the leader needs to check if its isolated.
+ *
+ * @return the interval in ms.
*/
long getIsolatedCheckIntervalInMillis();
/**
- * The multiplication factor to be used to determine shard election timeout. The election timeout
- * is determined by multiplying the election timeout factor with the heartbeat duration.
+ * 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 an instance of RaftPolicy, if set, or an instance of the DefaultRaftPolicy.
+ */
+ @Nonnull
+ RaftPolicy getRaftPolicy();
+
+ /**
+ * Returns the PeerAddressResolver.
+ *
+ * @return the PeerAddressResolver instance.
+ */
+ @Nonnull
+ PeerAddressResolver getPeerAddressResolver();
+
+ /**
+ * 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();
}