pub struct Cluster<T: Pack> { /* private fields */ }Expand description
Simple clustering based on netidx. Each member publishes a uuid to
a common base path, which is used to discover all other
members. Commands may be sent to and received from all other
members as broadcasts. On initialization all members wait until
there are at least shards other members before starting
operations. There can be more than shards members at any time,
and members can enter and leave the cluster at will. It is up to
the user to ensure state integrity under these constraints.
A random cluster member is elected ‘primary’ by an common algorithm, the primary may change as members join and leave the cluster, but with a stable member set all members will agree on which one is the primary.
Implementations§
Source§impl<T: Pack> Cluster<T>
impl<T: Pack> Cluster<T>
Sourcepub async fn new(
publisher: &Publisher,
subscriber: Subscriber,
base: Path,
shards: usize,
) -> Result<Cluster<T>>
pub async fn new( publisher: &Publisher, subscriber: Subscriber, base: Path, shards: usize, ) -> Result<Cluster<T>>
Create a new cluster directly under base. It’s wise to
ensure nothing else is publishing under base.
Sourcepub fn primary(&self) -> bool
pub fn primary(&self) -> bool
Returns true if this cluster member is the primary, false
otherwise. May change after poll_members.
pub fn others(&self) -> usize
Sourcepub async fn poll_members(&mut self) -> Result<bool>
pub async fn poll_members(&mut self) -> Result<bool>
Poll the resolvers to see if any new members have joined the cluster, return true if new members have potentially joined, false if no new members have joined.
Sourcepub async fn wait_cmds(&mut self) -> Result<Vec<T>>
pub async fn wait_cmds(&mut self) -> Result<Vec<T>>
Wait for some commands from other members of the cluster.
Sourcepub fn send_cmd_to_one(&self, path: &Path, cmd: &T)
pub fn send_cmd_to_one(&self, path: &Path, cmd: &T)
Send a command to just one other, identified by it’s path.