Code Review
/
controller.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Add direct in-memory journal threshold
[controller.git]
/
opendaylight
/
md-sal
/
sal-akka-raft
/
src
/
main
/
java
/
org
/
opendaylight
/
controller
/
cluster
/
raft
/
DefaultConfigParamsImpl.java
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 64502858a754b294c8f3b2d2aca31e056639f9f4..37ed729bed3e4edaf8f5f013c6a497edb8ba7eb6 100644
(file)
--- 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;
*/
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.Strings;
-import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import java.util.concurrent.TimeUnit;
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;
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;
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 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 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;
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;
// 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 int snapshotChunkSize = SNAPSHOT_CHUNK_SIZE;
private long electionTimeoutFactor = 2;
+ private long candidateElectionTimeoutDivisor = 1;
private String customRaftPolicyImplementationClass;
private PeerAddressResolver peerAddressResolver = NoopPeerAddressResolver.INSTANCE;
private String customRaftPolicyImplementationClass;
private PeerAddressResolver peerAddressResolver = NoopPeerAddressResolver.INSTANCE;
@@
-83,10
+95,19
@@
public class DefaultConfigParamsImpl implements ConfigParams {
this.snapshotBatchCount = snapshotBatchCount;
}
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 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;
}
public void setSnapshotChunkSize(final int snapshotChunkSize) {
this.snapshotChunkSize = snapshotChunkSize;
}
@@
-104,6
+125,10
@@
public class DefaultConfigParamsImpl implements ConfigParams {
electionTimeOutInterval = null;
}
electionTimeOutInterval = null;
}
+ public void setCandidateElectionTimeoutDivisor(final long candidateElectionTimeoutDivisor) {
+ this.candidateElectionTimeoutDivisor = candidateElectionTimeoutDivisor;
+ }
+
public void setTempFileDirectory(final String tempFileDirectory) {
this.tempFileDirectory = tempFileDirectory;
}
public void setTempFileDirectory(final String tempFileDirectory) {
this.tempFileDirectory = tempFileDirectory;
}
@@
-131,6
+156,15
@@
public class DefaultConfigParamsImpl implements ConfigParams {
return snapshotDataThresholdPercentage;
}
return snapshotDataThresholdPercentage;
}
+ @Override
+ public int getSnapshotDataThreshold() {
+ return snapshotDataThreshold;
+ }
+
+ @Override
+ public int getRecoverySnapshotIntervalSeconds() {
+ return this.recoverySnapshotIntervalSeconds;
+ }
@Override
public FiniteDuration getHeartBeatInterval() {
@Override
public FiniteDuration getHeartBeatInterval() {
@@
-146,6
+180,11
@@
public class DefaultConfigParamsImpl implements ConfigParams {
return electionTimeOutInterval;
}
return electionTimeOutInterval;
}
+ @Override
+ public long getCandidateElectionTimeoutDivisor() {
+ return candidateElectionTimeoutDivisor;
+ }
+
@Override
public int getElectionTimeVariance() {
return ELECTION_TIME_MAX_VARIANCE;
@Override
public int getElectionTimeVariance() {
return ELECTION_TIME_MAX_VARIANCE;
@@
-192,8
+231,8
@@
public class DefaultConfigParamsImpl implements ConfigParams {
return peerAddressResolver;
}
return peerAddressResolver;
}
- public void setPeerAddressResolver(
@Nonnull fina
l PeerAddressResolver peerAddressResolver) {
- this.peerAddressResolver =
Preconditions.checkNot
Null(peerAddressResolver);
+ public void setPeerAddressResolver(
final @NonNul
l PeerAddressResolver peerAddressResolver) {
+ this.peerAddressResolver =
requireNon
Null(peerAddressResolver);
}
@Override
}
@Override
@@
-202,7
+241,7
@@
public class DefaultConfigParamsImpl implements ConfigParams {
}
public void setSyncIndexThreshold(final long syncIndexThreshold) {
}
public void setSyncIndexThreshold(final long syncIndexThreshold) {
-
Preconditions.
checkArgument(syncIndexThreshold >= 0);
+ checkArgument(syncIndexThreshold >= 0);
this.syncIndexThreshold = syncIndexThreshold;
}
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);
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 | ReflectiveOperation
Exception e) {
if (LOG.isDebugEnabled()) {
LOG.error("Could not create custom raft policy, will stick with default", e);
} else {
if (LOG.isDebugEnabled()) {
LOG.error("Could not create custom raft policy, will stick with default", e);
} else {