8a3c58a16279f25d7e4a8d2375ea52c898ef4e40
[controller.git] / opendaylight / md-sal / sal-cluster-admin-api / src / main / yang / cluster-admin.yang
1 module cluster-admin {
2     yang-version 1;
3     namespace "urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin";
4     prefix "cluster-admin";
5
6     description
7         "This module contains YANG RPC definitions for administering a cluster.";
8
9     revision "2015-10-13" {
10         description "Initial revision.";
11     }
12
13     typedef data-store-type {
14         type enumeration {
15             enum config {
16                 value 1;
17             }
18             enum operational {
19                 value 2;
20             }
21         }
22     }
23
24     grouping shard-operation-result {
25         leaf shard-name {
26             type string;
27         }
28
29         leaf data-store-type {
30             type data-store-type;
31         }
32
33         leaf succeeded {
34             type boolean;
35         }
36
37         leaf error-message {
38             type string;
39         }
40     }
41
42     grouping shard-result-output {
43         list shard-result {
44             key "shard-name data-store-type";
45             uses shard-operation-result;
46
47             description "The list of results, one per shard";
48         }
49     }
50
51     grouping member-voting-states-input {
52         list member-voting-state {
53             leaf member-name {
54                 type string;
55             }
56
57             leaf voting {
58                 type boolean;
59             }
60
61             description "The list of member voting states";
62         }
63     }
64
65     rpc add-shard-replica {
66         input {
67             leaf shard-name {
68                 mandatory true;
69                 type string;
70                 description "The name of the shard for which to create a replica.";
71             }
72
73             leaf data-store-type {
74                 mandatory true;
75                 type data-store-type;
76                 description "The type of the data store to which the replica belongs";
77             }
78         }
79
80         description "Adds a replica of a shard to this node and joins it to an existing cluster. The shard must
81             already have a module configuration defined for it and there must already be a shard existing on
82             another node with a leader. This RPC first contacts peer member seed nodes searching for a shard.
83             When found, an AddServer message is sent to the shard leader and applied as described in the Raft
84             paper.";
85     }
86
87     rpc remove-shard-replica {
88         input {
89             leaf shard-name {
90                 mandatory true;
91                 type string;
92                 description "The name of the shard for which to remove the replica.";
93             }
94
95             leaf member-name {
96                 mandatory true;
97                 type string;
98                 description "The cluster member from which the shard replica should be removed";
99             }
100
101             leaf data-store-type {
102                 mandatory true;
103                 type data-store-type;
104                 description "The type of the data store to which the replica belongs";
105             }
106         }
107
108         description "Removes an existing replica of a shard from this node via the RemoveServer mechanism as
109             described in the Raft paper.";
110     }
111
112     rpc add-prefix-shard-replica {
113         input {
114             leaf shard-prefix {
115                 mandatory true;
116                 type instance-identifier;
117             }
118
119             leaf data-store-type {
120                 mandatory true;
121                 type data-store-type;
122                 description "The type of the data store to which the replica belongs";
123             }
124         }
125
126         description "Adds a replica of a shard to this node and joins it to an existing cluster. There must already be
127                     a shard existing on another node with a leader. This RPC first contacts peer member seed nodes
128                     searching for a shard. When found, an AddServer message is sent to the shard leader and applied as
129                     described in the Raft paper.";
130     }
131
132     rpc remove-prefix-shard-replica {
133         input {
134             leaf shard-prefix {
135                 mandatory true;
136                 type instance-identifier;
137             }
138             leaf member-name {
139                 mandatory true;
140                 type string;
141                 description "The cluster member from which the shard replica should be removed";
142             }
143
144             leaf data-store-type {
145                 mandatory true;
146                 type data-store-type;
147                 description "The type of the data store to which the replica belongs";
148             }
149         }
150
151         description "Removes an existing replica of a prefix shard from this node via the RemoveServer mechanism as
152                     described in the Raft paper.";
153     }
154
155     rpc add-replicas-for-all-shards {
156         output {
157             uses shard-result-output;
158         }
159
160         description "Adds replicas on this node for all currently defined shards. This is equivalent to issuing
161             an add-shard-replica RPC for all shards.";
162     }
163
164     rpc remove-all-shard-replicas {
165         input {
166             leaf member-name {
167                 mandatory true;
168                 type string;
169                 description "The cluster member from which the shard replicas should be removed";
170             }
171         }
172
173         output {
174             uses shard-result-output;
175         }
176
177         description "Removes replicas for all shards on this node. This is equivalent to issuing
178             a remove-shard-replica for all shards and essentially removes this node from a cluster.";
179     }
180
181     rpc change-member-voting-states-for-shard {
182         input {
183             leaf shard-name {
184                 mandatory true;
185                 type string;
186                 description "The name of the shard for which to change voting state.";
187             }
188
189             leaf data-store-type {
190                 mandatory true;
191                 type data-store-type;
192                 description "The type of the data store to which the shard belongs";
193             }
194
195             uses member-voting-states-input;
196         }
197
198         description "Changes the voting states, either voting or non-voting, of cluster members for a shard.
199             Non-voting members will no longer participate in leader elections and consensus but will be
200             replicated. This is useful for having a set of members serve as a backup cluster in case the
201             primary voting cluster suffers catastrophic failure. This RPC can be issued to any cluster member
202             and will be forwarded to the leader.";
203     }
204
205     rpc change-member-voting-states-for-all-shards {
206         input {
207             uses member-voting-states-input;
208         }
209
210         output {
211             uses shard-result-output;
212         }
213
214         description "Changes the voting states, either voting or non-voting, of cluster members for all shards.
215             Non-voting members will no longer participate in leader elections and consensus but will be
216             replicated. This is useful for having a set of members serve as a backup cluster in case the
217             primary voting cluster suffers catastrophic failure. This RPC can be issued to any cluster member
218             and will be forwarded to the leader.";
219     }
220
221     rpc flip-member-voting-states-for-all-shards {
222         output {
223             uses shard-result-output;
224         }
225
226         description "Flips the voting states of all cluster members for all shards, such that if a member
227             was voting it becomes non-voting and vice versa.";
228     }
229
230     rpc backup-datastore {
231         input {
232             leaf file-path {
233               type string;
234               description "The path and name of the file in which to store the backup.";
235             }
236         }
237
238         description "Creates a backup file of the datastore state";
239     }
240 }