Cluster

Struct Cluster 

Source
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>

Source

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.

Source

pub fn path(&self) -> Path

Return your own path

Source

pub fn primary(&self) -> bool

Returns true if this cluster member is the primary, false otherwise. May change after poll_members.

Source

pub fn others(&self) -> usize

Source

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.

Source

pub async fn wait_cmds(&mut self) -> Result<Vec<T>>

Wait for some commands from other members of the cluster.

Source

pub fn send_cmd(&self, cmd: &T)

Send a command out to other members of the cluster.

Source

pub fn send_cmd_to_one(&self, path: &Path, cmd: &T)

Send a command to just one other, identified by it’s path.

Auto Trait Implementations§

§

impl<T> Freeze for Cluster<T>

§

impl<T> !RefUnwindSafe for Cluster<T>

§

impl<T> Send for Cluster<T>
where T: Send,

§

impl<T> Sync for Cluster<T>
where T: Sync,

§

impl<T> Unpin for Cluster<T>
where T: Unpin,

§

impl<T> !UnwindSafe for Cluster<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V