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%2FDefaultConfigParamsImpl.java;h=37ed729bed3e4edaf8f5f013c6a497edb8ba7eb6;hp=64502858a754b294c8f3b2d2aca31e056639f9f4;hb=7cb260aeb0738104e3bee8a086de9e2e5f77b7e0;hpb=b25ae9347455b1bae8f25424a9ceffc017f2f0db diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/DefaultConfigParamsImpl.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/DefaultConfigParamsImpl.java index 64502858a7..37ed729bed 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/DefaultConfigParamsImpl.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/DefaultConfigParamsImpl.java @@ -7,12 +7,14 @@ */ 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; @@ -27,6 +29,10 @@ public class DefaultConfigParamsImpl implements ConfigParams { 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; @@ -54,6 +60,7 @@ public class DefaultConfigParamsImpl implements ConfigParams { 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; @@ -61,9 +68,14 @@ public class DefaultConfigParamsImpl implements ConfigParams { // 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; @@ -83,10 +95,19 @@ public class DefaultConfigParamsImpl implements ConfigParams { 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; } @@ -104,6 +125,10 @@ public class DefaultConfigParamsImpl implements ConfigParams { electionTimeOutInterval = null; } + public void setCandidateElectionTimeoutDivisor(final long candidateElectionTimeoutDivisor) { + this.candidateElectionTimeoutDivisor = candidateElectionTimeoutDivisor; + } + public void setTempFileDirectory(final String tempFileDirectory) { this.tempFileDirectory = tempFileDirectory; } @@ -131,6 +156,15 @@ public class DefaultConfigParamsImpl implements ConfigParams { return snapshotDataThresholdPercentage; } + @Override + public int getSnapshotDataThreshold() { + return snapshotDataThreshold; + } + + @Override + public int getRecoverySnapshotIntervalSeconds() { + return this.recoverySnapshotIntervalSeconds; + } @Override public FiniteDuration getHeartBeatInterval() { @@ -146,6 +180,11 @@ public class DefaultConfigParamsImpl implements ConfigParams { return electionTimeOutInterval; } + @Override + public long getCandidateElectionTimeoutDivisor() { + return candidateElectionTimeoutDivisor; + } + @Override public int getElectionTimeVariance() { return ELECTION_TIME_MAX_VARIANCE; @@ -192,8 +231,8 @@ public class DefaultConfigParamsImpl implements ConfigParams { 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 @@ -202,7 +241,7 @@ public class DefaultConfigParamsImpl implements ConfigParams { } public void setSyncIndexThreshold(final long syncIndexThreshold) { - Preconditions.checkArgument(syncIndexThreshold >= 0); + checkArgument(syncIndexThreshold >= 0); this.syncIndexThreshold = syncIndexThreshold; } @@ -216,8 +255,8 @@ public class DefaultConfigParamsImpl implements ConfigParams { try { String className = DefaultConfigParamsImpl.this.customRaftPolicyImplementationClass; LOG.info("Trying to use custom RaftPolicy {}", className); - return (RaftPolicy)Class.forName(className).newInstance(); - } catch (Exception e) { + return (RaftPolicy)Class.forName(className).getDeclaredConstructor().newInstance(); + } catch (ClassCastException | ReflectiveOperationException e) { if (LOG.isDebugEnabled()) { LOG.error("Could not create custom raft policy, will stick with default", e); } else {