Split out TransactionContext classes
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / DatastoreContext.java
index 722e23046e43f4c09d68150a2adc126de81de1bc..01e42dbb8e92400b7f4af73d55257d6f9ebbe4a2 100644 (file)
@@ -8,12 +8,15 @@
 
 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,11 +32,18 @@ public class DatastoreContext {
     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;
 
     private DatastoreContext(InMemoryDOMDataStoreConfigProperties dataStoreProperties,
             ConfigParams shardRaftConfig, String dataStoreMXBeanType, int operationTimeoutInSeconds,
             Duration shardTransactionIdleTimeout, int shardTransactionCommitTimeoutInSeconds,
-            int shardTransactionCommitQueueCapacity) {
+            int shardTransactionCommitQueueCapacity, Timeout shardInitializationTimeout,
+            Timeout shardLeaderElectionTimeout,
+            boolean persistent, ConfigurationReader configurationReader, long shardElectionTimeoutFactor) {
         this.dataStoreProperties = dataStoreProperties;
         this.shardRaftConfig = shardRaftConfig;
         this.dataStoreMXBeanType = dataStoreMXBeanType;
@@ -41,6 +51,11 @@ public class DatastoreContext {
         this.shardTransactionIdleTimeout = shardTransactionIdleTimeout;
         this.shardTransactionCommitTimeoutInSeconds = shardTransactionCommitTimeoutInSeconds;
         this.shardTransactionCommitQueueCapacity = shardTransactionCommitQueueCapacity;
+        this.shardInitializationTimeout = shardInitializationTimeout;
+        this.shardLeaderElectionTimeout = shardLeaderElectionTimeout;
+        this.persistent = persistent;
+        this.configurationReader = configurationReader;
+        this.shardElectionTimeoutFactor = shardElectionTimeoutFactor;
     }
 
     public static Builder newBuilder() {
@@ -75,6 +90,26 @@ public class DatastoreContext {
         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);
@@ -85,6 +120,13 @@ public class DatastoreContext {
         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;
@@ -121,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;
@@ -131,16 +179,53 @@ public class DatastoreContext {
             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);
+                    shardTransactionCommitTimeoutInSeconds, shardTransactionCommitQueueCapacity,
+                    shardInitializationTimeout, shardLeaderElectionTimeout,
+                    persistent, configurationReader, shardElectionTimeoutFactor);
         }
     }
 }