*/
package org.opendaylight.controller.cluster.raft;
+import com.google.common.base.Strings;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
import java.util.concurrent.TimeUnit;
+import org.opendaylight.controller.cluster.raft.policy.DefaultRaftPolicy;
+import org.opendaylight.controller.cluster.raft.policy.RaftPolicy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import scala.concurrent.duration.FiniteDuration;
/**
*/
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 int JOURNAL_RECOVERY_LOG_BATCH_SIZE = 1000;
private int snaphotChunkSize = SNAPSHOT_CHUNK_SIZE;
private long electionTimeoutFactor = 2;
+ private String customRaftPolicyImplementationClass;
+
+ Supplier<RaftPolicy> policySupplier = Suppliers.memoize(new PolicySupplier());
public void setHeartBeatInterval(FiniteDuration heartBeatInterval) {
this.heartBeatInterval = heartBeatInterval;
electionTimeOutInterval = null;
}
+ public void setCustomRaftPolicyImplementationClass(String customRaftPolicyImplementationClass){
+ this.customRaftPolicyImplementationClass = customRaftPolicyImplementationClass;
+ }
+
@Override
public long getSnapshotBatchCount() {
return snapshotBatchCount;
public long getElectionTimeoutFactor() {
return electionTimeoutFactor;
}
+
+ @Override
+ public RaftPolicy getRaftPolicy() {
+ return policySupplier.get();
+ }
+
+ private class PolicySupplier implements Supplier<RaftPolicy>{
+ @Override
+ public RaftPolicy get() {
+ if(Strings.isNullOrEmpty(DefaultConfigParamsImpl.this.customRaftPolicyImplementationClass)){
+ return DefaultRaftPolicy.INSTANCE;
+ }
+ try {
+ String className = DefaultConfigParamsImpl.this.customRaftPolicyImplementationClass;
+ Class c = Class.forName(className);
+ RaftPolicy obj = (RaftPolicy)c.newInstance();
+ return obj;
+ } 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;
+ }
+ }
}