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=83164b07d9431a70ce609139a476190a5488ab9a;hb=37f0504d391efd8b7d61403759fcc22a6dd3a093;hpb=05a8052a457b2e53f06233f1a0b056d162118566 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 83164b07d9..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,15 +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 scala.concurrent.duration.Duration; import scala.concurrent.duration.FiniteDuration; -import java.util.concurrent.TimeUnit; - /** * Contains contextual data for a data store. * @@ -29,29 +30,36 @@ public class DatastoreContext { private final int operationTimeoutInSeconds; private final String dataStoreMXBeanType; private final ConfigParams shardRaftConfig; + private final int shardTransactionCommitTimeoutInSeconds; + private final int shardTransactionCommitQueueCapacity; + private final Timeout shardInitializationTimeout; + private final Timeout shardLeaderElectionTimeout; + private final boolean persistent; + private final ConfigurationReader configurationReader; + private final long shardElectionTimeoutFactor; - public DatastoreContext() { - this("DistributedDatastore", null, Duration.create(10, TimeUnit.MINUTES), 5, 1000, 20000, 500); - } - - public DatastoreContext(String dataStoreMXBeanType, - InMemoryDOMDataStoreConfigProperties dataStoreProperties, - Duration shardTransactionIdleTimeout, - int operationTimeoutInSeconds, - int shardJournalRecoveryLogBatchSize, - int shardSnapshotBatchCount, - int shardHeartbeatIntervalInMillis) { - this.dataStoreMXBeanType = dataStoreMXBeanType; + private DatastoreContext(InMemoryDOMDataStoreConfigProperties dataStoreProperties, + ConfigParams shardRaftConfig, String dataStoreMXBeanType, int operationTimeoutInSeconds, + Duration shardTransactionIdleTimeout, int shardTransactionCommitTimeoutInSeconds, + int shardTransactionCommitQueueCapacity, Timeout shardInitializationTimeout, + Timeout shardLeaderElectionTimeout, + boolean persistent, ConfigurationReader configurationReader, long shardElectionTimeoutFactor) { this.dataStoreProperties = dataStoreProperties; - this.shardTransactionIdleTimeout = shardTransactionIdleTimeout; + this.shardRaftConfig = shardRaftConfig; + this.dataStoreMXBeanType = dataStoreMXBeanType; this.operationTimeoutInSeconds = operationTimeoutInSeconds; + this.shardTransactionIdleTimeout = shardTransactionIdleTimeout; + this.shardTransactionCommitTimeoutInSeconds = shardTransactionCommitTimeoutInSeconds; + this.shardTransactionCommitQueueCapacity = shardTransactionCommitQueueCapacity; + this.shardInitializationTimeout = shardInitializationTimeout; + this.shardLeaderElectionTimeout = shardLeaderElectionTimeout; + this.persistent = persistent; + this.configurationReader = configurationReader; + this.shardElectionTimeoutFactor = shardElectionTimeoutFactor; + } - DefaultConfigParamsImpl raftConfig = new DefaultConfigParamsImpl(); - raftConfig.setHeartBeatInterval(new FiniteDuration(shardHeartbeatIntervalInMillis, - TimeUnit.MILLISECONDS)); - raftConfig.setJournalRecoveryLogBatchSize(shardJournalRecoveryLogBatchSize); - raftConfig.setSnapshotBatchCount(shardSnapshotBatchCount); - shardRaftConfig = raftConfig; + public static Builder newBuilder() { + return new Builder(); } public InMemoryDOMDataStoreConfigProperties getDataStoreProperties() { @@ -73,4 +81,151 @@ public class DatastoreContext { public ConfigParams getShardRaftConfig() { return shardRaftConfig; } + + public int getShardTransactionCommitTimeoutInSeconds() { + return shardTransactionCommitTimeoutInSeconds; + } + + public int getShardTransactionCommitQueueCapacity() { + return shardTransactionCommitQueueCapacity; + } + + public Timeout getShardInitializationTimeout() { + return shardInitializationTimeout; + } + + public Timeout getShardLeaderElectionTimeout() { + return shardLeaderElectionTimeout; + } + + public boolean isPersistent() { + return persistent; + } + + public ConfigurationReader getConfigurationReader() { + return configurationReader; + } + + public long getShardElectionTimeoutFactor(){ + return this.shardElectionTimeoutFactor; + } + + public static class Builder { + private InMemoryDOMDataStoreConfigProperties dataStoreProperties; + private Duration shardTransactionIdleTimeout = Duration.create(10, TimeUnit.MINUTES); + private int operationTimeoutInSeconds = 5; + private String dataStoreMXBeanType; + private int shardTransactionCommitTimeoutInSeconds = 30; + private int shardJournalRecoveryLogBatchSize = 1000; + private int shardSnapshotBatchCount = 20000; + private int shardHeartbeatIntervalInMillis = 500; + private int shardTransactionCommitQueueCapacity = 20000; + private Timeout shardInitializationTimeout = new Timeout(5, TimeUnit.MINUTES); + 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; + return this; + } + + public Builder operationTimeoutInSeconds(int operationTimeoutInSeconds) { + this.operationTimeoutInSeconds = operationTimeoutInSeconds; + return this; + } + + public Builder dataStoreMXBeanType(String dataStoreMXBeanType) { + this.dataStoreMXBeanType = dataStoreMXBeanType; + return this; + } + + public Builder dataStoreProperties(InMemoryDOMDataStoreConfigProperties dataStoreProperties) { + this.dataStoreProperties = dataStoreProperties; + return this; + } + + public Builder shardTransactionCommitTimeoutInSeconds(int shardTransactionCommitTimeoutInSeconds) { + this.shardTransactionCommitTimeoutInSeconds = shardTransactionCommitTimeoutInSeconds; + return this; + } + + public Builder shardJournalRecoveryLogBatchSize(int shardJournalRecoveryLogBatchSize) { + this.shardJournalRecoveryLogBatchSize = shardJournalRecoveryLogBatchSize; + return this; + } + + public Builder shardSnapshotBatchCount(int shardSnapshotBatchCount) { + this.shardSnapshotBatchCount = shardSnapshotBatchCount; + return this; + } + + public Builder shardSnapshotDataThresholdPercentage(int shardSnapshotDataThresholdPercentage) { + this.shardSnapshotDataThresholdPercentage = shardSnapshotDataThresholdPercentage; + return this; + } + + + public Builder shardHeartbeatIntervalInMillis(int shardHeartbeatIntervalInMillis) { + this.shardHeartbeatIntervalInMillis = shardHeartbeatIntervalInMillis; + return this; + } + + public Builder shardTransactionCommitQueueCapacity(int shardTransactionCommitQueueCapacity) { + this.shardTransactionCommitQueueCapacity = shardTransactionCommitQueueCapacity; + return this; + } + + public Builder shardInitializationTimeout(long timeout, TimeUnit unit) { + this.shardInitializationTimeout = new Timeout(timeout, unit); + return this; + } + + public Builder shardLeaderElectionTimeout(long timeout, TimeUnit unit) { + this.shardLeaderElectionTimeout = new Timeout(timeout, unit); + return this; + } + + public Builder configurationReader(ConfigurationReader configurationReader){ + this.configurationReader = configurationReader; + 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, shardElectionTimeoutFactor); + } + } }