From 2cdd3f835f00ca531af7141459d657f0ea60a946 Mon Sep 17 00:00:00 2001 From: carllin Date: Wed, 27 May 2020 18:07:31 -0700 Subject: [PATCH] log leader (#10280) Co-authored-by: Carl --- ledger/src/blockstore.rs | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index f67ebacb21..0c642d5d15 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -767,6 +767,8 @@ impl Blockstore { &mut index_meta_time, is_trusted, handle_duplicate, + leader_schedule, + false, ) { num_inserted += 1; } @@ -811,6 +813,8 @@ impl Blockstore { &mut index_meta_time, is_trusted, &handle_duplicate, + leader_schedule, + true, ); } } @@ -999,6 +1003,8 @@ impl Blockstore { index_meta_time: &mut u64, is_trusted: bool, handle_duplicate: &F, + leader_schedule: Option<&Arc>, + is_recovered: bool, ) -> bool where F: Fn(Shred) -> (), @@ -1019,7 +1025,13 @@ impl Blockstore { if Self::is_data_shred_present(&shred, slot_meta, &index_meta.data()) { handle_duplicate(shred); return false; - } else if !Blockstore::should_insert_data_shred(&shred, slot_meta, &self.last_root) { + } else if !Blockstore::should_insert_data_shred( + &shred, + slot_meta, + &self.last_root, + leader_schedule, + is_recovered, + ) { return false; } } @@ -1097,6 +1109,8 @@ impl Blockstore { shred: &Shred, slot_meta: &SlotMeta, last_root: &RwLock, + leader_schedule: Option<&Arc>, + is_recovered: bool, ) -> bool { let shred_index = u64::from(shred.index()); let slot = shred.slot(); @@ -1111,13 +1125,16 @@ impl Blockstore { // for the slot let last_index = slot_meta.last_index; if shred_index >= last_index { + let leader_pubkey = leader_schedule + .map(|leader_schedule| leader_schedule.slot_leader_at(slot, None)) + .unwrap_or(None); datapoint_error!( "blockstore_error", ( "error", format!( - "Slot {}: received index {} >= slot.last_index {}", - slot, shred_index, last_index + "Leader {:?}, slot {}: received index {} >= slot.last_index {}, is_recovered: {}", + leader_pubkey, slot, shred_index, last_index, is_recovered ), String ) @@ -1127,13 +1144,16 @@ impl Blockstore { // Check that we do not receive a shred with "last_index" true, but shred_index // less than our current received if last_in_slot && shred_index < slot_meta.received { + let leader_pubkey = leader_schedule + .map(|leader_schedule| leader_schedule.slot_leader_at(slot, None)) + .unwrap_or(None); datapoint_error!( "blockstore_error", ( "error", format!( - "Slot {}: received shred_index {} < slot.received {}", - slot, shred_index, slot_meta.received + "Leader {:?}, slot {}: received shred_index {} < slot.received {}, is_recovered: {}", + leader_pubkey, slot, shred_index, slot_meta.received, is_recovered ), String ) @@ -4524,7 +4544,7 @@ pub mod tests { } }; assert_eq!( - Blockstore::should_insert_data_shred(&shred7, &slot_meta, &last_root), + Blockstore::should_insert_data_shred(&shred7, &slot_meta, &last_root, None, false), false ); @@ -4540,7 +4560,7 @@ pub mod tests { panic!("Shred in unexpected format") } assert_eq!( - Blockstore::should_insert_data_shred(&shred7, &slot_meta, &last_root), + Blockstore::should_insert_data_shred(&shred7, &slot_meta, &last_root, None, false), false ); }