MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / handle_learner_promotion

Function handle_learner_promotion

nodedb-cluster/src/lifecycle.rs:104–132  ·  view source on GitHub ↗

Handle learner promotion after state catch-up validation.

(
    node_id: u64,
    topology: &mut ClusterTopology,
    log_lag: u64,
    max_lag: u64,
)

Source from the content-addressed store, hash-verified

102
103/// Handle learner promotion after state catch-up validation.
104pub fn handle_learner_promotion(
105 node_id: u64,
106 topology: &mut ClusterTopology,
107 log_lag: u64,
108 max_lag: u64,
109) -> Result<MetadataEntry> {
110 let node = topology.get_node(node_id).ok_or(ClusterError::Transport {
111 detail: format!("node {node_id} not found"),
112 })?;
113
114 if node.state != NodeState::Learner {
115 return Err(ClusterError::Transport {
116 detail: format!("node {node_id} is not a learner (state: {:?})", node.state),
117 });
118 }
119
120 if log_lag > max_lag {
121 return Err(ClusterError::Transport {
122 detail: format!("node {node_id} not caught up: lag={log_lag}, max={max_lag}"),
123 });
124 }
125
126 topology.promote_to_voter(node_id);
127 info!(node_id, log_lag, "learner promoted to voter");
128
129 Ok(MetadataEntry::TopologyChange(
130 TopologyChange::PromoteToVoter { node_id },
131 ))
132}
133
134#[cfg(test)]
135mod tests {

Callers 1

Calls 3

TopologyChangeEnum · 0.85
get_nodeMethod · 0.80
promote_to_voterMethod · 0.80

Tested by 1