X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-cluster-admin-api%2Fsrc%2Fmain%2Fyang%2Fcluster-admin.yang;h=bb0eed38b28e59f45a1f5fe3985d4fddca4b82fc;hb=refs%2Fchanges%2F38%2F85038%2F5;hp=40fb5fbe7118fc18dd7a5c03889fbc31ca48c45f;hpb=2c0ee923c337f628fd0115f780c21868e6422c11;p=controller.git diff --git a/opendaylight/md-sal/sal-cluster-admin-api/src/main/yang/cluster-admin.yang b/opendaylight/md-sal/sal-cluster-admin-api/src/main/yang/cluster-admin.yang index 40fb5fbe71..bb0eed38b2 100644 --- a/opendaylight/md-sal/sal-cluster-admin-api/src/main/yang/cluster-admin.yang +++ b/opendaylight/md-sal/sal-cluster-admin-api/src/main/yang/cluster-admin.yang @@ -21,14 +21,29 @@ module cluster-admin { } } - grouping shard-operation-result { + grouping datastore-shard-id { + description "Grouping holding combined identifiers of a shard -- its name and datastore type"; + leaf shard-name { - type string; + description "The name of the shard."; + mandatory true; + type string { + length "1..max" { + error-app-tag "odl-named-shards"; + error-message "Shard name must not be empty"; + } + } } leaf data-store-type { + mandatory true; type data-store-type; + description "The type of the data store to which the shard belongs"; } + } + + grouping shard-operation-result { + uses datastore-shard-id; leaf succeeded { type boolean; @@ -64,10 +79,49 @@ module cluster-admin { rpc add-shard-replica { input { - leaf shard-name { + uses datastore-shard-id; + } + + description "Adds a replica of a shard to this node and joins it to an existing cluster. The shard must + already have a module configuration defined for it and there must already be a shard existing on + another node with a leader. This RPC first contacts peer member seed nodes searching for a shard. + When found, an AddServer message is sent to the shard leader and applied as described in the Raft + paper."; + } + + rpc remove-shard-replica { + input { + uses datastore-shard-id; + + leaf member-name { mandatory true; type string; - description "The name of the shard for which to create a replica."; + description "The cluster member from which the shard replica should be removed"; + } + } + + description "Removes an existing replica of a shard from this node via the RemoveServer mechanism as + described in the Raft paper."; + } + + rpc make-leader-local { + input { + uses datastore-shard-id; + } + + description "Attempts to move the shard leader of the given module based shard to the local node. + The rpc returns a response after handling of the underlying MakeLeaderLocal message completes. + This operation fails if there is no current shard leader due to lack of network connectivity or + a cluster majority. In addition, if the local node is not up to date with the current leader, + an attempt is made to first sync the local node with the leader. If this cannot be achieved + within two election timeout periods the operation fails."; + } + + rpc add-prefix-shard-replica { + input { + leaf shard-prefix { + mandatory true; + type instance-identifier; } leaf data-store-type { @@ -77,21 +131,18 @@ module cluster-admin { } } - description "Adds a replica of a shard to this node and joins it to an existing cluster. The shard must - already have a module configuration defined for it and there must already be a shard existing on - another node with a leader. This RPC first contacts peer member seed nodes searching for a shard. - When found, an AddServer message is sent to the shard leader and applied as described in the Raft - paper."; + description "Adds a replica of a shard to this node and joins it to an existing cluster. There must already be + a shard existing on another node with a leader. This RPC first contacts peer member seed nodes + searching for a shard. When found, an AddServer message is sent to the shard leader and applied as + described in the Raft paper."; } - rpc remove-shard-replica { + rpc remove-prefix-shard-replica { input { - leaf shard-name { + leaf shard-prefix { mandatory true; - type string; - description "The name of the shard for which to remove the replica."; + type instance-identifier; } - leaf member-name { mandatory true; type string; @@ -105,8 +156,8 @@ module cluster-admin { } } - description "Removes an existing replica of a shard from this node via the RemoveServer mechanism as - described in the Raft paper."; + description "Removes an existing replica of a prefix shard from this node via the RemoveServer mechanism as + described in the Raft paper."; } rpc add-replicas-for-all-shards { @@ -115,7 +166,7 @@ module cluster-admin { } description "Adds replicas on this node for all currently defined shards. This is equivalent to issuing - an add-shard-replica RPC for all shards."; + an add-shard-replica RPC for all shards."; } rpc remove-all-shard-replicas { @@ -132,31 +183,20 @@ module cluster-admin { } description "Removes replicas for all shards on this node. This is equivalent to issuing - a remove-shard-replica for all shards and essentially removes this node from a cluster."; + a remove-shard-replica for all shards and essentially removes this node from a cluster."; } rpc change-member-voting-states-for-shard { input { - leaf shard-name { - mandatory true; - type string; - description "The name of the shard for which to change voting state."; - } - - leaf data-store-type { - mandatory true; - type data-store-type; - description "The type of the data store to which the shard belongs"; - } - + uses datastore-shard-id; uses member-voting-states-input; } description "Changes the voting states, either voting or non-voting, of cluster members for a shard. - Non-voting members will no longer participate in leader elections and consensus but will be - replicated. This is useful for having a set of members serve as a backup cluster in case the - primary voting cluster suffers catastrophic failure. This RPC can be issued to any cluster member - and will be forwarded to the leader."; + Non-voting members will no longer participate in leader elections and consensus but will be + replicated. This is useful for having a set of members serve as a backup cluster in case the + primary voting cluster suffers catastrophic failure. This RPC can be issued to any cluster member + and will be forwarded to the leader."; } rpc change-member-voting-states-for-all-shards { @@ -169,10 +209,10 @@ module cluster-admin { } description "Changes the voting states, either voting or non-voting, of cluster members for all shards. - Non-voting members will no longer participate in leader elections and consensus but will be - replicated. This is useful for having a set of members serve as a backup cluster in case the - primary voting cluster suffers catastrophic failure. This RPC can be issued to any cluster member - and will be forwarded to the leader."; + Non-voting members will no longer participate in leader elections and consensus but will be + replicated. This is useful for having a set of members serve as a backup cluster in case the + primary voting cluster suffers catastrophic failure. This RPC can be issued to any cluster member + and will be forwarded to the leader."; } rpc flip-member-voting-states-for-all-shards { @@ -181,7 +221,7 @@ module cluster-admin { } description "Flips the voting states of all cluster members for all shards, such that if a member - was voting it becomes non-voting and vice versa."; + was voting it becomes non-voting and vice versa."; } rpc backup-datastore { @@ -194,4 +234,69 @@ module cluster-admin { description "Creates a backup file of the datastore state"; } -} \ No newline at end of file + + rpc get-shard-role { + input { + uses datastore-shard-id; + } + + output { + leaf role { + type string; + description "Current role for the given shard, if not present the shard currently does not have a role"; + } + } + + description "Returns the current role for the requested module shard."; + } + + rpc locate-shard { + description "Return the transport-level information about where a shard has a home."; + input { + uses datastore-shard-id; + } + + output { + choice member-node { + description "Location of the hypothetical cluster member node. Relationship to the input parameters + and the transport protocol."; + + leaf local { + description "Local node is the best node to talk to when it comes from efficiency perspective + of underlying implementation. The requester of this RPC is advised to contact + any services to the specified shard via the channel on which this RPC was invoked."; + type empty; + } + + leaf leader-actor-ref { + description "Actor reference to the actor which is currently acting as the leader."; + type string; + } + } + } + } + + rpc get-prefix-shard-role { + input { + leaf shard-prefix { + mandatory true; + type instance-identifier; + } + + leaf data-store-type { + mandatory true; + type data-store-type; + description "The type of the data store to which the replica belongs"; + } + } + + output { + leaf role { + type string; + description "Current role for the given shard, if not present the shard currently does not have a role"; + } + } + + description "Returns the current role for the requested module shard."; + } +}