diff --git a/client-test/tests/client.rs b/client-test/tests/client.rs index 38fe73f385..2764d510a6 100644 --- a/client-test/tests/client.rs +++ b/client-test/tests/client.rs @@ -125,7 +125,7 @@ fn test_account_subscription() { let bank = Bank::new_for_tests(&genesis_config); let blockhash = bank.last_blockhash(); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); let bob = Keypair::new(); @@ -331,7 +331,7 @@ fn test_program_subscription() { let bank = Bank::new_for_tests(&genesis_config); let blockhash = bank.last_blockhash(); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); let bob = Keypair::new(); @@ -418,7 +418,7 @@ fn test_root_subscription() { let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000); let bank = Bank::new_for_tests(&genesis_config); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); diff --git a/core/benches/consensus.rs b/core/benches/consensus.rs index 247a5c5327..9ab8cd352a 100644 --- a/core/benches/consensus.rs +++ b/core/benches/consensus.rs @@ -70,12 +70,7 @@ fn bench_generate_ancestors_descendants(bench: &mut Bencher) { bench.iter(move || { for _ in 0..num_banks { let _ancestors = vote_simulator.bank_forks.read().unwrap().ancestors(); - let _descendants = vote_simulator - .bank_forks - .read() - .unwrap() - .descendants() - .clone(); + let _descendants = vote_simulator.bank_forks.read().unwrap().descendants(); } }); } diff --git a/core/src/ancestor_hashes_service.rs b/core/src/ancestor_hashes_service.rs index f4e0b90515..62ec7e2007 100644 --- a/core/src/ancestor_hashes_service.rs +++ b/core/src/ancestor_hashes_service.rs @@ -1442,7 +1442,7 @@ mod test { ReplayStage::dump_then_repair_correct_slots( &mut duplicate_slots_to_repair, &mut bank_forks.read().unwrap().ancestors(), - &mut bank_forks.read().unwrap().descendants().clone(), + &mut bank_forks.read().unwrap().descendants(), &mut progress, &bank_forks, &requester_blockstore, diff --git a/core/src/cluster_info_vote_listener.rs b/core/src/cluster_info_vote_listener.rs index 0c2d06efa6..a61433407d 100644 --- a/core/src/cluster_info_vote_listener.rs +++ b/core/src/cluster_info_vote_listener.rs @@ -1362,7 +1362,7 @@ mod tests { let bank = Bank::new_for_tests(&genesis_config); let exit = Arc::new(AtomicBool::new(false)); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank = bank_forks.read().unwrap().get(0).unwrap(); let vote_tracker = VoteTracker::default(); let optimistically_confirmed_bank = OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); @@ -1473,7 +1473,7 @@ mod tests { let vote_tracker = VoteTracker::default(); let exit = Arc::new(AtomicBool::new(false)); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank = bank_forks.read().unwrap().get(0).unwrap(); let optimistically_confirmed_bank = OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); diff --git a/core/src/cluster_slot_state_verifier.rs b/core/src/cluster_slot_state_verifier.rs index a182cbcf27..d1d01a121e 100644 --- a/core/src/cluster_slot_state_verifier.rs +++ b/core/src/cluster_slot_state_verifier.rs @@ -1336,14 +1336,7 @@ mod test { // Create simple fork 0 -> 1 -> 2 -> 3 let forks = tr(0) / (tr(1) / (tr(2) / tr(3))); let (vote_simulator, blockstore) = setup_forks_from_tree(forks, 1, None); - - let descendants = vote_simulator - .bank_forks - .read() - .unwrap() - .descendants() - .clone(); - + let descendants = vote_simulator.bank_forks.read().unwrap().descendants(); InitialState { heaviest_subtree_fork_choice: vote_simulator.heaviest_subtree_fork_choice, progress: vote_simulator.progress, diff --git a/core/src/commitment_service.rs b/core/src/commitment_service.rs index 1a27d00981..2574f9e1be 100644 --- a/core/src/commitment_service.rs +++ b/core/src/commitment_service.rs @@ -516,7 +516,7 @@ mod tests { // Create enough banks such that vote account will root slots 0 and 1 for x in 0..33 { let previous_bank = bank_forks.get(x).unwrap(); - let bank = Bank::new_from_parent(previous_bank, &Pubkey::default(), x + 1); + let bank = Bank::new_from_parent(&previous_bank, &Pubkey::default(), x + 1); let vote = vote_transaction::new_vote_transaction( vec![x], previous_bank.hash(), @@ -541,7 +541,7 @@ mod tests { // Add an additional bank/vote that will root slot 2 let bank33 = bank_forks.get(33).unwrap(); - let bank34 = Bank::new_from_parent(bank33, &Pubkey::default(), 34); + let bank34 = Bank::new_from_parent(&bank33, &Pubkey::default(), 34); let vote33 = vote_transaction::new_vote_transaction( vec![33], bank33.hash(), @@ -584,7 +584,7 @@ mod tests { // Add a forked bank. Because the vote for bank 33 landed in the non-ancestor, the vote // account's root (and thus the highest_confirmed_root) rolls back to slot 1 let bank33 = bank_forks.get(33).unwrap(); - let bank35 = Bank::new_from_parent(bank33, &Pubkey::default(), 35); + let bank35 = Bank::new_from_parent(&bank33, &Pubkey::default(), 35); bank_forks.insert(bank35); let working_bank = bank_forks.working_bank(); @@ -609,7 +609,7 @@ mod tests { // continues normally for x in 35..=37 { let previous_bank = bank_forks.get(x).unwrap(); - let bank = Bank::new_from_parent(previous_bank, &Pubkey::default(), x + 1); + let bank = Bank::new_from_parent(&previous_bank, &Pubkey::default(), x + 1); let vote = vote_transaction::new_vote_transaction( vec![x], previous_bank.hash(), diff --git a/core/src/consensus.rs b/core/src/consensus.rs index 8fb793eec9..465680b2b4 100644 --- a/core/src/consensus.rs +++ b/core/src/consensus.rs @@ -244,8 +244,7 @@ impl Tower { .get_with_checked_hash((best_slot, best_hash)) .expect( "The best overall slot must be one of `frozen_banks` which all exist in bank_forks", - ) - .clone(); + ); Self::new(node_pubkey, vote_account, root, &heaviest_bank) } @@ -1522,13 +1521,7 @@ pub mod test { // Init state assert!(num_accounts > 1); let mut vote_simulator = VoteSimulator::new(num_accounts); - let bank0 = vote_simulator - .bank_forks - .read() - .unwrap() - .get(0) - .unwrap() - .clone(); + let bank0 = vote_simulator.bank_forks.read().unwrap().get(0).unwrap(); let total_stake = bank0.total_epoch_stake(); assert_eq!( total_stake, @@ -1560,12 +1553,7 @@ pub mod test { fn run_test_switch_threshold_duplicate_rollback(should_panic: bool) { let (bank0, mut vote_simulator, total_stake) = setup_switch_test(2); let ancestors = vote_simulator.bank_forks.read().unwrap().ancestors(); - let descendants = vote_simulator - .bank_forks - .read() - .unwrap() - .descendants() - .clone(); + let descendants = vote_simulator.bank_forks.read().unwrap().descendants(); let mut tower = Tower::default(); // Last vote is 47 @@ -1666,12 +1654,7 @@ pub mod test { fn test_switch_threshold() { let (bank0, mut vote_simulator, total_stake) = setup_switch_test(2); let ancestors = vote_simulator.bank_forks.read().unwrap().ancestors(); - let mut descendants = vote_simulator - .bank_forks - .read() - .unwrap() - .descendants() - .clone(); + let mut descendants = vote_simulator.bank_forks.read().unwrap().descendants(); let mut tower = Tower::default(); let other_vote_account = vote_simulator.vote_pubkeys[1]; @@ -1819,12 +1802,7 @@ pub mod test { tower.vote_state.root_slot = Some(43); // Refresh ancestors and descendants for new root. let ancestors = vote_simulator.bank_forks.read().unwrap().ancestors(); - let descendants = vote_simulator - .bank_forks - .read() - .unwrap() - .descendants() - .clone(); + let descendants = vote_simulator.bank_forks.read().unwrap().descendants(); assert_eq!( tower.check_switch_threshold( @@ -1846,12 +1824,7 @@ pub mod test { let num_validators = 2; let (bank0, mut vote_simulator, total_stake) = setup_switch_test(2); let ancestors = vote_simulator.bank_forks.read().unwrap().ancestors(); - let descendants = vote_simulator - .bank_forks - .read() - .unwrap() - .descendants() - .clone(); + let descendants = vote_simulator.bank_forks.read().unwrap().descendants(); let mut tower = Tower::default(); let other_vote_account = vote_simulator.vote_pubkeys[1]; @@ -1927,12 +1900,7 @@ pub mod test { // included in the switching proof vote_simulator.set_root(44); let ancestors = vote_simulator.bank_forks.read().unwrap().ancestors(); - let descendants = vote_simulator - .bank_forks - .read() - .unwrap() - .descendants() - .clone(); + let descendants = vote_simulator.bank_forks.read().unwrap().descendants(); assert_eq!( tower.check_switch_threshold( 110, @@ -2574,13 +2542,7 @@ pub mod test { // Init state let mut vote_simulator = VoteSimulator::new(2); let other_vote_account = vote_simulator.vote_pubkeys[1]; - let bank0 = vote_simulator - .bank_forks - .read() - .unwrap() - .get(0) - .unwrap() - .clone(); + let bank0 = vote_simulator.bank_forks.read().unwrap().get(0).unwrap(); let total_stake = bank0.total_epoch_stake(); assert_eq!( total_stake, @@ -2605,12 +2567,7 @@ pub mod test { } let ancestors = vote_simulator.bank_forks.read().unwrap().ancestors(); - let descendants = vote_simulator - .bank_forks - .read() - .unwrap() - .descendants() - .clone(); + let descendants = vote_simulator.bank_forks.read().unwrap().descendants(); let mut tower = Tower::default(); tower.record_vote(43, Hash::default()); @@ -2679,13 +2636,7 @@ pub mod test { // Prepare simulated validator restart! let mut vote_simulator = VoteSimulator::new(2); let other_vote_account = vote_simulator.vote_pubkeys[1]; - let bank0 = vote_simulator - .bank_forks - .read() - .unwrap() - .get(0) - .unwrap() - .clone(); + let bank0 = vote_simulator.bank_forks.read().unwrap().get(0).unwrap(); let total_stake = bank0.total_epoch_stake(); let forks = tr(0) / (tr(1) @@ -2708,12 +2659,7 @@ pub mod test { let mut slot_history = SlotHistory::default(); vote_simulator.set_root(replayed_root_slot); let ancestors = vote_simulator.bank_forks.read().unwrap().ancestors(); - let descendants = vote_simulator - .bank_forks - .read() - .unwrap() - .descendants() - .clone(); + let descendants = vote_simulator.bank_forks.read().unwrap().descendants(); for slot in &[0, 1, 2, 43, replayed_root_slot] { slot_history.add(*slot); } diff --git a/core/src/heaviest_subtree_fork_choice.rs b/core/src/heaviest_subtree_fork_choice.rs index 1a360ee844..96167eebe7 100644 --- a/core/src/heaviest_subtree_fork_choice.rs +++ b/core/src/heaviest_subtree_fork_choice.rs @@ -969,15 +969,11 @@ impl ForkChoice for HeaviestSubtreeForkChoice { ( r_bank_forks .get_with_checked_hash(self.best_overall_slot()) - .unwrap() - .clone(), + .unwrap(), self.heaviest_slot_on_same_voted_fork(tower) .map(|slot_hash| { // BankForks should only contain one valid version of this slot - r_bank_forks - .get_with_checked_hash(slot_hash) - .unwrap() - .clone() + r_bank_forks.get_with_checked_hash(slot_hash).unwrap() }), ) } diff --git a/core/src/optimistic_confirmation_verifier.rs b/core/src/optimistic_confirmation_verifier.rs index 52c47a577a..08545f3060 100644 --- a/core/src/optimistic_confirmation_verifier.rs +++ b/core/src/optimistic_confirmation_verifier.rs @@ -177,13 +177,7 @@ mod test { let optimistic_slots = vec![(1, bad_bank_hash), (3, Hash::default())]; optimistic_confirmation_verifier.add_new_optimistic_confirmed_slots(optimistic_slots); let vote_simulator = setup_forks(); - let bank1 = vote_simulator - .bank_forks - .read() - .unwrap() - .get(1) - .cloned() - .unwrap(); + let bank1 = vote_simulator.bank_forks.read().unwrap().get(1).unwrap(); assert_eq!( optimistic_confirmation_verifier .verify_for_unrooted_optimistic_slots(&bank1, &blockstore), @@ -225,13 +219,7 @@ mod test { // If root is on same fork, nothing should be returned optimistic_confirmation_verifier .add_new_optimistic_confirmed_slots(optimistic_slots.clone()); - let bank5 = vote_simulator - .bank_forks - .read() - .unwrap() - .get(5) - .cloned() - .unwrap(); + let bank5 = vote_simulator.bank_forks.read().unwrap().get(5).unwrap(); assert!(optimistic_confirmation_verifier .verify_for_unrooted_optimistic_slots(&bank5, &blockstore) .is_empty()); @@ -241,13 +229,7 @@ mod test { // If root is on same fork, nothing should be returned optimistic_confirmation_verifier .add_new_optimistic_confirmed_slots(optimistic_slots.clone()); - let bank3 = vote_simulator - .bank_forks - .read() - .unwrap() - .get(3) - .cloned() - .unwrap(); + let bank3 = vote_simulator.bank_forks.read().unwrap().get(3).unwrap(); assert!(optimistic_confirmation_verifier .verify_for_unrooted_optimistic_slots(&bank3, &blockstore) .is_empty()); @@ -261,13 +243,7 @@ mod test { // be returned optimistic_confirmation_verifier .add_new_optimistic_confirmed_slots(optimistic_slots.clone()); - let bank4 = vote_simulator - .bank_forks - .read() - .unwrap() - .get(4) - .cloned() - .unwrap(); + let bank4 = vote_simulator.bank_forks.read().unwrap().get(4).unwrap(); assert_eq!( optimistic_confirmation_verifier .verify_for_unrooted_optimistic_slots(&bank4, &blockstore), @@ -283,25 +259,13 @@ mod test { vote_simulator.set_root(5); // Add a new bank 7 that descends from 6 - let bank6 = vote_simulator - .bank_forks - .read() - .unwrap() - .get(6) - .cloned() - .unwrap(); + let bank6 = vote_simulator.bank_forks.read().unwrap().get(6).unwrap(); vote_simulator .bank_forks .write() .unwrap() .insert(Bank::new_from_parent(&bank6, &Pubkey::default(), 7)); - let bank7 = vote_simulator - .bank_forks - .read() - .unwrap() - .get(7) - .unwrap() - .clone(); + let bank7 = vote_simulator.bank_forks.read().unwrap().get(7).unwrap(); assert!(!bank7.ancestors.contains_key(&3)); // Should return slots 1, 3 as part of the rooted fork because there's no diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index ac3091060d..8529e00bf5 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -463,7 +463,7 @@ impl ReplayStage { let mut replay_active_banks_time = Measure::start("replay_active_banks_time"); let mut ancestors = bank_forks.read().unwrap().ancestors(); - let mut descendants = bank_forks.read().unwrap().descendants().clone(); + let mut descendants = bank_forks.read().unwrap().descendants(); let did_complete_bank = Self::replay_active_banks( &blockstore, &bank_forks, @@ -1519,8 +1519,7 @@ impl ReplayStage { .read() .unwrap() .get(parent_slot) - .expect("parent_slot doesn't exist in bank forks") - .clone(); + .expect("parent_slot doesn't exist in bank forks"); assert!(parent.is_frozen()); @@ -1768,8 +1767,7 @@ impl ReplayStage { .read() .unwrap() .get(new_root) - .expect("Root bank doesn't exist") - .clone(); + .expect("Root bank doesn't exist"); let mut rooted_banks = root_bank.parents(); rooted_banks.push(root_bank.clone()); let rooted_slots: Vec<_> = rooted_banks.iter().map(|bank| bank.slot()).collect(); @@ -2155,7 +2153,7 @@ impl ReplayStage { continue; } - let bank = bank_forks.read().unwrap().get(*bank_slot).unwrap().clone(); + let bank = bank_forks.read().unwrap().get(*bank_slot).unwrap(); let parent_slot = bank.parent_slot(); let prev_leader_slot = progress.get_bank_prev_leader_slot(&bank); let (num_blocks_on_fork, num_dropped_blocks_on_fork) = { @@ -3322,7 +3320,7 @@ pub mod tests { // Insert a non-root bank so that the propagation logic will update this // bank let bank1 = Bank::new_from_parent( - bank_forks.read().unwrap().get(0).unwrap(), + &bank_forks.read().unwrap().get(0).unwrap(), &leader_schedule_cache.slot_leader_at(1, None).unwrap(), 1, ); @@ -3422,7 +3420,7 @@ pub mod tests { let root = 3; let root_bank = Bank::new_from_parent( - bank_forks.read().unwrap().get(0).unwrap(), + &bank_forks.read().unwrap().get(0).unwrap(), &Pubkey::default(), root, ); @@ -3511,20 +3509,20 @@ pub mod tests { let confirmed_root = 1; let fork = 2; let bank1 = Bank::new_from_parent( - bank_forks.read().unwrap().get(0).unwrap(), + &bank_forks.read().unwrap().get(0).unwrap(), &Pubkey::default(), confirmed_root, ); bank_forks.write().unwrap().insert(bank1); let bank2 = Bank::new_from_parent( - bank_forks.read().unwrap().get(confirmed_root).unwrap(), + &bank_forks.read().unwrap().get(confirmed_root).unwrap(), &Pubkey::default(), fork, ); bank_forks.write().unwrap().insert(bank2); let root = 3; let root_bank = Bank::new_from_parent( - bank_forks.read().unwrap().get(confirmed_root).unwrap(), + &bank_forks.read().unwrap().get(confirmed_root).unwrap(), &Pubkey::default(), root, ); @@ -3789,12 +3787,12 @@ pub mod tests { .. } = vote_simulator; - let bank0 = bank_forks.read().unwrap().get(0).cloned().unwrap(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); assert!(bank0.is_frozen()); assert_eq!(bank0.tick_height(), bank0.max_tick_height()); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); - let bank1 = bank_forks.read().unwrap().get(1).cloned().unwrap(); + let bank1 = bank_forks.read().unwrap().get(1).unwrap(); let bank1_progress = progress .entry(bank1.slot()) .or_insert_with(|| ForkProgress::new(bank1.last_blockhash(), None, None, 0, 0)); @@ -3910,7 +3908,7 @@ pub mod tests { .is_none()); for i in 1..=3 { - let prev_bank = bank_forks.read().unwrap().get(i - 1).unwrap().clone(); + let prev_bank = bank_forks.read().unwrap().get(i - 1).unwrap(); let bank = Bank::new_from_parent(&prev_bank, &Pubkey::default(), prev_bank.slot() + 1); let _res = bank.transfer( 10, @@ -3921,7 +3919,7 @@ pub mod tests { bank.register_tick(&Hash::default()); } bank_forks.write().unwrap().insert(bank); - let arc_bank = bank_forks.read().unwrap().get(i).unwrap().clone(); + let arc_bank = bank_forks.read().unwrap().get(i).unwrap(); leader_vote(i - 1, &arc_bank, &leader_voting_pubkey); ReplayStage::update_commitment_cache( arc_bank.clone(), @@ -4056,7 +4054,7 @@ pub mod tests { vote_simulator::initialize_state(&keypairs, 10_000); let mut latest_validator_votes_for_frozen_banks = LatestValidatorVotesForFrozenBanks::default(); - let bank0 = bank_forks.get(0).unwrap().clone(); + let bank0 = bank_forks.get(0).unwrap(); let my_keypairs = keypairs.get(&my_node_pubkey).unwrap(); let vote_tx = vote_transaction::new_vote_transaction( vec![0], @@ -4215,20 +4213,8 @@ pub mod tests { &mut latest_validator_votes_for_frozen_banks, ); - let bank1 = vote_simulator - .bank_forks - .read() - .unwrap() - .get(1) - .unwrap() - .clone(); - let bank2 = vote_simulator - .bank_forks - .read() - .unwrap() - .get(2) - .unwrap() - .clone(); + let bank1 = vote_simulator.bank_forks.read().unwrap().get(1).unwrap(); + let bank2 = vote_simulator.bank_forks.read().unwrap().get(2).unwrap(); assert_eq!( heaviest_subtree_fork_choice .stake_voted_subtree(&(1, bank1.hash())) @@ -4530,9 +4516,9 @@ pub mod tests { let (mut bank_forks, mut progress_map, _) = vote_simulator::initialize_state(&keypairs, stake); - let bank0 = bank_forks.get(0).unwrap().clone(); + let bank0 = bank_forks.get(0).unwrap(); bank_forks.insert(Bank::new_from_parent(&bank0, &Pubkey::default(), 9)); - let bank9 = bank_forks.get(9).unwrap().clone(); + let bank9 = bank_forks.get(9).unwrap(); bank_forks.insert(Bank::new_from_parent(&bank9, &Pubkey::default(), 10)); bank_forks.set_root(9, &AbsRequestSender::default(), None); let total_epoch_stake = bank0.total_epoch_stake(); @@ -4859,7 +4845,7 @@ pub mod tests { Bank::new_from_parent(&Arc::new(bank0), &Pubkey::default(), parent_slot); let mut bank_forks = BankForks::new(parent_slot_bank); let bank5 = - Bank::new_from_parent(bank_forks.get(parent_slot).unwrap(), &Pubkey::default(), 5); + Bank::new_from_parent(&bank_forks.get(parent_slot).unwrap(), &Pubkey::default(), 5); bank_forks.insert(bank5); // Should purge only `previous_leader_slot` from the progress map @@ -4970,14 +4956,14 @@ pub mod tests { // Create bank 7 let root_bank = bank_forks.read().unwrap().root_bank(); let bank7 = Bank::new_from_parent( - &bank_forks.read().unwrap().get(6).unwrap().clone(), + &bank_forks.read().unwrap().get(6).unwrap(), &Pubkey::default(), 7, ); bank_forks.write().unwrap().insert(bank7); blockstore.add_tree(tr(6) / tr(7), false, false, 3, Hash::default()); - let bank7 = bank_forks.read().unwrap().get(7).unwrap().clone(); - let mut descendants = bank_forks.read().unwrap().descendants().clone(); + let bank7 = bank_forks.read().unwrap().get(7).unwrap(); + let mut descendants = bank_forks.read().unwrap().descendants(); let mut ancestors = bank_forks.read().unwrap().ancestors(); // Process a transfer on bank 7 @@ -4995,7 +4981,7 @@ pub mod tests { // Process a vote for slot 0 in bank 5 let validator0_keypairs = &validator_keypairs.get(&sender).unwrap(); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let vote_tx = vote_transaction::new_vote_transaction( vec![0], bank0.hash(), @@ -5053,7 +5039,7 @@ pub mod tests { assert_eq!(bank7.get_balance(&sender), old_balance); // Purging slot 4 should purge only slot 4 - let mut descendants = bank_forks.read().unwrap().descendants().clone(); + let mut descendants = bank_forks.read().unwrap().descendants(); let mut ancestors = bank_forks.read().unwrap().ancestors(); ReplayStage::purge_unconfirmed_duplicate_slot( 4, @@ -5076,7 +5062,7 @@ pub mod tests { } // Purging slot 1 should purge both forks 2 and 3 - let mut descendants = bank_forks.read().unwrap().descendants().clone(); + let mut descendants = bank_forks.read().unwrap().descendants(); let mut ancestors = bank_forks.read().unwrap().ancestors(); ReplayStage::purge_unconfirmed_duplicate_slot( 1, @@ -5101,7 +5087,7 @@ pub mod tests { let (VoteSimulator { bank_forks, .. }, _) = setup_default_forks(1, None::); // Purge branch rooted at slot 2 - let mut descendants = bank_forks.read().unwrap().descendants().clone(); + let mut descendants = bank_forks.read().unwrap().descendants(); let mut ancestors = bank_forks.read().unwrap().ancestors(); let slot_2_descendants = descendants.get(&2).unwrap().clone(); ReplayStage::purge_ancestors_descendants( @@ -5123,7 +5109,7 @@ pub mod tests { )); assert!(check_map_eq( &descendants, - bank_forks.read().unwrap().descendants() + &bank_forks.read().unwrap().descendants() )); // Try to purge the root @@ -5131,7 +5117,7 @@ pub mod tests { .write() .unwrap() .set_root(3, &AbsRequestSender::default(), None); - let mut descendants = bank_forks.read().unwrap().descendants().clone(); + let mut descendants = bank_forks.read().unwrap().descendants(); let mut ancestors = bank_forks.read().unwrap().ancestors(); let slot_3_descendants = descendants.get(&3).unwrap().clone(); ReplayStage::purge_ancestors_descendants( @@ -5275,7 +5261,7 @@ pub mod tests { // Record the vote for 4 tower.record_bank_vote( - bank_forks.read().unwrap().get(4).unwrap(), + &bank_forks.read().unwrap().get(4).unwrap(), &Pubkey::default(), ); @@ -5411,7 +5397,7 @@ pub mod tests { let (mut ancestors, mut descendants) = { let r_bank_forks = bank_forks.read().unwrap(); - (r_bank_forks.ancestors(), r_bank_forks.descendants().clone()) + (r_bank_forks.ancestors(), r_bank_forks.descendants()) }; // Insert different versions of both 1 and 2. Both slots 1 and 2 should @@ -5490,7 +5476,7 @@ pub mod tests { } = vote_simulator; tower.record_bank_vote( - bank_forks.read().unwrap().get(first_vote).unwrap(), + &bank_forks.read().unwrap().get(first_vote).unwrap(), &Pubkey::default(), ); @@ -5528,7 +5514,7 @@ pub mod tests { duplicate_confirmed_bank2_hash ); let mut ancestors = bank_forks.read().unwrap().ancestors(); - let mut descendants = bank_forks.read().unwrap().descendants().clone(); + let mut descendants = bank_forks.read().unwrap().descendants(); let old_descendants_of_2 = descendants.get(&2).unwrap().clone(); ReplayStage::dump_then_repair_correct_slots( @@ -5584,7 +5570,7 @@ pub mod tests { .collect(); let ancestors = bank_forks.read().unwrap().ancestors(); - let descendants = bank_forks.read().unwrap().descendants().clone(); + let descendants = bank_forks.read().unwrap().descendants(); ReplayStage::compute_bank_stats( &Pubkey::new_unique(), @@ -5711,7 +5697,7 @@ pub mod tests { .collect(); let ancestors = bank_forks.read().unwrap().ancestors(); - let descendants = bank_forks.read().unwrap().descendants().clone(); + let descendants = bank_forks.read().unwrap().descendants(); ReplayStage::compute_bank_stats( &Pubkey::new_unique(), @@ -5821,7 +5807,7 @@ pub mod tests { // Cast a vote for slot 3 on one fork let vote_slot = 3; - let vote_bank = bank_forks.read().unwrap().get(vote_slot).unwrap().clone(); + let vote_bank = bank_forks.read().unwrap().get(vote_slot).unwrap(); gossip_verified_vote_hash_sender .send((vote_pubkey, vote_slot, vote_bank.hash())) .expect("Send should succeed"); @@ -5873,7 +5859,7 @@ pub mod tests { validator_keypairs.remove(&my_pubkey).unwrap().vote_keypair, )]; let my_vote_pubkey = my_vote_keypair[0].pubkey(); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let (voting_sender, voting_receiver) = unbounded(); @@ -6139,7 +6125,7 @@ pub mod tests { let (retransmit_slots_sender, retransmit_slots_receiver) = unbounded(); let bank1 = Bank::new_from_parent( - bank_forks.read().unwrap().get(0).unwrap(), + &bank_forks.read().unwrap().get(0).unwrap(), &leader_schedule_cache.slot_leader_at(1, None).unwrap(), 1, ); @@ -6310,7 +6296,7 @@ pub mod tests { let mut prev_index = 0; for i in (1..10).chain(11..15) { let bank = Bank::new_from_parent( - bank_forks.read().unwrap().get(prev_index).unwrap(), + &bank_forks.read().unwrap().get(prev_index).unwrap(), &leader_schedule_cache.slot_leader_at(i, None).unwrap(), i, ); @@ -6382,7 +6368,7 @@ pub mod tests { .cloned() .collect(); let ancestors = &bank_forks.read().unwrap().ancestors(); - let descendants = &bank_forks.read().unwrap().descendants().clone(); + let descendants = &bank_forks.read().unwrap().descendants(); ReplayStage::compute_bank_stats( &Pubkey::default(), &bank_forks.read().unwrap().ancestors(), diff --git a/core/src/vote_simulator.rs b/core/src/vote_simulator.rs index 54cb86de4c..a9c82a0f59 100644 --- a/core/src/vote_simulator.rs +++ b/core/src/vote_simulator.rs @@ -79,7 +79,7 @@ impl VoteSimulator { continue; } let parent = *walk.get_parent().unwrap().data(); - let parent_bank = self.bank_forks.read().unwrap().get(parent).unwrap().clone(); + let parent_bank = self.bank_forks.read().unwrap().get(parent).unwrap(); let new_bank = Bank::new_from_parent(&parent_bank, &Pubkey::default(), slot); self.progress .entry(slot) @@ -171,11 +171,10 @@ impl VoteSimulator { .read() .unwrap() .get(vote_slot) - .expect("Bank must have been created before vote simulation") - .clone(); + .expect("Bank must have been created before vote simulation"); // Try to vote on the given slot - let descendants = self.bank_forks.read().unwrap().descendants().clone(); + let descendants = self.bank_forks.read().unwrap().descendants(); let SelectVoteAndResetForkResult { heaviest_fork_failures, .. diff --git a/core/tests/snapshots.rs b/core/tests/snapshots.rs index 23bf6cf521..42c1414d55 100644 --- a/core/tests/snapshots.rs +++ b/core/tests/snapshots.rs @@ -216,11 +216,8 @@ mod tests { ) .unwrap(); - let bank = old_bank_forks - .get(deserialized_bank.slot()) - .unwrap() - .clone(); - assert_eq!(*bank, deserialized_bank); + let bank = old_bank_forks.get(deserialized_bank.slot()).unwrap(); + assert_eq!(bank.as_ref(), &deserialized_bank); } // creates banks up to "last_slot" and runs the input function `f` on each bank created @@ -279,7 +276,7 @@ mod tests { snapshot_utils::get_highest_bank_snapshot_pre(bank_snapshots_dir) .expect("no bank snapshots found in path"); let accounts_package = AccountsPackage::new( - last_bank, + &last_bank, &last_bank_snapshot_info, bank_snapshots_dir, last_bank.src.slot_deltas(&last_bank.src.roots()), @@ -370,7 +367,7 @@ mod tests { // Take snapshot of zeroth bank let bank0 = bank_forks.get(0).unwrap(); let storages = bank0.get_snapshot_storages(None); - snapshot_utils::add_bank_snapshot(bank_snapshots_dir, bank0, &storages, snapshot_version) + snapshot_utils::add_bank_snapshot(bank_snapshots_dir, &bank0, &storages, snapshot_version) .unwrap(); // Set up snapshotting channels @@ -972,7 +969,7 @@ mod tests { // Make a new bank and perform some transactions let bank = { let bank = Bank::new_from_parent( - bank_forks.read().unwrap().get(slot - 1).unwrap(), + &bank_forks.read().unwrap().get(slot - 1).unwrap(), &Pubkey::default(), slot, ); @@ -1035,14 +1032,15 @@ mod tests { ) .unwrap(); - assert_eq!(deserialized_bank.slot(), LAST_SLOT,); + assert_eq!(deserialized_bank.slot(), LAST_SLOT); assert_eq!( - deserialized_bank, - **bank_forks + &deserialized_bank, + bank_forks .read() .unwrap() .get(deserialized_bank.slot()) .unwrap() + .as_ref() ); // Stop the background services diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index 79300a82dc..ffd7161e05 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -2315,8 +2315,7 @@ fn main() { .unwrap_or_else(|| { eprintln!("Error: Slot {} is not available", snapshot_slot); exit(1); - }) - .clone(); + }); let child_bank_required = rent_burn_percentage.is_ok() || hashes_per_tick.is_some() @@ -2913,7 +2912,7 @@ fn main() { } }; let warped_bank = Bank::new_from_parent_with_tracer( - base_bank, + &base_bank, base_bank.collector_id(), next_epoch, tracer, @@ -2930,7 +2929,7 @@ fn main() { println!("Slot: {} => {}", base_bank.slot(), warped_bank.slot()); println!("Epoch: {} => {}", base_bank.epoch(), warped_bank.epoch()); - assert_capitalization(base_bank); + assert_capitalization(&base_bank); assert_capitalization(&warped_bank); let interest_per_epoch = ((warped_bank.capitalization() as f64) / (base_bank.capitalization() as f64) @@ -3177,7 +3176,7 @@ fn main() { ); } - assert_capitalization(bank); + assert_capitalization(&bank); println!("Inflation: {:?}", bank.inflation()); println!("RentCollector: {:?}", bank.rent_collector()); println!("Capitalization: {}", Sol(bank.capitalization())); diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index ea22886aa9..25bd6b64c8 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -733,7 +733,7 @@ pub fn process_blockstore_from_root( info!("ledger processing timing: {:?}", timing); { let bank_forks = bank_forks.read().unwrap(); - let mut bank_slots = bank_forks.banks().keys().collect::>(); + let mut bank_slots = bank_forks.banks().keys().copied().collect::>(); bank_slots.sort_unstable(); info!( @@ -1165,7 +1165,7 @@ fn load_frozen_forks( ); process_next_slots( - bank_forks.read().unwrap().get(start_slot).unwrap(), + &bank_forks.read().unwrap().get(start_slot).unwrap(), start_slot_meta, blockstore, leader_schedule_cache, @@ -3118,7 +3118,7 @@ pub mod tests { // Set up bank1 let mut bank_forks = BankForks::new(Bank::new_for_tests(&genesis_config)); - let bank0 = bank_forks.get(0).unwrap().clone(); + let bank0 = bank_forks.get(0).unwrap(); let opts = ProcessOptions { poh_verify: true, accounts_db_test_hash_calculation: true, diff --git a/rpc/src/optimistically_confirmed_bank_tracker.rs b/rpc/src/optimistically_confirmed_bank_tracker.rs index 95f2f863d9..2b2acec6e5 100644 --- a/rpc/src/optimistically_confirmed_bank_tracker.rs +++ b/rpc/src/optimistically_confirmed_bank_tracker.rs @@ -217,7 +217,7 @@ impl OptimisticallyConfirmedBankTracker { Self::notify_or_defer_confirmed_banks( subscriptions, bank_forks, - bank, + &bank, *highest_confirmed_slot, last_notified_confirmed_slot, pending_optimistically_confirmed_banks, @@ -330,13 +330,13 @@ mod tests { let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(100); let bank = Bank::new_for_tests(&genesis_config); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); - let bank1 = bank_forks.read().unwrap().get(1).unwrap().clone(); + let bank1 = bank_forks.read().unwrap().get(1).unwrap(); let bank2 = Bank::new_from_parent(&bank1, &Pubkey::default(), 2); bank_forks.write().unwrap().insert(bank2); - let bank2 = bank_forks.read().unwrap().get(2).unwrap().clone(); + let bank2 = bank_forks.read().unwrap().get(2).unwrap(); let bank3 = Bank::new_from_parent(&bank2, &Pubkey::default(), 3); bank_forks.write().unwrap().insert(bank3); @@ -402,7 +402,7 @@ mod tests { assert_eq!(highest_confirmed_slot, 3); // Test bank will only be cached when frozen - let bank3 = bank_forks.read().unwrap().get(3).unwrap().clone(); + let bank3 = bank_forks.read().unwrap().get(3).unwrap(); bank3.freeze(); OptimisticallyConfirmedBankTracker::process_notification( @@ -420,7 +420,7 @@ mod tests { assert_eq!(pending_optimistically_confirmed_banks.len(), 0); // Test higher root will be cached and clear pending_optimistically_confirmed_banks - let bank3 = bank_forks.read().unwrap().get(3).unwrap().clone(); + let bank3 = bank_forks.read().unwrap().get(3).unwrap(); let bank4 = Bank::new_from_parent(&bank3, &Pubkey::default(), 4); bank_forks.write().unwrap().insert(bank4); OptimisticallyConfirmedBankTracker::process_notification( @@ -438,10 +438,10 @@ mod tests { assert!(pending_optimistically_confirmed_banks.contains(&4)); assert_eq!(highest_confirmed_slot, 4); - let bank4 = bank_forks.read().unwrap().get(4).unwrap().clone(); + let bank4 = bank_forks.read().unwrap().get(4).unwrap(); let bank5 = Bank::new_from_parent(&bank4, &Pubkey::default(), 5); bank_forks.write().unwrap().insert(bank5); - let bank5 = bank_forks.read().unwrap().get(5).unwrap().clone(); + let bank5 = bank_forks.read().unwrap().get(5).unwrap(); OptimisticallyConfirmedBankTracker::process_notification( BankNotification::Root(bank5), &bank_forks, @@ -458,10 +458,10 @@ mod tests { assert_eq!(highest_confirmed_slot, 4); // Banks <= root do not get added to pending list, even if not frozen - let bank5 = bank_forks.read().unwrap().get(5).unwrap().clone(); + let bank5 = bank_forks.read().unwrap().get(5).unwrap(); let bank6 = Bank::new_from_parent(&bank5, &Pubkey::default(), 6); bank_forks.write().unwrap().insert(bank6); - let bank5 = bank_forks.read().unwrap().get(5).unwrap().clone(); + let bank5 = bank_forks.read().unwrap().get(5).unwrap(); let bank7 = Bank::new_from_parent(&bank5, &Pubkey::default(), 7); bank_forks.write().unwrap().insert(bank7); bank_forks diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index 1689f761ca..9bc0089e55 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -250,7 +250,7 @@ impl JsonRpcRequestProcessor { CommitmentLevel::SingleGossip | CommitmentLevel::Confirmed => unreachable!(), // SingleGossip variant is deprecated }; - r_bank_forks.get(slot).cloned().unwrap_or_else(|| { + r_bank_forks.get(slot).unwrap_or_else(|| { // We log a warning instead of returning an error, because all known error cases // are due to known bugs that should be fixed instead. // @@ -1066,8 +1066,7 @@ impl JsonRpcRequestProcessor { || confirmed_block.block_height.is_none() { let r_bank_forks = self.bank_forks.read().unwrap(); - let bank = r_bank_forks.get(slot).cloned(); - if let Some(bank) = bank { + if let Some(bank) = r_bank_forks.get(slot) { if confirmed_block.block_time.is_none() { confirmed_block.block_time = Some(bank.clock().unix_timestamp); @@ -7643,13 +7642,13 @@ pub mod tests { let bank = Bank::new_for_tests(&genesis_config); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); - let bank1 = bank_forks.read().unwrap().get(1).unwrap().clone(); + let bank1 = bank_forks.read().unwrap().get(1).unwrap(); let bank2 = Bank::new_from_parent(&bank1, &Pubkey::default(), 2); bank_forks.write().unwrap().insert(bank2); - let bank2 = bank_forks.read().unwrap().get(2).unwrap().clone(); + let bank2 = bank_forks.read().unwrap().get(2).unwrap(); let bank3 = Bank::new_from_parent(&bank2, &Pubkey::default(), 3); bank_forks.write().unwrap().insert(bank3); @@ -7750,7 +7749,7 @@ pub mod tests { assert_eq!(slot, 2); // Test freezing an optimistically confirmed bank will update cache - let bank3 = bank_forks.read().unwrap().get(3).unwrap().clone(); + let bank3 = bank_forks.read().unwrap().get(3).unwrap(); OptimisticallyConfirmedBankTracker::process_notification( BankNotification::Frozen(bank3), &bank_forks, diff --git a/rpc/src/rpc_pubsub.rs b/rpc/src/rpc_pubsub.rs index f12ae086f2..0e81e2e12b 100644 --- a/rpc/src/rpc_pubsub.rs +++ b/rpc/src/rpc_pubsub.rs @@ -838,7 +838,7 @@ mod tests { let bank = Bank::new_for_tests(&genesis_config); let blockhash = bank.last_blockhash(); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); @@ -964,7 +964,7 @@ mod tests { let bank = Bank::new_for_tests(&genesis_config); let blockhash = bank.last_blockhash(); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); @@ -1152,7 +1152,7 @@ mod tests { let bank = Bank::new_for_tests(&genesis_config); let blockhash = bank.last_blockhash(); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); let bob = Keypair::new(); diff --git a/rpc/src/rpc_subscriptions.rs b/rpc/src/rpc_subscriptions.rs index d25670ef1b..2e8325eb08 100644 --- a/rpc/src/rpc_subscriptions.rs +++ b/rpc/src/rpc_subscriptions.rs @@ -145,7 +145,7 @@ where X: Clone + Default, { let mut notified = false; - if let Some(bank) = bank_forks.read().unwrap().get(slot).cloned() { + if let Some(bank) = bank_forks.read().unwrap().get(slot) { let results = bank_method(&bank, params); let mut w_last_notified_slot = subscription.last_notified_slot.write().unwrap(); let (filter_results, result_slot) = @@ -1262,7 +1262,7 @@ pub(crate) mod tests { let bank = Bank::new_for_tests(&genesis_config); let blockhash = bank.last_blockhash(); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); let alice = Keypair::new(); @@ -1839,10 +1839,10 @@ pub(crate) mod tests { let blockhash = bank.last_blockhash(); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); - let bank1 = bank_forks.read().unwrap().get(1).unwrap().clone(); + let bank1 = bank_forks.read().unwrap().get(1).unwrap(); // add account for alice and process the transaction at bank1 let alice = Keypair::new(); @@ -1870,7 +1870,7 @@ pub(crate) mod tests { 16, &stake::program::id(), ); - let bank2 = bank_forks.read().unwrap().get(2).unwrap().clone(); + let bank2 = bank_forks.read().unwrap().get(2).unwrap(); bank2.process_transaction(&tx).unwrap(); @@ -1887,7 +1887,7 @@ pub(crate) mod tests { 16, &stake::program::id(), ); - let bank3 = bank_forks.read().unwrap().get(3).unwrap().clone(); + let bank3 = bank_forks.read().unwrap().get(3).unwrap(); bank3.process_transaction(&tx).unwrap(); @@ -2026,10 +2026,10 @@ pub(crate) mod tests { let blockhash = bank.last_blockhash(); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); - let bank1 = bank_forks.read().unwrap().get(1).unwrap().clone(); + let bank1 = bank_forks.read().unwrap().get(1).unwrap(); // add account for alice and process the transaction at bank1 let alice = Keypair::new(); @@ -2057,7 +2057,7 @@ pub(crate) mod tests { 16, &stake::program::id(), ); - let bank2 = bank_forks.read().unwrap().get(2).unwrap().clone(); + let bank2 = bank_forks.read().unwrap().get(2).unwrap(); bank2.process_transaction(&tx).unwrap(); @@ -2137,10 +2137,10 @@ pub(crate) mod tests { let blockhash = bank.last_blockhash(); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); - let bank1 = bank_forks.read().unwrap().get(1).unwrap().clone(); + let bank1 = bank_forks.read().unwrap().get(1).unwrap(); // add account for alice and process the transaction at bank1 let alice = Keypair::new(); @@ -2168,7 +2168,7 @@ pub(crate) mod tests { 16, &stake::program::id(), ); - let bank2 = bank_forks.read().unwrap().get(2).unwrap().clone(); + let bank2 = bank_forks.read().unwrap().get(2).unwrap(); bank2.process_transaction(&tx).unwrap(); @@ -2265,7 +2265,7 @@ pub(crate) mod tests { 16, &stake::program::id(), ); - let bank3 = bank_forks.read().unwrap().get(3).unwrap().clone(); + let bank3 = bank_forks.read().unwrap().get(3).unwrap(); bank3.process_transaction(&tx).unwrap(); bank3.freeze(); @@ -2330,7 +2330,7 @@ pub(crate) mod tests { .unwrap(); let next_bank = Bank::new_from_parent( - &bank_forks.get(0).unwrap().clone(), + &bank_forks.get(0).unwrap(), &solana_sdk::pubkey::new_rand(), 1, ); @@ -2630,7 +2630,7 @@ pub(crate) mod tests { let bank = Bank::new_for_tests(&genesis_config); let blockhash = bank.last_blockhash(); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let bank0 = bank_forks.read().unwrap().get(0).unwrap().clone(); + let bank0 = bank_forks.read().unwrap().get(0).unwrap(); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); let bank2 = Bank::new_from_parent(&bank0, &Pubkey::default(), 2); @@ -2677,7 +2677,7 @@ pub(crate) mod tests { ); // Add the transaction to the 1st bank and then freeze the bank - let bank1 = bank_forks.write().unwrap().get(1).cloned().unwrap(); + let bank1 = bank_forks.write().unwrap().get(1).unwrap(); bank1.process_transaction(&tx).unwrap(); bank1.freeze(); @@ -2752,7 +2752,7 @@ pub(crate) mod tests { ) .unwrap(); - let bank2 = bank_forks.read().unwrap().get(2).unwrap().clone(); + let bank2 = bank_forks.read().unwrap().get(2).unwrap(); bank2.freeze(); highest_confirmed_slot = 0; OptimisticallyConfirmedBankTracker::process_notification( diff --git a/runtime/src/bank_forks.rs b/runtime/src/bank_forks.rs index 5a20b004b8..14effc9d85 100644 --- a/runtime/src/bank_forks.rs +++ b/runtime/src/bank_forks.rs @@ -63,8 +63,8 @@ impl BankForks { Self::new_from_banks(&[Arc::new(bank)], root) } - pub fn banks(&self) -> &HashMap> { - &self.banks + pub fn banks(&self) -> HashMap> { + self.banks.clone() } /// Create a map of bank slot id to the set of ancestors for the bank slot. @@ -80,8 +80,8 @@ impl BankForks { } /// Create a map of bank slot id to the set of all of its descendants - pub fn descendants(&self) -> &HashMap> { - &self.descendants + pub fn descendants(&self) -> HashMap> { + self.descendants.clone() } pub fn frozen_banks(&self) -> HashMap> { @@ -100,16 +100,16 @@ impl BankForks { .collect() } - pub fn get(&self, bank_slot: Slot) -> Option<&Arc> { - self.banks.get(&bank_slot) + pub fn get(&self, bank_slot: Slot) -> Option> { + self.banks.get(&bank_slot).cloned() } pub fn get_with_checked_hash( &self, (bank_slot, expected_hash): (Slot, Hash), - ) -> Option<&Arc> { - let maybe_bank = self.banks.get(&bank_slot); - if let Some(bank) = maybe_bank { + ) -> Option> { + let maybe_bank = self.get(bank_slot); + if let Some(bank) = &maybe_bank { assert_eq!(bank.hash(), expected_hash); } maybe_bank @@ -506,10 +506,6 @@ impl BankForks { self.snapshot_config = snapshot_config; } - pub fn snapshot_config(&self) -> &Option { - &self.snapshot_config - } - pub fn set_accounts_hash_interval_slots(&mut self, accounts_interval_slots: u64) { self.accounts_hash_interval_slots = accounts_interval_slots; } @@ -707,7 +703,7 @@ mod tests { ]) ); assert_eq!( - *bank_forks.descendants(), + bank_forks.descendants(), make_hash_map(vec![ (0, vec![1, 2, 3, 4]), (1, vec![2]), @@ -724,7 +720,7 @@ mod tests { banks[2].squash(); assert_eq!(bank_forks.ancestors(), make_hash_map(vec![(2, vec![]),])); assert_eq!( - *bank_forks.descendants(), + bank_forks.descendants(), make_hash_map(vec![(0, vec![2]), (1, vec![2]), (2, vec![]),]) ); banks.push(bank_forks.insert(Bank::new_from_parent(&banks[2], &Pubkey::default(), 5))); @@ -734,7 +730,7 @@ mod tests { make_hash_map(vec![(2, vec![]), (5, vec![2]), (6, vec![2, 5])]) ); assert_eq!( - *bank_forks.descendants(), + bank_forks.descendants(), make_hash_map(vec![ (0, vec![2]), (1, vec![2]), @@ -766,7 +762,7 @@ mod tests { ]) ); assert_eq!( - *bank_forks.descendants(), + bank_forks.descendants(), make_hash_map(vec![ (0, vec![1, 2, 3, 4]), (1, vec![2]), @@ -786,7 +782,7 @@ mod tests { make_hash_map(vec![(1, vec![]), (2, vec![]),]) ); assert_eq!( - *bank_forks.descendants(), + bank_forks.descendants(), make_hash_map(vec![(0, vec![1, 2]), (1, vec![2]), (2, vec![]),]) ); banks.push(bank_forks.insert(Bank::new_from_parent(&banks[2], &Pubkey::default(), 5))); @@ -801,7 +797,7 @@ mod tests { ]) ); assert_eq!( - *bank_forks.descendants(), + bank_forks.descendants(), make_hash_map(vec![ (0, vec![1, 2]), (1, vec![2]),