| @@ -1,6 +1,7 @@ | |||||||
| //! The `repair_service` module implements the tools necessary to generate a thread which | //! 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 | //! 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::blocktree::{Blocktree, SlotMeta}; | ||||||
| use crate::cluster_info::ClusterInfo; | use crate::cluster_info::ClusterInfo; | ||||||
| use crate::result::Result; | use crate::result::Result; | ||||||
| @@ -67,6 +68,7 @@ impl RepairService { | |||||||
|         exit: &Arc<AtomicBool>, |         exit: &Arc<AtomicBool>, | ||||||
|         repair_socket: Arc<UdpSocket>, |         repair_socket: Arc<UdpSocket>, | ||||||
|         cluster_info: Arc<RwLock<ClusterInfo>>, |         cluster_info: Arc<RwLock<ClusterInfo>>, | ||||||
|  |         bank_forks: Option<Arc<RwLock<BankForks>>>, | ||||||
|         repair_slot_range: Option<RepairSlotRange>, |         repair_slot_range: Option<RepairSlotRange>, | ||||||
|     ) -> Self { |     ) -> Self { | ||||||
|         let exit = exit.clone(); |         let exit = exit.clone(); | ||||||
| @@ -78,6 +80,7 @@ impl RepairService { | |||||||
|                     exit, |                     exit, | ||||||
|                     &repair_socket, |                     &repair_socket, | ||||||
|                     &cluster_info, |                     &cluster_info, | ||||||
|  |                     &bank_forks, | ||||||
|                     repair_slot_range, |                     repair_slot_range, | ||||||
|                 ) |                 ) | ||||||
|             }) |             }) | ||||||
| @@ -91,6 +94,7 @@ impl RepairService { | |||||||
|         exit: Arc<AtomicBool>, |         exit: Arc<AtomicBool>, | ||||||
|         repair_socket: &Arc<UdpSocket>, |         repair_socket: &Arc<UdpSocket>, | ||||||
|         cluster_info: &Arc<RwLock<ClusterInfo>>, |         cluster_info: &Arc<RwLock<ClusterInfo>>, | ||||||
|  |         bank_forks: &Option<Arc<RwLock<BankForks>>>, | ||||||
|         repair_slot_range: Option<RepairSlotRange>, |         repair_slot_range: Option<RepairSlotRange>, | ||||||
|     ) { |     ) { | ||||||
|         let mut repair_info = RepairInfo::new(); |         let mut repair_info = RepairInfo::new(); | ||||||
| @@ -111,7 +115,10 @@ impl RepairService { | |||||||
|                         repair_slot_range, |                         repair_slot_range, | ||||||
|                     ) |                     ) | ||||||
|                 } else { |                 } 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) |                     Self::generate_repairs(blocktree, MAX_REPAIR_LENGTH) | ||||||
|                 } |                 } | ||||||
|             }; |             }; | ||||||
| @@ -271,8 +278,13 @@ impl RepairService { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     fn update_fast_repair(id: Pubkey, slots: &HashSet<u64>, cluster_info: &RwLock<ClusterInfo>) { |     fn update_fast_repair( | ||||||
|         let root = 0; |         id: Pubkey, | ||||||
|  |         slots: &HashSet<u64>, | ||||||
|  |         cluster_info: &RwLock<ClusterInfo>, | ||||||
|  |         bank_forks: &Arc<RwLock<BankForks>>, | ||||||
|  |     ) { | ||||||
|  |         let root = bank_forks.read().unwrap().root(); | ||||||
|         cluster_info |         cluster_info | ||||||
|             .write() |             .write() | ||||||
|             .unwrap() |             .unwrap() | ||||||
|   | |||||||
| @@ -191,10 +191,10 @@ impl WindowService { | |||||||
|             exit, |             exit, | ||||||
|             repair_socket, |             repair_socket, | ||||||
|             cluster_info.clone(), |             cluster_info.clone(), | ||||||
|  |             bank_forks.clone(), | ||||||
|             repair_slot_range, |             repair_slot_range, | ||||||
|         ); |         ); | ||||||
|         let exit = exit.clone(); |         let exit = exit.clone(); | ||||||
|         let bank_forks = bank_forks.clone(); |  | ||||||
|         let leader_schedule_cache = leader_schedule_cache.clone(); |         let leader_schedule_cache = leader_schedule_cache.clone(); | ||||||
|         let hash = *genesis_blockhash; |         let hash = *genesis_blockhash; | ||||||
|         let t_window = Builder::new() |         let t_window = Builder::new() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user