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=932069edda42fe005a408607940f2989ab46ca26;hp=6faf5df2e89c12ab7ed30137757e9cc4c4339401;hb=c3b47511c453ecc7692c7e5b3602c606996b4aba;hpb=c9943f5bc72d4cde9356d3bd4cf73d36f4b2f754 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 6faf5df2e8..932069edda 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 @@ -20,9 +20,7 @@ import org.slf4j.LoggerFactory; import scala.concurrent.duration.FiniteDuration; /** - * Default implementation of the ConfigParams - * - * If no implementation is provided for ConfigParams, then this will be used. + * Default implementation of the ConfigParams. */ public class DefaultConfigParamsImpl implements ConfigParams { @@ -33,7 +31,7 @@ public class DefaultConfigParamsImpl implements ConfigParams { private static final int JOURNAL_RECOVERY_LOG_BATCH_SIZE = 1000; /** - * The maximum election time variance + * The maximum election time variance. */ private static final int ELECTION_TIME_MAX_VARIANCE = 100; @@ -42,14 +40,17 @@ public class DefaultConfigParamsImpl implements ConfigParams { /** * The interval at which a heart beat message will be sent to the remote - * RaftActor - *

+ * RaftActor. + * + *

* Since this is set to 100 milliseconds the Election timeout should be * at least 200 milliseconds */ public static final FiniteDuration HEART_BEAT_INTERVAL = new FiniteDuration(100, TimeUnit.MILLISECONDS); + private final Supplier policySupplier = Suppliers.memoize(this::getPolicy); + private FiniteDuration heartBeatInterval = HEART_BEAT_INTERVAL; private long snapshotBatchCount = SNAPSHOT_BATCH_COUNT; private int journalRecoveryLogBatchSize = JOURNAL_RECOVERY_LOG_BATCH_SIZE; @@ -65,41 +66,53 @@ public class DefaultConfigParamsImpl implements ConfigParams { private long electionTimeoutFactor = 2; private String customRaftPolicyImplementationClass; - private final Supplier policySupplier = Suppliers.memoize(new PolicySupplier()); - private PeerAddressResolver peerAddressResolver = NoopPeerAddressResolver.INSTANCE; - public void setHeartBeatInterval(FiniteDuration heartBeatInterval) { + private String tempFileDirectory = ""; + + private int fileBackedStreamingThreshold = 128 * MEGABYTE; + + private long syncIndexThreshold = 10; + + public void setHeartBeatInterval(final FiniteDuration heartBeatInterval) { this.heartBeatInterval = heartBeatInterval; electionTimeOutInterval = null; } - public void setSnapshotBatchCount(long snapshotBatchCount) { + public void setSnapshotBatchCount(final long snapshotBatchCount) { this.snapshotBatchCount = snapshotBatchCount; } - public void setSnapshotDataThresholdPercentage(int snapshotDataThresholdPercentage){ + public void setSnapshotDataThresholdPercentage(final int snapshotDataThresholdPercentage) { this.snapshotDataThresholdPercentage = snapshotDataThresholdPercentage; } - public void setSnapshotChunkSize(int snapshotChunkSize) { + public void setSnapshotChunkSize(final int snapshotChunkSize) { this.snapshotChunkSize = snapshotChunkSize; } - public void setJournalRecoveryLogBatchSize(int journalRecoveryLogBatchSize) { + public void setJournalRecoveryLogBatchSize(final int journalRecoveryLogBatchSize) { this.journalRecoveryLogBatchSize = journalRecoveryLogBatchSize; } - public void setIsolatedLeaderCheckInterval(FiniteDuration isolatedLeaderCheckInterval) { + public void setIsolatedLeaderCheckInterval(final FiniteDuration isolatedLeaderCheckInterval) { this.isolatedLeaderCheckInterval = isolatedLeaderCheckInterval.toMillis(); } - public void setElectionTimeoutFactor(long electionTimeoutFactor){ + public void setElectionTimeoutFactor(final long electionTimeoutFactor) { this.electionTimeoutFactor = electionTimeoutFactor; electionTimeOutInterval = null; } - public void setCustomRaftPolicyImplementationClass(String customRaftPolicyImplementationClass){ + public void setTempFileDirectory(final String tempFileDirectory) { + this.tempFileDirectory = tempFileDirectory; + } + + public void setFileBackedStreamingThreshold(final int fileBackedStreamingThreshold) { + this.fileBackedStreamingThreshold = fileBackedStreamingThreshold; + } + + public void setCustomRaftPolicyImplementationClass(final String customRaftPolicyImplementationClass) { this.customRaftPolicyImplementationClass = customRaftPolicyImplementationClass; } @@ -126,7 +139,7 @@ public class DefaultConfigParamsImpl implements ConfigParams { @Override public FiniteDuration getElectionTimeOutInterval() { - if(electionTimeOutInterval == null) { + if (electionTimeOutInterval == null) { electionTimeOutInterval = getHeartBeatInterval().$times(electionTimeoutFactor); } @@ -163,35 +176,55 @@ public class DefaultConfigParamsImpl implements ConfigParams { return policySupplier.get(); } - private class PolicySupplier implements Supplier{ - @Override - public RaftPolicy get() { - if(Strings.isNullOrEmpty(DefaultConfigParamsImpl.this.customRaftPolicyImplementationClass)){ - LOG.debug("No custom RaftPolicy specified. Using DefaultRaftPolicy"); - return DefaultRaftPolicy.INSTANCE; - } - try { - String className = DefaultConfigParamsImpl.this.customRaftPolicyImplementationClass; - LOG.info("Trying to use custom RaftPolicy {}", className); - Class c = Class.forName(className); - return (RaftPolicy)c.newInstance(); - } catch (Exception e) { - if(LOG.isDebugEnabled()) { - LOG.error("Could not create custom raft policy, will stick with default", e); - } else { - LOG.error("Could not create custom raft policy, will stick with default : cause = {}", e.getMessage()); - } - } - return DefaultRaftPolicy.INSTANCE; - } + @Override + public String getTempFileDirectory() { + return tempFileDirectory; } + @Override + public int getFileBackedStreamingThreshold() { + return fileBackedStreamingThreshold; + } + + @Override public PeerAddressResolver getPeerAddressResolver() { return peerAddressResolver; } - public void setPeerAddressResolver(@Nonnull PeerAddressResolver peerAddressResolver) { + public void setPeerAddressResolver(@Nonnull final PeerAddressResolver peerAddressResolver) { this.peerAddressResolver = Preconditions.checkNotNull(peerAddressResolver); } + + @Override + public long getSyncIndexThreshold() { + return syncIndexThreshold; + } + + public void setSyncIndexThreshold(final long syncIndexThreshold) { + Preconditions.checkArgument(syncIndexThreshold >= 0); + this.syncIndexThreshold = syncIndexThreshold; + } + + @SuppressWarnings("checkstyle:IllegalCatch") + private RaftPolicy getPolicy() { + if (Strings.isNullOrEmpty(DefaultConfigParamsImpl.this.customRaftPolicyImplementationClass)) { + LOG.debug("No custom RaftPolicy specified. Using DefaultRaftPolicy"); + return DefaultRaftPolicy.INSTANCE; + } + + try { + String className = DefaultConfigParamsImpl.this.customRaftPolicyImplementationClass; + LOG.info("Trying to use custom RaftPolicy {}", className); + 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 { + LOG.error("Could not create custom raft policy, will stick with default : cause = {}", + e.getMessage()); + } + } + return DefaultRaftPolicy.INSTANCE; + } }