* adds ShredId uniquely identifying each shred (#21820)
(cherry picked from commit 4ceb2689f5
)
# Conflicts:
# ledger/src/blockstore.rs
* removes backport merge conflicts
Co-authored-by: behzad nouri <behzadnouri@gmail.com>
This commit is contained in:
@ -24,7 +24,7 @@ use {
|
||||
solana_ledger::{
|
||||
blockstore::Blockstore,
|
||||
leader_schedule_cache::LeaderScheduleCache,
|
||||
shred::{Shred, ShredType},
|
||||
shred::{Shred, ShredId},
|
||||
},
|
||||
solana_measure::measure::Measure,
|
||||
solana_perf::packet::PacketBatch,
|
||||
@ -145,13 +145,13 @@ impl RetransmitStats {
|
||||
}
|
||||
|
||||
// Map of shred (slot, index, type) => list of hash values seen for that key.
|
||||
type ShredFilter = LruCache<(Slot, u32, ShredType), Vec<u64>>;
|
||||
type ShredFilter = LruCache<ShredId, Vec<u64>>;
|
||||
|
||||
type ShredFilterAndHasher = (ShredFilter, PacketHasher);
|
||||
|
||||
// Returns true if shred is already received and should skip retransmit.
|
||||
fn should_skip_retransmit(shred: &Shred, shreds_received: &Mutex<ShredFilterAndHasher>) -> bool {
|
||||
let key = (shred.slot(), shred.index(), shred.shred_type());
|
||||
let key = shred.id();
|
||||
let mut shreds_received = shreds_received.lock().unwrap();
|
||||
let (cache, hasher) = shreds_received.deref_mut();
|
||||
match cache.get_mut(&key) {
|
||||
|
@ -217,12 +217,9 @@ fn run_check_duplicate(
|
||||
let check_duplicate = |shred: Shred| -> Result<()> {
|
||||
let shred_slot = shred.slot();
|
||||
if !blockstore.has_duplicate_shreds_in_slot(shred_slot) {
|
||||
if let Some(existing_shred_payload) = blockstore.is_shred_duplicate(
|
||||
shred_slot,
|
||||
shred.index(),
|
||||
shred.payload.clone(),
|
||||
shred.shred_type(),
|
||||
) {
|
||||
if let Some(existing_shred_payload) =
|
||||
blockstore.is_shred_duplicate(shred.id(), shred.payload.clone())
|
||||
{
|
||||
cluster_info.push_duplicate_shred(&shred, &existing_shred_payload)?;
|
||||
blockstore.store_duplicate_slot(
|
||||
shred_slot,
|
||||
|
Reference in New Issue
Block a user