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 e2ee7373d0cfd3c4a68ec98a221fd1a121f4f13c..fcd4a301dbeeaff30085fd8476b2972346271847 100644 (file)
@@ -104,7 +104,7 @@ 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.";
@@ -124,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.";
          }
@@ -136,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;
@@ -156,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;
@@ -174,20 +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 tx-creation-initial-rate-limit {
+         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.