1 // vi: set smarttab et sw=4 tabstop=4:
2 module distributed-datastore-provider {
5 namespace "urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider";
6 prefix "distributed-datastore-provider";
9 "This module contains the base YANG definitions for
10 the distributed datastore provider implementation";
12 revision "2014-06-12" {
17 typedef non-zero-uint32-type {
23 typedef operation-timeout-type {
29 typedef heartbeat-interval-type {
41 grouping data-store-properties {
42 leaf max-shard-data-change-executor-queue-size {
44 type non-zero-uint32-type;
45 description "The maximum queue size for each shard's data store data change notification executor.";
48 leaf max-shard-data-change-executor-pool-size {
50 type non-zero-uint32-type;
51 description "The maximum thread pool size for each shard's data store data change notification executor.";
54 leaf max-shard-data-change-listener-queue-size {
56 type non-zero-uint32-type;
57 description "The maximum queue size for each shard's data store data change listener.";
60 leaf max-shard-data-store-executor-queue-size {
62 type non-zero-uint32-type;
63 description "The maximum queue size for each shard's data store executor.";
66 leaf shard-transaction-idle-timeout-in-minutes {
68 type non-zero-uint32-type;
69 description "The maximum amount of time a shard transaction can be idle without receiving any messages before it self-destructs.";
72 leaf shard-snapshot-batch-count {
74 type non-zero-uint32-type;
75 description "The minimum number of entries to be present in the in-memory journal log before a snapshot is to be taken.";
78 leaf shard-snapshot-data-threshold-percentage {
81 description "The percentage of Runtime.maxMemory() used by the in-memory journal log before a snapshot is to be taken";
85 leaf shard-heartbeat-interval-in-millis {
87 type heartbeat-interval-type;
88 description "The interval at which a shard will send a heart beat message to its remote shard.";
91 leaf shard-election-timeout-factor {
93 type non-zero-uint32-type;
94 description "The multiplication factor to be used to determine shard election timeout. The shard election timeout
95 is determined by multiplying shard-heartbeat-interval-in-millis with the shard-election-timeout-factor";
98 leaf operation-timeout-in-seconds {
100 type operation-timeout-type;
101 description "The maximum amount of time for akka operations (remote or local) to complete before failing.";
104 leaf shard-journal-recovery-log-batch-size {
106 type non-zero-uint32-type;
107 description "The maximum number of journal log entries to batch on recovery for a shard before committing to the data store.";
110 leaf shard-transaction-commit-timeout-in-seconds {
112 type non-zero-uint32-type;
113 description "The maximum amount of time a shard transaction three-phase commit can be idle without receiving the next messages before it aborts the transaction";
116 leaf shard-transaction-commit-queue-capacity {
118 type non-zero-uint32-type;
119 description "The maximum allowed capacity for each shard's transaction commit queue.";
122 leaf shard-commit-queue-expiry-timeout-in-seconds {
123 default 120; // 2 minutes
124 type non-zero-uint32-type;
125 description "The maximum amount of time a transaction can remain in a shard's commit queue waiting
126 to begin the CanCommit phase as coordinated by the broker front-end. Normally this should be
127 quick but latencies can occur in between transaction ready and CanCommit or a remote broker
128 could lose connection and CanCommit might never occur. Expiring transactions from the queue
129 allows subsequent pending transaction to be processed.";
132 leaf shard-initialization-timeout-in-seconds {
133 default 300; // 5 minutes
134 type non-zero-uint32-type;
135 description "The maximum amount of time to wait for a shard to initialize from persistence
136 on startup before failing an operation (eg transaction create and change
137 listener registration).";
140 leaf shard-leader-election-timeout-in-seconds {
142 type non-zero-uint32-type;
143 description "The maximum amount of time to wait for a shard to elect a leader before failing
144 an operation (eg transaction create).";
147 leaf initial-settle-timeout-multiplier {
150 description "Multiplier for the maximum amount of time to wait for a shard to elect a leader.
151 Zero value means wait indefinitely (as long as it takes).";
154 leaf recovery-snapshot-interval-seconds {
157 description "Interval after which a snapshot should be taken during the recovery process.";
160 leaf shard-batched-modification-count {
162 type non-zero-uint32-type;
163 description "The number of transaction modification operations (put, merge, delete) to
164 batch before sending to the shard transaction actor. Batching improves
165 performance as less modifications messages are sent to the actor and thus
166 lessens the chance that the transaction actor's mailbox queue could get full.";
169 leaf enable-metric-capture {
172 description "Enable or disable metric capture.";
175 leaf bounded-mailbox-capacity {
177 type non-zero-uint32-type;
178 description "Max queue size that an actor's mailbox can reach";
184 description "Enable or disable data persistence";
187 leaf snapshotOnRootOverwrite {
190 description "Enable or disable capturing snapshots on DataTree root overwrites";
193 leaf shard-isolated-leader-check-interval-in-millis {
195 type heartbeat-interval-type;
196 description "The interval at which the leader of the shard will check if its majority
197 followers are active and term itself as isolated";
200 leaf transaction-creation-initial-rate-limit {
202 type non-zero-uint32-type;
203 description "The initial number of transactions per second that are allowed before the data store
204 should begin applying back pressure. This number is only used as an initial guidance,
205 subsequently the datastore measures the latency for a commit and auto-adjusts the rate limit";
208 leaf transaction-debug-context-enabled {
211 description "Enable or disable transaction context debug. This will log the call site trace for
212 transactions that fail";
215 leaf custom-raft-policy-implementation {
218 description "A fully qualified java class name. The class should implement
219 org.opendaylight.controller.cluster.raft.policy.RaftPolicy. This java class should be
220 accessible to the distributed data store OSGi module so that it can be dynamically loaded via
221 reflection. For now let's assume that these classes to customize raft behaviors should be
222 present in the distributed data store module itself. If this property is set to a class which
223 cannot be found then the default raft behavior will be applied";
226 leaf shard-snapshot-chunk-size {
229 type non-zero-uint32-type;
230 description "When sending a snapshot to a follower, this is the maximum size in bytes for
234 leaf maximum-message-slice-size {
236 type non-zero-uint32-type;
237 description "When fragmenting messages thru the akka remoting framework, this is the
238 maximum size in bytes for a message slice.";
241 leaf use-tell-based-protocol {
244 description "Use a newer protocol between the frontend and backend. This feature is considered
245 exprerimental at this point.";
248 leaf file-backed-streaming-threshold-in-megabytes {
250 type non-zero-uint32-type;
251 description "When streaming large amounts of data, eg when sending a snapshot to a follower, this
252 is the threshold in terms of number of megabytes before it should switch from storing in memory to
253 buffering to a file.";
256 leaf sync-index-threshold {
258 type non-zero-uint32-type;
259 description "Permitted synchronization lag, expressed in terms of RAFT entry count. It a follower's
260 commitIndex trails the leader's journal by more than this amount of entries the follower
261 is considered to be out-of-sync.";
264 leaf backend-aliveness-timer-interval-in-seconds {
266 type non-zero-uint32-type;
267 description "The timer interval whereby, on expiration after response inactivity from the back-end,
268 the connection to the back-end is torn down and reconnection is attempted.";
271 leaf frontend-request-timeout-in-seconds {
272 default 120; // 2 minutes
273 type non-zero-uint32-type;
274 description "The timeout interval whereby client frontend transaction requests are failed.";
277 leaf frontend-no-progress-timeout-in-seconds {
278 default 900; // 15 minutes
279 type non-zero-uint32-type;
280 description "The timeout interval whereby the client front-end hasn't made progress with the
281 back-end on any request and terminates.";
284 leaf initial-payload-serialized-buffer-capacity {
286 type non-zero-uint32-type;
287 description "The initial buffer capacity, in bytes, to use when serializing message payloads.";
291 container data-store-properties-container {
292 uses data-store-properties;