pub struct ClusterObserver {
pub node_id: u64,
pub lifecycle: ClusterLifecycleTracker,
pub topology: Arc<RwLock<ClusterTopology>>,
pub routing: Arc<RwLock<RoutingTable>>,
pub group_status: Weak<dyn GroupStatusProvider + Send + Sync>,
}Expand description
Aggregated observability handle for the cluster.
Stored in SharedState::cluster_observer as an
Arc<ClusterObserver> so HTTP route handlers and the metrics
endpoint can build snapshots without threading four separate
handles through every call.
Construction is done exactly once — after start_cluster has
returned and start_raft has built the RaftLoop. See
nodedb::control::cluster::start_raft for the wiring.
Fields§
§node_id: u64This node’s id.
lifecycle: ClusterLifecycleTrackerLifecycle phase tracker (shared with start_cluster).
topology: Arc<RwLock<ClusterTopology>>Shared cluster topology.
routing: Arc<RwLock<RoutingTable>>Shared routing table.
group_status: Weak<dyn GroupStatusProvider + Send + Sync>Type-erased per-group status provider backed by RaftLoop.
Held as a Weak on purpose: the owner of this observer
(SharedState) is itself kept alive transitively by the
RaftLoop, so a strong reference here would close a cycle that
pins both forever and blocks clean shutdown. The loop is kept
alive by its own spawned tasks; upgrade therefore succeeds
throughout normal operation and only fails once the loop has been
dropped on shutdown, where an empty status snapshot is correct.
Implementations§
Source§impl ClusterObserver
impl ClusterObserver
pub fn new( node_id: u64, lifecycle: ClusterLifecycleTracker, topology: Arc<RwLock<ClusterTopology>>, routing: Arc<RwLock<RoutingTable>>, group_status: Weak<dyn GroupStatusProvider + Send + Sync>, ) -> Self
Sourcepub fn snapshot(&self) -> ClusterInfoSnapshot
pub fn snapshot(&self) -> ClusterInfoSnapshot
Build a complete ClusterInfoSnapshot for rendering via
/cluster/status or /metrics.
Auto Trait Implementations§
impl !RefUnwindSafe for ClusterObserver
impl !UnwindSafe for ClusterObserver
impl Freeze for ClusterObserver
impl Send for ClusterObserver
impl Sync for ClusterObserver
impl Unpin for ClusterObserver
impl UnsafeUnpin for ClusterObserver
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> 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<'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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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> 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.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§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).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.