X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDatastoreContext.java;h=01e42dbb8e92400b7f4af73d55257d6f9ebbe4a2;hp=2048bde613868ed7bb6ea30e8fa25776d7ecc9a4;hb=37f0504d391efd8b7d61403759fcc22a6dd3a093;hpb=cd81eb73b7abf677571b2366425ccbc8d794f4b6 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java index 2048bde613..01e42dbb8e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java @@ -8,17 +8,16 @@ package org.opendaylight.controller.cluster.datastore; +import akka.util.Timeout; +import java.util.concurrent.TimeUnit; import org.opendaylight.controller.cluster.datastore.config.ConfigurationReader; import org.opendaylight.controller.cluster.datastore.config.FileConfigurationReader; import org.opendaylight.controller.cluster.raft.ConfigParams; import org.opendaylight.controller.cluster.raft.DefaultConfigParamsImpl; import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStoreConfigProperties; -import akka.util.Timeout; import scala.concurrent.duration.Duration; import scala.concurrent.duration.FiniteDuration; -import java.util.concurrent.TimeUnit; - /** * Contains contextual data for a data store. * @@ -37,13 +36,14 @@ public class DatastoreContext { private final Timeout shardLeaderElectionTimeout; private final boolean persistent; private final ConfigurationReader configurationReader; + private final long shardElectionTimeoutFactor; private DatastoreContext(InMemoryDOMDataStoreConfigProperties dataStoreProperties, ConfigParams shardRaftConfig, String dataStoreMXBeanType, int operationTimeoutInSeconds, Duration shardTransactionIdleTimeout, int shardTransactionCommitTimeoutInSeconds, int shardTransactionCommitQueueCapacity, Timeout shardInitializationTimeout, Timeout shardLeaderElectionTimeout, - boolean persistent, ConfigurationReader configurationReader) { + boolean persistent, ConfigurationReader configurationReader, long shardElectionTimeoutFactor) { this.dataStoreProperties = dataStoreProperties; this.shardRaftConfig = shardRaftConfig; this.dataStoreMXBeanType = dataStoreMXBeanType; @@ -55,6 +55,7 @@ public class DatastoreContext { this.shardLeaderElectionTimeout = shardLeaderElectionTimeout; this.persistent = persistent; this.configurationReader = configurationReader; + this.shardElectionTimeoutFactor = shardElectionTimeoutFactor; } public static Builder newBuilder() { @@ -105,6 +106,10 @@ public class DatastoreContext { return configurationReader; } + public long getShardElectionTimeoutFactor(){ + return this.shardElectionTimeoutFactor; + } + public static class Builder { private InMemoryDOMDataStoreConfigProperties dataStoreProperties; private Duration shardTransactionIdleTimeout = Duration.create(10, TimeUnit.MINUTES); @@ -119,6 +124,9 @@ public class DatastoreContext { private Timeout shardLeaderElectionTimeout = new Timeout(30, TimeUnit.SECONDS); private boolean persistent = true; private ConfigurationReader configurationReader = new FileConfigurationReader(); + private int shardIsolatedLeaderCheckIntervalInMillis = shardHeartbeatIntervalInMillis * 10; + private int shardSnapshotDataThresholdPercentage = 12; + private long shardElectionTimeoutFactor = 2; public Builder shardTransactionIdleTimeout(Duration shardTransactionIdleTimeout) { this.shardTransactionIdleTimeout = shardTransactionIdleTimeout; @@ -155,6 +163,12 @@ public class DatastoreContext { return this; } + public Builder shardSnapshotDataThresholdPercentage(int shardSnapshotDataThresholdPercentage) { + this.shardSnapshotDataThresholdPercentage = shardSnapshotDataThresholdPercentage; + return this; + } + + public Builder shardHeartbeatIntervalInMillis(int shardHeartbeatIntervalInMillis) { this.shardHeartbeatIntervalInMillis = shardHeartbeatIntervalInMillis; return this; @@ -180,24 +194,38 @@ public class DatastoreContext { return this; } - public Builder persistent(boolean persistent){ this.persistent = persistent; return this; } + public Builder shardIsolatedLeaderCheckIntervalInMillis(int shardIsolatedLeaderCheckIntervalInMillis) { + this.shardIsolatedLeaderCheckIntervalInMillis = shardIsolatedLeaderCheckIntervalInMillis; + return this; + } + + public Builder shardElectionTimeoutFactor(long shardElectionTimeoutFactor){ + this.shardElectionTimeoutFactor = shardElectionTimeoutFactor; + return this; + } + + public DatastoreContext build() { DefaultConfigParamsImpl raftConfig = new DefaultConfigParamsImpl(); raftConfig.setHeartBeatInterval(new FiniteDuration(shardHeartbeatIntervalInMillis, TimeUnit.MILLISECONDS)); raftConfig.setJournalRecoveryLogBatchSize(shardJournalRecoveryLogBatchSize); raftConfig.setSnapshotBatchCount(shardSnapshotBatchCount); + raftConfig.setSnapshotDataThresholdPercentage(shardSnapshotDataThresholdPercentage); + raftConfig.setElectionTimeoutFactor(shardElectionTimeoutFactor); + raftConfig.setIsolatedLeaderCheckInterval( + new FiniteDuration(shardIsolatedLeaderCheckIntervalInMillis, TimeUnit.MILLISECONDS)); return new DatastoreContext(dataStoreProperties, raftConfig, dataStoreMXBeanType, operationTimeoutInSeconds, shardTransactionIdleTimeout, shardTransactionCommitTimeoutInSeconds, shardTransactionCommitQueueCapacity, shardInitializationTimeout, shardLeaderElectionTimeout, - persistent, configurationReader); + persistent, configurationReader, shardElectionTimeoutFactor); } } }