pub struct Stabilizer { /* private fields */ }Expand description
The stabilization runner.
Implementations§
Source§impl Stabilizer
impl Stabilizer
Sourcepub async fn wait(self: Arc<Self>, interval: Duration)
pub async fn wait(self: Arc<Self>, interval: Duration)
Run topology stabilization and storage repair in staggered phases.
Sourcepub async fn wait_with(self: Arc<Self>, interval: Duration, stop: StopToken)
pub async fn wait_with(self: Arc<Self>, interval: Duration, stop: StopToken)
Run staggered maintenance until stop asks this loop to exit.
Repair requests are shared with disconnect handlers and survive missed phase deadlines. Cooperative stop is observed between phases; the per-step deadline may still cancel a hung network maintenance future.
Source§impl Stabilizer
impl Stabilizer
Sourcepub async fn repair_storage(&self) -> Result<StorageRepairOutcome>
pub async fn repair_storage(&self) -> Result<StorageRepairOutcome>
Republish locally-held entries to their current affine owners.
Source§impl Stabilizer
impl Stabilizer
Clean unavailable connections in transport.
State relation:
TopologyPeer(n, p)iffpappears inn’s successor list, predecessor slot, or finger table.Routable(n, p)iffphas an admitted local transport with a stable readiness observation inReady = ({Connecting, Connected}, Open).Evictable(n, p)iffphas no admitted transport, has no raw connection object, is terminal, isConnectedwith a data channel that is not open, is the disconnected successor head while a live successor-tail or finger fallback exists, stayed disconnected past grace, left a liveness probe unanswered past its deadline, or reached the local failure-evidence limit, including an admitted connection explicitly terminalized after an irrevocable send or delivery failure.PrunableTopologyPeer(n, p)iffpis disconnected and appears only in non-head topology slots. These slots are hints, so they are removed from local DHT state immediately while the transport is allowed to recover until the disconnected grace elapses.
Post: after this step returns Ok, every observed local
TopologyPeer(n, p) ∪ AdmittedPeer(n, p) that was Evictable(n, p) at
snapshot time and still owns the same active transport evidence has been
removed through PeerRing::remove, so successor, predecessor, and finger
state are cleaned together. Evidence superseded by a newer connection is
a successful no-op that preserves the replacement and its topology.
Sourcepub async fn notify_predecessor(&self) -> Result<()>
pub async fn notify_predecessor(&self) -> Result<()>
Notify predecessor, this is a DHT operation.
Sourcepub async fn correct_stabilize(&self) -> Result<()>
pub async fn correct_stabilize(&self) -> Result<()>
Call stabilization from correct chord implementation
Trait Implementations§
Source§impl Clone for Stabilizer
impl Clone for Stabilizer
Source§fn clone(&self) -> Stabilizer
fn clone(&self) -> Stabilizer
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for Stabilizer
impl !UnwindSafe for Stabilizer
impl Freeze for Stabilizer
impl Send for Stabilizer
impl Sync for Stabilizer
impl Unpin for Stabilizer
impl UnsafeUnpin for Stabilizer
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ErasedDestructor for Twhere
T: 'static,
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> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.