diff --git a/base_layer/core/src/base_node/state_machine_service/states/listening.rs b/base_layer/core/src/base_node/state_machine_service/states/listening.rs index 9e097d8d9b..d502b99ae6 100644 --- a/base_layer/core/src/base_node/state_machine_service/states/listening.rs +++ b/base_layer/core/src/base_node/state_machine_service/states/listening.rs @@ -380,19 +380,24 @@ fn determine_sync_mode( } // This is to test the block propagation by delaying lagging. - if local_tip_height.saturating_add(blocks_behind_before_considered_lagging) > network_tip_height { - info!( + // If the config is 0, ignore this set. + if blocks_behind_before_considered_lagging > 0 { + // Otherwise, only wait when the tip is above us, otherwise + // chains with a lower height will never be reorged to. + if network_tip_height > local_tip_height && local_tip_height.saturating_add(blocks_behind_before_considered_lagging) > network_tip_height { + info!( target: LOG_TARGET, "While we are behind, we are still within {} blocks of them, so we are staying as listening and \ waiting for the propagated blocks", blocks_behind_before_considered_lagging ); - return SyncStatus::BehindButNotYetLagging { - local: local.clone(), - network: network.claimed_chain_metadata().clone(), - sync_peers: vec![network.clone().into()], + return SyncStatus::BehindButNotYetLagging { + local: local.clone(), + network: network.claimed_chain_metadata().clone(), + sync_peers: vec![network.clone().into()], + }; }; - }; + } debug!( target: LOG_TARGET,