import static java.util.Objects.requireNonNull;
import com.google.common.base.Strings;
-import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.controller.cluster.raft.policy.DefaultRaftPolicy;
import org.opendaylight.controller.cluster.raft.policy.RaftPolicy;
private static final Logger LOG = LoggerFactory.getLogger(DefaultConfigParamsImpl.class);
private static final int SNAPSHOT_BATCH_COUNT = 20000;
+ /**
+ * Interval after which a snapshot should be taken during the recovery process. 0 if never.
+ */
+ private static final int RECOVERY_SNAPSHOT_INTERVAL_SECONDS = 0;
private static final int JOURNAL_RECOVERY_LOG_BATCH_SIZE = 1000;
private FiniteDuration heartBeatInterval = HEART_BEAT_INTERVAL;
private long snapshotBatchCount = SNAPSHOT_BATCH_COUNT;
private int journalRecoveryLogBatchSize = JOURNAL_RECOVERY_LOG_BATCH_SIZE;
+ private int recoverySnapshotIntervalSeconds = RECOVERY_SNAPSHOT_INTERVAL_SECONDS;
private long isolatedLeaderCheckInterval = HEART_BEAT_INTERVAL.$times(1000).toMillis();
private FiniteDuration electionTimeOutInterval;
// in-memory journal can use before it needs to snapshot
private int snapshotDataThresholdPercentage = 12;
+ // max size of in-memory journal in MB
+ // 0 means direct threshold if disabled
+ private int snapshotDataThreshold = 0;
+
private int snapshotChunkSize = SNAPSHOT_CHUNK_SIZE;
private long electionTimeoutFactor = 2;
this.snapshotBatchCount = snapshotBatchCount;
}
+ public void setRecoverySnapshotIntervalSeconds(int recoverySnapshotInterval) {
+ checkArgument(recoverySnapshotInterval >= 0);
+ this.recoverySnapshotIntervalSeconds = recoverySnapshotInterval;
+ }
+
public void setSnapshotDataThresholdPercentage(final int snapshotDataThresholdPercentage) {
this.snapshotDataThresholdPercentage = snapshotDataThresholdPercentage;
}
+ public void setSnapshotDataThreshold(final int snapshotDataThreshold) {
+ this.snapshotDataThreshold = snapshotDataThreshold;
+ }
+
public void setSnapshotChunkSize(final int snapshotChunkSize) {
this.snapshotChunkSize = snapshotChunkSize;
}
return snapshotDataThresholdPercentage;
}
+ @Override
+ public int getSnapshotDataThreshold() {
+ return snapshotDataThreshold;
+ }
+
+ @Override
+ public int getRecoverySnapshotIntervalSeconds() {
+ return this.recoverySnapshotIntervalSeconds;
+ }
+
@Override
public FiniteDuration getHeartBeatInterval() {
return heartBeatInterval;