Make AbstractClientConnection timeouts configurable
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / DatastoreContext.java
index 890e1030674d3e7a3c68dbb8784a05aa82b7da1b..dee8142bbc0904e6666784143d8f1cb795f27baa 100644 (file)
@@ -15,6 +15,7 @@ import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 import org.apache.commons.lang3.text.WordUtils;
+import org.opendaylight.controller.cluster.access.client.AbstractClientConnection;
 import org.opendaylight.controller.cluster.access.client.ClientActorConfig;
 import org.opendaylight.controller.cluster.common.actor.AkkaConfigurationReader;
 import org.opendaylight.controller.cluster.common.actor.FileAkkaConfigurationReader;
@@ -88,6 +89,9 @@ public class DatastoreContext implements ClientActorConfig {
     private boolean transactionDebugContextEnabled = false;
     private String shardManagerPersistenceId;
     private int maximumMessageSliceSize = DEFAULT_MAX_MESSAGE_SLICE_SIZE;
+    private long backendAlivenessTimerInterval = AbstractClientConnection.DEFAULT_BACKEND_ALIVE_TIMEOUT_NANOS;
+    private long requestTimeout = AbstractClientConnection.DEFAULT_REQUEST_TIMEOUT_NANOS;
+    private long noProgressTimeout = AbstractClientConnection.DEFAULT_NO_PROGRESS_TIMEOUT_NANOS;
 
     public static Set<String> getGlobalDatastoreNames() {
         return GLOBAL_DATASTORE_NAMES;
@@ -125,6 +129,9 @@ public class DatastoreContext implements ClientActorConfig {
         this.transactionDebugContextEnabled = other.transactionDebugContextEnabled;
         this.shardManagerPersistenceId = other.shardManagerPersistenceId;
         this.useTellBasedProtocol = other.useTellBasedProtocol;
+        this.backendAlivenessTimerInterval = other.backendAlivenessTimerInterval;
+        this.requestTimeout = other.requestTimeout;
+        this.noProgressTimeout = other.noProgressTimeout;
 
         setShardJournalRecoveryLogBatchSize(other.raftConfig.getJournalRecoveryLogBatchSize());
         setSnapshotBatchCount(other.raftConfig.getSnapshotBatchCount());
@@ -315,6 +322,21 @@ public class DatastoreContext implements ClientActorConfig {
         return maximumMessageSliceSize;
     }
 
+    @Override
+    public long getBackendAlivenessTimerInterval() {
+        return backendAlivenessTimerInterval;
+    }
+
+    @Override
+    public long getRequestTimeout() {
+        return requestTimeout;
+    }
+
+    @Override
+    public long getNoProgressTimeout() {
+        return noProgressTimeout;
+    }
+
     public static class Builder implements org.opendaylight.yangtools.concepts.Builder<DatastoreContext> {
         private final DatastoreContext datastoreContext;
         private int maxShardDataChangeExecutorPoolSize =
@@ -566,7 +588,7 @@ public class DatastoreContext implements ClientActorConfig {
             return this;
         }
 
-        public Builder fileBackedStreamingThresholdInMegabytes(final int  fileBackedStreamingThreshold) {
+        public Builder fileBackedStreamingThresholdInMegabytes(final int fileBackedStreamingThreshold) {
             datastoreContext.setFileBackedStreamingThreshold(fileBackedStreamingThreshold * ConfigParams.MEGABYTE);
             return this;
         }
@@ -576,6 +598,21 @@ public class DatastoreContext implements ClientActorConfig {
             return this;
         }
 
+        public Builder backendAlivenessTimerIntervalInSeconds(final long interval) {
+            datastoreContext.backendAlivenessTimerInterval = TimeUnit.SECONDS.toNanos(interval);
+            return this;
+        }
+
+        public Builder frontendRequestTimeoutInSeconds(final long timeout) {
+            datastoreContext.requestTimeout = TimeUnit.SECONDS.toNanos(timeout);
+            return this;
+        }
+
+        public Builder frontendNoProgressTimeoutInSeconds(final long timeout) {
+            datastoreContext.noProgressTimeout = TimeUnit.SECONDS.toNanos(timeout);
+            return this;
+        }
+
         @Override
         public DatastoreContext build() {
             datastoreContext.dataStoreProperties = InMemoryDOMDataStoreConfigProperties.create(