}
}
- 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;
rpc add-shard-replica {
input {
- leaf shard-name {
- mandatory true;
- type string;
- description "The name of the shard for which to create a replica.";
- }
-
- leaf data-store-type {
- mandatory true;
- type data-store-type;
- description "The type of the data store to which the replica belongs";
- }
+ 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.";
+ 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 {
- leaf shard-name {
- mandatory true;
- type string;
- description "The name of the shard for which to remove the replica.";
- }
+ uses datastore-shard-id;
leaf member-name {
mandatory true;
type string;
description "The cluster member from which the shard replica should be removed";
}
-
- leaf data-store-type {
- mandatory true;
- type data-store-type;
- description "The type of the data store to which the replica belongs";
- }
}
description "Removes an existing replica of a shard from this node via the RemoveServer mechanism as
- described in the Raft paper.";
+ 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 {
}
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.";
+ 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-prefix-shard-replica {
}
description "Removes an existing replica of a prefix shard from this node via the RemoveServer mechanism as
- described in the Raft paper.";
+ described in the Raft paper.";
}
rpc add-replicas-for-all-shards {
}
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 {
}
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 {
}
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 {
}
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 {
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.";
+ }
+}