From ee16cc77a3118562e85e39f4b9b801dafc3c6d5f Mon Sep 17 00:00:00 2001 From: Carl Date: Tue, 26 Feb 2019 17:29:38 -0800 Subject: [PATCH] Move last_ids to a simple Hash, unwrap from Arc> --- src/replay_stage.rs | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/replay_stage.rs b/src/replay_stage.rs index 5116bc9af3..8b15a7f6cc 100644 --- a/src/replay_stage.rs +++ b/src/replay_stage.rs @@ -62,7 +62,7 @@ impl ReplayStage { voting_keypair: &Option>, ledger_entry_sender: &EntrySender, current_blob_index: &mut u64, - last_entry_id: &Arc>, + last_entry_id: &mut Hash, leader_scheduler: &Arc>, subscriptions: &Arc, slot: u64, @@ -79,7 +79,7 @@ impl ReplayStage { let mut num_entries_to_write = entries.len(); let now = Instant::now(); - if !entries.as_slice().verify(&last_entry_id.read().unwrap()) { + if !entries.as_slice().verify(last_entry_id) { inc_new_counter_info!("replicate_stage-verify-fail", entries.len()); return Err(Error::BlobError(BlobError::VerificationFailed)); } @@ -155,7 +155,7 @@ impl ReplayStage { // If leader rotation happened, only write the entries up to leader rotation. entries.truncate(num_entries_to_write); entries_with_meta.truncate(num_entries_to_write); - *last_entry_id.write().unwrap() = entries + *last_entry_id = entries .last() .expect("Entries cannot be empty at this point") .id; @@ -206,7 +206,7 @@ impl ReplayStage { let subscriptions_ = subscriptions.clone(); // Gather up all the metadata about the current state of the ledger - let (mut bank, tick_height, last_entry_id, mut current_blob_index) = { + let (mut bank, tick_height, mut last_entry_id, mut current_blob_index) = { let mut bank_forks = bank_forks.write().unwrap(); bank_forks.set_working_bank_id(bank_forks_info[0].bank_id); let bank = bank_forks.working_bank(); @@ -219,8 +219,6 @@ impl ReplayStage { ) }; - let last_entry_id = Arc::new(RwLock::new(last_entry_id)); - // Update Tpu and other fullnode components with the current bank let (mut current_slot, mut current_leader_id, mut max_tick_height_for_slot) = { let leader_scheduler = leader_scheduler.read().unwrap(); @@ -248,7 +246,7 @@ impl ReplayStage { to_leader_sender .send(TvuRotationInfo { bank: old_bank, - last_entry_id: *last_entry_id.read().unwrap(), + last_entry_id, slot, leader_id, }) @@ -341,7 +339,7 @@ impl ReplayStage { &voting_keypair, &ledger_entry_sender, &mut current_blob_index, - &last_entry_id, + &mut last_entry_id, &leader_scheduler_, &subscriptions_, slot, @@ -386,7 +384,7 @@ impl ReplayStage { let last_entry = blocktree .get_slot_entries(slot, meta.last_index, Some(1)) .unwrap(); - *(last_entry_id.write().unwrap()) = last_entry[0].id; + last_entry_id = last_entry[0].id; } let old_bank = bank.clone(); @@ -419,7 +417,7 @@ impl ReplayStage { to_leader_sender .send(TvuRotationInfo { bank: old_bank, - last_entry_id: *last_entry_id.read().unwrap(), + last_entry_id, slot: next_slot, leader_id, }) @@ -853,7 +851,7 @@ mod test { // Set up the cluster info let cluster_info_me = Arc::new(RwLock::new(ClusterInfo::new(my_node.info.clone()))); let (ledger_entry_sender, _ledger_entry_receiver) = channel(); - let last_entry_id = Hash::default(); + let mut last_entry_id = Hash::default(); let mut current_blob_index = 0; let mut last_id = Hash::default(); let mut entries = Vec::new(); @@ -874,7 +872,7 @@ mod test { &voting_keypair, &ledger_entry_sender, &mut current_blob_index, - &Arc::new(RwLock::new(last_entry_id)), + &mut last_entry_id, &leader_scheduler, &Arc::new(RpcSubscriptions::default()), 0, @@ -902,7 +900,7 @@ mod test { &voting_keypair, &ledger_entry_sender, &mut current_blob_index, - &Arc::new(RwLock::new(last_entry_id)), + &mut last_entry_id, &leader_scheduler, &Arc::new(RpcSubscriptions::default()), 0,