Struct kitsune_p2p_dht::arq::PeerViewQ
source · pub struct PeerViewQ {
pub topo: Topology,
pub skip_index: Option<usize>,
/* private fields */
}
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§
source§impl PeerViewQ
impl PeerViewQ
sourcepub 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.
sourcepub fn extrapolated_coverage(&self, filter: &Arq) -> f64
pub fn extrapolated_coverage(&self, filter: &Arq) -> f64
Extrapolate the coverage of the entire network from our local view.
sourcepub fn extrapolated_coverage_and_filtered_count(
&self,
filter: &Arq
) -> (f64, usize)
pub fn extrapolated_coverage_and_filtered_count( &self, filter: &Arq ) -> (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.
sourcepub fn raw_coverage(&self, filter: &Arq) -> f64
pub fn raw_coverage(&self, filter: &Arq) -> f64
Compute the total coverage observed within the filter interval.
sourcepub fn update_arq(&self, arq: &mut Arq) -> bool
pub fn update_arq(&self, arq: &mut Arq) -> bool
Mutate the arq to its ideal target
sourcepub 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.
sourcepub fn update_arq_with_stats(&self, arq: &mut Arq) -> UpdateArqStats
pub fn update_arq_with_stats(&self, arq: &mut Arq) -> 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
sourcepub fn power_stats(&self, topo: &Topology, filter: &Arq) -> PowerStats
pub fn power_stats(&self, topo: &Topology, filter: &Arq) -> 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§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§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 more§fn 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.