Struct holochain::prelude::dependencies::kitsune_p2p_types::dht::prelude::PeerViewQ
Expand description
The Quantized PeerView
Fields
topo: Topology
The topology of the network space
skip_index: Option<usize>
Omit the arq at this index from all peer considerations. Useful for tests which update all arqs, without needing to construct a new PeerView for each arq needing to be updated
Implementations
impl PeerViewQ
impl PeerViewQ
pub fn new(
topo: Topology,
strat: ArqStrat,
peers: Vec<Arq<DhtLocation>, Global>
) -> PeerViewQ
pub fn new(
topo: Topology,
strat: ArqStrat,
peers: Vec<Arq<DhtLocation>, Global>
) -> PeerViewQ
Constructor
pub fn actual_coverage(&self) -> f64
pub fn actual_coverage(&self) -> f64
The actual coverage of all arcs in this view. TODO: this only makes sense when the view contains all agents in the DHT. So, it’s more useful for testing. Probably want to tease out some concept of a test DHT from this.
pub fn extrapolated_coverage(&self, filter: &Arq<DhtLocation>) -> f64
pub fn extrapolated_coverage(&self, filter: &Arq<DhtLocation>) -> f64
Extrapolate the coverage of the entire network from our local view.
pub fn extrapolated_coverage_and_filtered_count(
&self,
filter: &Arq<DhtLocation>
) -> (f64, usize)
pub fn extrapolated_coverage_and_filtered_count(
&self,
filter: &Arq<DhtLocation>
) -> (f64, usize)
Return the extrapolated coverage and the number of arqs which match the filter. These two are complected together simply for efficiency’s sake, to minimize computation
TODO: this probably will be rewritten when PeerView is rewritten to have the filter baked in.
pub fn raw_coverage(&self, filter: &Arq<DhtLocation>) -> f64
pub fn raw_coverage(&self, filter: &Arq<DhtLocation>) -> f64
Compute the total coverage observed within the filter interval.
pub fn update_arq(&self, topo: &Topology, arq: &mut Arq<DhtLocation>) -> bool
pub fn update_arq(&self, topo: &Topology, arq: &mut Arq<DhtLocation>) -> bool
Mutate the arq to its ideal target
pub fn slack_factor(&self, cov: f64, num_peers: usize) -> f64
pub fn slack_factor(&self, cov: f64, num_peers: usize) -> f64
The “slacker” factor. If our observed coverage is significantly greater than the number of peers we see, it’s an indication that we may need to pick up more slack.
This check helps balance out stable but unequitable situations where all peers have a similar estimated coverage, but some peers are holding much more than others.
pub fn update_arq_with_stats(
&self,
topo: &Topology,
arq: &mut Arq<DhtLocation>
) -> UpdateArqStats
pub fn update_arq_with_stats(
&self,
topo: &Topology,
arq: &mut Arq<DhtLocation>
) -> UpdateArqStats
Take an arq and potentially resize and requantize it based on this view.
This represents an iterative step towards the ideal coverage, based on the observed coverage. This makes many assumptions, including:
- this arc resizing algorithm is a good one, namely that the coverage at any point of the DHT is close to the target range
- all other peers are following the same algorithm
- if we see a change that we need to make, we assume that a number of peers are about to make a similar change, and that number is on average the same as our target coverage
More detail on these assumptions here: https://hackmd.io/@hololtd/r1IAIbr5Y/https%3A%2F%2Fhackmd.io%2FK_fkBj6XQO2rCUZRRL9n2g TODO: make the above link to something publicly available, preferably in the repo
pub fn power_stats(
&self,
topo: &Topology,
filter: &Arq<DhtLocation>
) -> PowerStats
pub fn power_stats(
&self,
topo: &Topology,
filter: &Arq<DhtLocation>
) -> PowerStats
Gather statistics about the power levels of all arqs in this view. Used to make inferences about what your neighbors are up to.
Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for PeerViewQ
impl Send for PeerViewQ
impl Sync for PeerViewQ
impl Unpin for PeerViewQ
impl UnwindSafe for PeerViewQ
Blanket Implementations
impl<T> Any for Twhere
T: Any + ?Sized,
impl<T> Any for Twhere
T: Any + ?Sized,
fn type_id_compat(&self) -> TypeId
fn type_id_compat(&self) -> TypeId
impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
type ArchivedMetadata = ()
type ArchivedMetadata = ()
fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata
) -> <T as Pointee>::Metadata
fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata
) -> <T as Pointee>::Metadata
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<F, W, T, D> Deserialize<With<T, W>, D> for Fwhere
W: DeserializeWith<F, T, D>,
D: Fallible + ?Sized,
F: ?Sized,
impl<F, W, T, D> Deserialize<With<T, W>, D> for Fwhere
W: DeserializeWith<F, T, D>,
D: Fallible + ?Sized,
F: ?Sized,
fn deserialize(
&self,
deserializer: &mut D
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize(
&self,
deserializer: &mut D
) -> Result<With<T, W>, <D as Fallible>::Error>
impl<T> FutureExt for T
impl<T> FutureExt for T
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
sourcefn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
sourcefn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<T> Pointable for T
impl<T> Pointable for T
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read morefn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.