parent
8db34474d3
commit
bc37dfc4c1
|
@ -857,6 +857,8 @@ impl Blockstore {
|
||||||
&mut index_meta_time,
|
&mut index_meta_time,
|
||||||
is_trusted,
|
is_trusted,
|
||||||
handle_duplicate,
|
handle_duplicate,
|
||||||
|
leader_schedule,
|
||||||
|
false,
|
||||||
) {
|
) {
|
||||||
num_inserted += 1;
|
num_inserted += 1;
|
||||||
}
|
}
|
||||||
|
@ -901,6 +903,8 @@ impl Blockstore {
|
||||||
&mut index_meta_time,
|
&mut index_meta_time,
|
||||||
is_trusted,
|
is_trusted,
|
||||||
&handle_duplicate,
|
&handle_duplicate,
|
||||||
|
leader_schedule,
|
||||||
|
true,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1113,6 +1117,8 @@ impl Blockstore {
|
||||||
index_meta_time: &mut u64,
|
index_meta_time: &mut u64,
|
||||||
is_trusted: bool,
|
is_trusted: bool,
|
||||||
handle_duplicate: &F,
|
handle_duplicate: &F,
|
||||||
|
leader_schedule: Option<&Arc<LeaderScheduleCache>>,
|
||||||
|
is_recovered: bool,
|
||||||
) -> bool
|
) -> bool
|
||||||
where
|
where
|
||||||
F: Fn(Shred) -> (),
|
F: Fn(Shred) -> (),
|
||||||
|
@ -1133,7 +1139,13 @@ impl Blockstore {
|
||||||
if Self::is_data_shred_present(&shred, slot_meta, &index_meta.data()) {
|
if Self::is_data_shred_present(&shred, slot_meta, &index_meta.data()) {
|
||||||
handle_duplicate(shred);
|
handle_duplicate(shred);
|
||||||
return false;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1211,6 +1223,8 @@ impl Blockstore {
|
||||||
shred: &Shred,
|
shred: &Shred,
|
||||||
slot_meta: &SlotMeta,
|
slot_meta: &SlotMeta,
|
||||||
last_root: &RwLock<u64>,
|
last_root: &RwLock<u64>,
|
||||||
|
leader_schedule: Option<&Arc<LeaderScheduleCache>>,
|
||||||
|
is_recovered: bool,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
let shred_index = u64::from(shred.index());
|
let shred_index = u64::from(shred.index());
|
||||||
let slot = shred.slot();
|
let slot = shred.slot();
|
||||||
|
@ -1225,13 +1239,16 @@ impl Blockstore {
|
||||||
// for the slot
|
// for the slot
|
||||||
let last_index = slot_meta.last_index;
|
let last_index = slot_meta.last_index;
|
||||||
if shred_index >= 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!(
|
datapoint_error!(
|
||||||
"blockstore_error",
|
"blockstore_error",
|
||||||
(
|
(
|
||||||
"error",
|
"error",
|
||||||
format!(
|
format!(
|
||||||
"Slot {}: received index {} >= slot.last_index {}",
|
"Leader {:?}, slot {}: received index {} >= slot.last_index {}, is_recovered: {}",
|
||||||
slot, shred_index, last_index
|
leader_pubkey, slot, shred_index, last_index, is_recovered
|
||||||
),
|
),
|
||||||
String
|
String
|
||||||
)
|
)
|
||||||
|
@ -1241,13 +1258,16 @@ impl Blockstore {
|
||||||
// Check that we do not receive a shred with "last_index" true, but shred_index
|
// Check that we do not receive a shred with "last_index" true, but shred_index
|
||||||
// less than our current received
|
// less than our current received
|
||||||
if last_in_slot && shred_index < slot_meta.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!(
|
datapoint_error!(
|
||||||
"blockstore_error",
|
"blockstore_error",
|
||||||
(
|
(
|
||||||
"error",
|
"error",
|
||||||
format!(
|
format!(
|
||||||
"Slot {}: received shred_index {} < slot.received {}",
|
"Leader {:?}, slot {}: received shred_index {} < slot.received {}, is_recovered: {}",
|
||||||
slot, shred_index, slot_meta.received
|
leader_pubkey, slot, shred_index, slot_meta.received, is_recovered
|
||||||
),
|
),
|
||||||
String
|
String
|
||||||
)
|
)
|
||||||
|
@ -4720,7 +4740,7 @@ pub mod tests {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
assert_eq!(
|
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
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -4736,7 +4756,7 @@ pub mod tests {
|
||||||
panic!("Shred in unexpected format")
|
panic!("Shred in unexpected format")
|
||||||
}
|
}
|
||||||
assert_eq!(
|
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
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue