BUG 2185 : Make the Custom Raft Policy externally configurable
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / yang / distributed-datastore-provider.yang
index 367d4f45e235209dd3a07b51107dec6198d1c157..fcd4a301dbeeaff30085fd8476b2972346271847 100644 (file)
@@ -104,12 +104,19 @@ module distributed-datastore-provider {
          }
 
 
-         leaf shard-hearbeat-interval-in-millis {
+         leaf shard-heartbeat-interval-in-millis {
             default 500;
             type heartbeat-interval-type;
             description "The interval at which a shard will send a heart beat message to its remote shard.";
          }
 
+         leaf shard-election-timeout-factor {
+            default 2;
+            type non-zero-uint32-type;
+            description "The multiplication factor to be used to determine shard election timeout. The shard election timeout
+                         is determined by multiplying shard-heartbeat-interval-in-millis with the shard-election-timeout-factor";
+         }
+
          leaf operation-timeout-in-seconds {
             default 5;
             type operation-timeout-type;
@@ -117,7 +124,7 @@ module distributed-datastore-provider {
          }
 
          leaf shard-journal-recovery-log-batch-size {
-            default 5000;
+            default 1000;
             type non-zero-uint32-type;
             description "The maximum number of journal log entries to batch on recovery for a shard before committing to the data store.";
          }
@@ -129,11 +136,21 @@ module distributed-datastore-provider {
          }
 
          leaf shard-transaction-commit-queue-capacity {
-            default 20000;
+            default 50000;
             type non-zero-uint32-type;
             description "The maximum allowed capacity for each shard's transaction commit queue.";
          }
 
+         leaf shard-commit-queue-expiry-timeout-in-seconds {
+             default 120; // 2 minutes
+             type non-zero-uint32-type;
+             description "The maximum amount of time a transaction can remain in a shard's commit queue waiting 
+                 to begin the CanCommit phase as coordinated by the broker front-end. Normally this should be
+                 quick but latencies can occur in between transaction ready and CanCommit or a remote broker
+                 could lose connection and CanCommit might never occur. Expiring transactions from the queue
+                 allows subsequent pending transaction to be processed.";
+         }
+         
          leaf shard-initialization-timeout-in-seconds {
             default 300; // 5 minutes
             type non-zero-uint32-type;
@@ -149,6 +166,15 @@ module distributed-datastore-provider {
                           an operation (eg transaction create).";
          }
 
+         leaf shard-batched-modification-count {
+            default 1000;
+            type non-zero-uint32-type;
+            description "The number of transaction modification operations (put, merge, delete) to
+                        batch before sending to the shard transaction actor. Batching improves
+                        performance as less modifications messages are sent to the actor and thus
+                        lessens the chance that the transaction actor's mailbox queue could get full.";
+         }
+
          leaf enable-metric-capture {
             default false;
             type boolean;
@@ -167,12 +193,38 @@ module distributed-datastore-provider {
             description "Enable or disable data persistence";
          }
 
-        leaf shard-isolated-leader-check-interval-in-millis {
+         leaf shard-isolated-leader-check-interval-in-millis {
             default 5000;
             type heartbeat-interval-type;
             description "The interval at which the leader of the shard will check if its majority
                         followers are active and term itself as isolated";
-        }
+         }
+
+         leaf transaction-creation-initial-rate-limit {
+            default 100;
+            type non-zero-uint32-type;
+            description "The initial number of transactions per second that are allowed before the data store
+                         should begin applying back pressure. This number is only used as an initial guidance,
+                         subsequently the datastore measures the latency for a commit and auto-adjusts the rate limit";
+         }
+         
+         leaf transaction-debug-context-enabled {
+             default false;
+             type boolean;
+             description "Enable or disable transaction context debug. This will log the call site trace for
+                          transactions that fail";
+         }
+
+         leaf custom-raft-policy-implementation {
+            default "";
+            type string;
+            description "A fully qualified java class name. The class should implement
+                         org.opendaylight.controller.cluster.raft.policy.RaftPolicy. This java class should be
+                         accessible to the distributed data store OSGi module so that it can be dynamically loaded via
+                         reflection. For now let's assume that these classes to customize raft behaviors should be
+                         present in the distributed data store module itself. If this property is set to a class which
+                         cannot be found then the default raft behavior will be applied";
+         }
     }
 
     // Augments the 'configuration' choice node under modules/module.