in librabft-v2/src/node.rs [211:231]
fn load_node(context: &mut Context, node_time: NodeTime) -> AsyncResult<Self> {
Box::pin(async move {
let value = context
.read_value("node_state".to_string())
.await?
.ok_or_else(|| anyhow!("missing state value"))?;
let node: Self = bincode::deserialize(&value)?;
let previous_time = std::cmp::max(
node.latest_query_all_time,
std::cmp::max(
node.tracker.latest_commit_time,
node.pacemaker.active_round_start_time,
),
);
anyhow::ensure!(
node_time >= previous_time,
"refusing to restore saved state from the future"
);
Ok(node)
})
}