diff --git a/core/src/repair_service.rs b/core/src/repair_service.rs index 1549f5dc6..2228e0b61 100644 --- a/core/src/repair_service.rs +++ b/core/src/repair_service.rs @@ -1,6 +1,7 @@ //! The `repair_service` module implements the tools necessary to generate a thread which //! regularly finds missing blobs in the ledger and sends repair requests for those blobs +use crate::bank_forks::BankForks; use crate::blocktree::{Blocktree, SlotMeta}; use crate::cluster_info::ClusterInfo; use crate::result::Result; @@ -67,6 +68,7 @@ impl RepairService { exit: &Arc, repair_socket: Arc, cluster_info: Arc>, + bank_forks: Option>>, repair_slot_range: Option, ) -> Self { let exit = exit.clone(); @@ -78,6 +80,7 @@ impl RepairService { exit, &repair_socket, &cluster_info, + &bank_forks, repair_slot_range, ) }) @@ -91,6 +94,7 @@ impl RepairService { exit: Arc, repair_socket: &Arc, cluster_info: &Arc>, + bank_forks: &Option>>, repair_slot_range: Option, ) { let mut repair_info = RepairInfo::new(); @@ -111,7 +115,10 @@ impl RepairService { repair_slot_range, ) } else { - Self::update_fast_repair(id, &epoch_slots, &cluster_info); + let bank_forks = bank_forks + .as_ref() + .expect("Non-replicator repair strategy missing BankForks"); + Self::update_fast_repair(id, &epoch_slots, &cluster_info, bank_forks); Self::generate_repairs(blocktree, MAX_REPAIR_LENGTH) } }; @@ -271,8 +278,13 @@ impl RepairService { } } - fn update_fast_repair(id: Pubkey, slots: &HashSet, cluster_info: &RwLock) { - let root = 0; + fn update_fast_repair( + id: Pubkey, + slots: &HashSet, + cluster_info: &RwLock, + bank_forks: &Arc>, + ) { + let root = bank_forks.read().unwrap().root(); cluster_info .write() .unwrap() diff --git a/core/src/window_service.rs b/core/src/window_service.rs index a20ff23f0..2601cbef2 100644 --- a/core/src/window_service.rs +++ b/core/src/window_service.rs @@ -191,10 +191,10 @@ impl WindowService { exit, repair_socket, cluster_info.clone(), + bank_forks.clone(), repair_slot_range, ); let exit = exit.clone(); - let bank_forks = bank_forks.clone(); let leader_schedule_cache = leader_schedule_cache.clone(); let hash = *genesis_blockhash; let t_window = Builder::new()