*/
package org.opendaylight.controller.cluster.raft;
-import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkArgument;
+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 javax.annotation.Nonnull;
+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;
import org.slf4j.Logger;
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 static final int ELECTION_TIME_MAX_VARIANCE = 100;
- private static final int SNAPSHOT_CHUNK_SIZE = 2048 * 1000; //2MB
+ private static final int SNAPSHOT_CHUNK_SIZE = 480 * 1024; // 480KiB
/**
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;
+ private long candidateElectionTimeoutDivisor = 1;
private String customRaftPolicyImplementationClass;
private PeerAddressResolver peerAddressResolver = NoopPeerAddressResolver.INSTANCE;
this.snapshotBatchCount = snapshotBatchCount;
}
+ public void setRecoverySnapshotIntervalSeconds(final int recoverySnapshotInterval) {
+ checkArgument(recoverySnapshotInterval >= 0);
+ 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;
}
electionTimeOutInterval = null;
}
+ public void setCandidateElectionTimeoutDivisor(final long candidateElectionTimeoutDivisor) {
+ this.candidateElectionTimeoutDivisor = candidateElectionTimeoutDivisor;
+ }
+
public void setTempFileDirectory(final String tempFileDirectory) {
this.tempFileDirectory = tempFileDirectory;
}
return snapshotDataThresholdPercentage;
}
+ @Override
+ public int getSnapshotDataThreshold() {
+ return snapshotDataThreshold;
+ }
+
+ @Override
+ public int getRecoverySnapshotIntervalSeconds() {
+ return recoverySnapshotIntervalSeconds;
+ }
@Override
public FiniteDuration getHeartBeatInterval() {
return electionTimeOutInterval;
}
+ @Override
+ public long getCandidateElectionTimeoutDivisor() {
+ return candidateElectionTimeoutDivisor;
+ }
+
@Override
public int getElectionTimeVariance() {
return ELECTION_TIME_MAX_VARIANCE;
return peerAddressResolver;
}
- public void setPeerAddressResolver(@Nonnull final PeerAddressResolver peerAddressResolver) {
- this.peerAddressResolver = Preconditions.checkNotNull(peerAddressResolver);
+ public void setPeerAddressResolver(final @NonNull PeerAddressResolver peerAddressResolver) {
+ this.peerAddressResolver = requireNonNull(peerAddressResolver);
}
@Override
}
public void setSyncIndexThreshold(final long syncIndexThreshold) {
- Preconditions.checkArgument(syncIndexThreshold >= 0);
+ checkArgument(syncIndexThreshold >= 0);
this.syncIndexThreshold = syncIndexThreshold;
}