Skip to main content

Candidates

Struct Candidates 

Source
pub struct Candidates<'a> { /* private fields */ }
Expand description

The candidates of one selection: a borrowed view of a cluster’s backend list, restricted to the positions a caller retained.

BackendList retains one position per address: when several eligible ids share an address, only their representative (outranks_at_address) is a candidate, so every policy gives that address the share of one backend.

Position i of the view is backends[indices[i]], so a policy that indexes the view (RoundRobin’s cursor, PowerOfTwo’s two samples, Random’s draw) computes exactly the index it computed over the Vec of cloned candidates this view replaces. Building the view borrows and copies nothing: the caller owns indices, and only the backend a policy returns has its Rc cloned.

The view also carries the instant the selection happens at, which a policy reading LoadMetric::ConnectionTime decays each average to: no policy reads a clock of its own (#1684).

Implementations§

Source§

impl<'a> Candidates<'a>

Source

pub fn new( backends: &'a [Rc<RefCell<Backend>>], indices: &'a [usize], now: Instant, ) -> Self

View backends through indices for a selection at now. Every index must address a slot of backends, and the indices must be strictly increasing.

Source

pub fn with_siblings( backends: &'a [Rc<RefCell<Backend>>], indices: &'a [usize], siblings: &'a [usize], now: Instant, ) -> Self

Candidates::new with the sibling ring of backends (see the field docs), which Candidates::siblings walks so a load-aware policy can read the load of a whole address.

Source

pub fn siblings( &self, index: usize, ) -> impl Iterator<Item = &'a Rc<RefCell<Backend>>> + use<'a>

Every OTHER backend at the address of the candidate at index, eligible or not: the ids a collapsed address hides behind its representative. Empty without a sibling ring, and for an address with one id, which costs one read.

Source

pub fn now(&self) -> Instant

The instant this selection happens at.

Source

pub fn len(&self) -> usize

Source

pub fn is_empty(&self) -> bool

Source

pub fn get(&self, index: usize) -> Option<&'a Rc<RefCell<Backend>>>

The candidate at position index of the view.

Source

pub fn iter( &self, ) -> impl ExactSizeIterator<Item = &'a Rc<RefCell<Backend>>> + use<'a>

The candidates in view order.

Trait Implementations§

Source§

impl<'a> Clone for Candidates<'a>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Copy for Candidates<'a>

Source§

impl<'a> Debug for Candidates<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Index<usize> for Candidates<'_>

Source§

type Output = Rc<RefCell<Backend>>

The returned type after indexing.
Source§

fn index(&self, index: usize) -> &Self::Output

Performs the indexing (container[index]) operation. Read more

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for Candidates<'a>

§

impl<'a> !Send for Candidates<'a>

§

impl<'a> !Sync for Candidates<'a>

§

impl<'a> !UnwindSafe for Candidates<'a>

§

impl<'a> Freeze for Candidates<'a>

§

impl<'a> Unpin for Candidates<'a>

§

impl<'a> UnsafeUnpin for Candidates<'a>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.