Merge "Initial heartbeats not sent by Leader"
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / yang / distributed-datastore-provider.yang
1 // vi: set smarttab et sw=4 tabstop=4:
2 module distributed-datastore-provider {
3
4     yang-version 1;
5     namespace "urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider";
6     prefix "distributed-datastore-provider";
7
8     import config { prefix config; revision-date 2013-04-05; }
9     import rpc-context { prefix rpcx; revision-date 2013-06-17; }
10     import opendaylight-config-dom-datastore {prefix config-dom-store-spi;}
11     import opendaylight-operational-dom-datastore {prefix operational-dom-store-spi;}
12     import opendaylight-md-sal-dom {prefix sal;}
13
14     description
15         "This module contains the base YANG definitions for
16         the distributed datastore provider implementation";
17
18     revision "2014-06-12" {
19         description
20             "Initial revision.";
21     }
22
23     // This is the definition of the service implementation as a module identity.
24     identity distributed-config-datastore-provider {
25             base config:module-type;
26             config:provided-service config-dom-store-spi:config-dom-datastore;
27             // Specifies the prefix for generated java classes.
28             config:java-name-prefix DistributedConfigDataStoreProvider;
29     }
30
31      // This is the definition of the service implementation as a module identity.
32      identity distributed-operational-datastore-provider {
33                 base config:module-type;
34                 config:provided-service operational-dom-store-spi:operational-dom-datastore;
35                 // Specifies the prefix for generated java classes.
36                 config:java-name-prefix DistributedOperationalDataStoreProvider;
37      }
38
39     typedef non-zero-uint32-type {
40         type uint32 {
41             range "1..max";
42         }
43     }
44
45     typedef operation-timeout-type {
46         type uint16 {
47             range "5..max";
48         }
49     }
50
51     typedef heartbeat-interval-type {
52         type uint16 {
53             range "100..max";
54         }
55     }
56
57     typedef percentage {
58         type uint8 {
59             range "0..100";
60         }
61     }
62
63     grouping data-store-properties {
64         leaf max-shard-data-change-executor-queue-size {
65             default 1000;
66             type non-zero-uint32-type;
67             description "The maximum queue size for each shard's data store data change notification executor.";
68          }
69
70          leaf max-shard-data-change-executor-pool-size {
71             default 20;
72             type non-zero-uint32-type;
73             description "The maximum thread pool size for each shard's data store data change notification executor.";
74          }
75
76          leaf max-shard-data-change-listener-queue-size {
77             default 1000;
78             type non-zero-uint32-type;
79             description "The maximum queue size for each shard's data store data change listener.";
80          }
81
82          leaf max-shard-data-store-executor-queue-size {
83             default 5000;
84             type non-zero-uint32-type;
85             description "The maximum queue size for each shard's data store executor.";
86          }
87
88          leaf shard-transaction-idle-timeout-in-minutes {
89             default 10;
90             type non-zero-uint32-type;
91             description "The maximum amount of time a shard transaction can be idle without receiving any messages before it self-destructs.";
92          }
93
94          leaf shard-snapshot-batch-count {
95             default 20000;
96             type non-zero-uint32-type;
97             description "The minimum number of entries to be present in the in-memory journal log before a snapshot is to be taken.";
98          }
99
100          leaf shard-snapshot-data-threshold-percentage {
101             default 12;
102             type percentage;
103             description "The percentage of Runtime.totalMemory() used by the in-memory journal log before a snapshot is to be taken";
104          }
105
106
107          leaf shard-hearbeat-interval-in-millis {
108             default 500;
109             type heartbeat-interval-type;
110             description "The interval at which a shard will send a heart beat message to its remote shard.";
111          }
112
113          leaf shard-election-timeout-factor {
114             default 2;
115             type non-zero-uint32-type;
116             description "The multiplication factor to be used to determine shard election timeout. The shard election timeout
117                          is determined by multiplying shard-heartbeat-interval-in-millis with the shard-election-timeout-factor";
118          }
119
120          leaf operation-timeout-in-seconds {
121             default 5;
122             type operation-timeout-type;
123             description "The maximum amount of time for akka operations (remote or local) to complete before failing.";
124          }
125
126          leaf shard-journal-recovery-log-batch-size {
127             default 5000;
128             type non-zero-uint32-type;
129             description "The maximum number of journal log entries to batch on recovery for a shard before committing to the data store.";
130          }
131
132          leaf shard-transaction-commit-timeout-in-seconds {
133             default 30;
134             type non-zero-uint32-type;
135             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";
136          }
137
138          leaf shard-transaction-commit-queue-capacity {
139             default 20000;
140             type non-zero-uint32-type;
141             description "The maximum allowed capacity for each shard's transaction commit queue.";
142          }
143
144          leaf shard-initialization-timeout-in-seconds {
145             default 300; // 5 minutes
146             type non-zero-uint32-type;
147             description "The maximum amount of time to wait for a shard to initialize from persistence
148                          on startup before failing an operation (eg transaction create and change
149                          listener registration).";
150          }
151
152          leaf shard-leader-election-timeout-in-seconds {
153             default 30;
154             type non-zero-uint32-type;
155             description "The maximum amount of time to wait for a shard to elect a leader before failing
156                           an operation (eg transaction create).";
157          }
158
159          leaf enable-metric-capture {
160             default false;
161             type boolean;
162             description "Enable or disable metric capture.";
163          }
164
165          leaf bounded-mailbox-capacity {
166              default 1000;
167              type non-zero-uint32-type;
168              description "Max queue size that an actor's mailbox can reach";
169          }
170
171          leaf persistent {
172             default true;
173             type boolean;
174             description "Enable or disable data persistence";
175          }
176
177         leaf shard-isolated-leader-check-interval-in-millis {
178             default 5000;
179             type heartbeat-interval-type;
180             description "The interval at which the leader of the shard will check if its majority
181                         followers are active and term itself as isolated";
182         }
183
184         leaf tx-creation-initial-rate-limit {
185             default 100;
186             type non-zero-uint32-type;
187             description "The initial number of transactions per second that are allowed before the data store
188                          should begin applying back pressure. This number is only used as an initial guidance,
189                          subsequently the datastore measures the latency for a commit and auto-adjusts the rate limit";
190         }
191     }
192
193     // Augments the 'configuration' choice node under modules/module.
194     augment "/config:modules/config:module/config:configuration" {
195         case distributed-config-datastore-provider {
196             when "/config:modules/config:module/config:type = 'distributed-config-datastore-provider'";
197                 container config-schema-service {
198                     uses config:service-ref {
199                         refine type {
200                             mandatory false;
201                             config:required-identity sal:schema-service;
202                         }
203                     }
204                 }
205
206                 container config-properties {
207                     uses data-store-properties;
208                 }
209         }
210     }
211
212     // Augments the 'configuration' choice node under modules/module.
213     augment "/config:modules/config:module/config:configuration" {
214         case distributed-operational-datastore-provider {
215             when "/config:modules/config:module/config:type = 'distributed-operational-datastore-provider'";
216                 container operational-schema-service {
217                     uses config:service-ref {
218                         refine type {
219                             mandatory false;
220                             config:required-identity sal:schema-service;
221                         }
222                     }
223                 }
224
225                 container operational-properties {
226                     uses data-store-properties;
227                 }
228         }
229     }
230 }