mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-04-28 03:00:18 -04:00
darkfid/task/consensus.rs: gracefully handle network disconnects for replicator
This commit is contained in:
@@ -158,8 +158,26 @@ pub async fn consensus_init_task(
|
||||
}
|
||||
}
|
||||
|
||||
/// async task used for listening for new blocks and perform consensus.
|
||||
pub async fn replicator_task(node: Arc<Darkfid>, ex: Arc<smol::Executor<'static>>) -> Result<()> {
|
||||
/// Async task to start the consensus task, while monitoring for a network disconnections.
|
||||
async fn replicator_task(node: Arc<Darkfid>, ex: Arc<smol::Executor<'static>>) -> Result<()> {
|
||||
smol::future::or(monitor_network(node.clone()), consensus_task(node, ex)).await
|
||||
}
|
||||
|
||||
/// Async task to monitor network disconnections.
|
||||
async fn monitor_network(node: Arc<Darkfid>) -> Result<()> {
|
||||
loop {
|
||||
// Check if we are connected to the network
|
||||
if node.p2p.hosts().channels().await.is_empty() {
|
||||
error!(target: "darkfid::task::consensus::monitor_network", "Node disconnected from the network");
|
||||
return Err(Error::NetworkOperationFailed)
|
||||
}
|
||||
|
||||
sleep(node.p2p.settings().outbound_connect_timeout).await;
|
||||
}
|
||||
}
|
||||
|
||||
/// Async task used for listening for new blocks and perform consensus.
|
||||
async fn consensus_task(node: Arc<Darkfid>, ex: Arc<smol::Executor<'static>>) -> Result<()> {
|
||||
info!(target: "darkfid::task::consensus_task", "Starting consensus task...");
|
||||
|
||||
// Grab blocks subscriber
|
||||
|
||||
Reference in New Issue
Block a user