From ad33c68ce95dc185241515c1747b5e6388aee817 Mon Sep 17 00:00:00 2001 From: steviez Date: Fri, 1 Sep 2023 23:08:49 +0200 Subject: [PATCH] Update ShredFetchStage::modify_packets to drop root bank quicker (#33105) This function used to contain feature gate activation checks that required access to a bank. Those checks have been cleaned up, so we no longer need access to a full Bank. Rather, we can momentarily get a Bank from BankForks, calculate the necessary results and then drop the Bank along with the BankForks read lock. --- core/src/shred_fetch_stage.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index 5d3e8bfb88..fa49afb522 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -50,24 +50,25 @@ impl ShredFetchStage { .as_ref() .map(|(_, cluster_info)| cluster_info.keypair().clone()); - // Only need root bank in order to check feature statuses later on; - // can demote to only fetching root slot once those features go away. - let (mut root_bank, mut last_slot) = { + let (mut last_root, mut last_slot, mut slots_per_epoch) = { let bank_forks_r = bank_forks.read().unwrap(); - (bank_forks_r.root_bank(), bank_forks_r.highest_slot()) + let root_bank = bank_forks_r.root_bank(); + ( + root_bank.slot(), + root_bank.get_slots_in_epoch(root_bank.epoch()), + bank_forks_r.highest_slot(), + ) }; - let mut last_root = root_bank.slot(); - let mut slots_per_epoch = root_bank.get_slots_in_epoch(root_bank.epoch()); let mut stats = ShredFetchStats::default(); for mut packet_batch in recvr { if last_updated.elapsed().as_millis() as u64 > DEFAULT_MS_PER_SLOT { last_updated = Instant::now(); - { + let root_bank = { let bank_forks_r = bank_forks.read().unwrap(); - root_bank = bank_forks_r.root_bank(); last_slot = bank_forks_r.highest_slot(); - } + bank_forks_r.root_bank() + }; last_root = root_bank.slot(); slots_per_epoch = root_bank.get_slots_in_epoch(root_bank.epoch()); keypair = repair_context