+
+ 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.";
+ }
+
+ rpc get-known-clients-for-all-shards {
+ description "Request all shards to report their known frontend clients. This is useful for determining what
+ generation should a resurrected member node should use.";
+
+ output {
+ uses shard-result-output {
+ augment shard-result {
+ list known-clients {
+ when "../succeeded = true";
+
+ uses cds:client-identifier;
+ key "member type";
+ }
+ }
+ }
+ }
+ }
+}