Verify signature of recovered shred before adding them to blocktree (#5811)

* Verify signature of recovered shred before adding them to blocktree

* fix failing tests, and review comments
This commit is contained in:
Pankaj Garg
2019-09-05 18:20:30 -07:00
committed by GitHub
parent 719c03d33f
commit 3d3b03a123
14 changed files with 143 additions and 142 deletions

View File

@ -423,7 +423,7 @@ mod test {
let (mut shreds, _) = make_slot_entries(1, 0, 1);
let (shreds2, _) = make_slot_entries(5, 2, 1);
shreds.extend(shreds2);
blocktree.insert_shreds(shreds).unwrap();
blocktree.insert_shreds(shreds, None).unwrap();
assert_eq!(
RepairService::generate_repairs(&blocktree, 0, 2).unwrap(),
vec![RepairType::HighestBlob(0, 0), RepairType::Orphan(2)]
@ -443,7 +443,7 @@ mod test {
// Write this blob to slot 2, should chain to slot 0, which we haven't received
// any blobs for
blocktree.insert_shreds(shreds).unwrap();
blocktree.insert_shreds(shreds, None).unwrap();
// Check that repair tries to patch the empty slot
assert_eq!(
@ -479,7 +479,7 @@ mod test {
missing_indexes_per_slot.insert(0, index);
}
}
blocktree.insert_shreds(shreds_to_write).unwrap();
blocktree.insert_shreds(shreds_to_write, None).unwrap();
let expected: Vec<RepairType> = (0..num_slots)
.flat_map(|slot| {
@ -517,7 +517,7 @@ mod test {
// Remove last shred (which is also last in slot) so that slot is not complete
shreds.pop();
blocktree.insert_shreds(shreds).unwrap();
blocktree.insert_shreds(shreds, None).unwrap();
// We didn't get the last blob for this slot, so ask for the highest blob for that slot
let expected: Vec<RepairType> =
@ -543,7 +543,7 @@ mod test {
let shreds = make_chaining_slot_entries(&slots, num_entries_per_slot);
for (mut slot_shreds, _) in shreds.into_iter() {
slot_shreds.remove(0);
blocktree.insert_shreds(slot_shreds).unwrap();
blocktree.insert_shreds(slot_shreds, None).unwrap();
}
// Iterate through all possible combinations of start..end (inclusive on both
@ -595,7 +595,7 @@ mod test {
let parent = if i > 0 { i - 1 } else { 0 };
let (shreds, _) = make_slot_entries(i, parent, num_entries_per_slot as u64);
blocktree.insert_shreds(shreds).unwrap();
blocktree.insert_shreds(shreds, None).unwrap();
}
let end = 4;
@ -648,8 +648,10 @@ mod test {
.collect();
let mut full_slots = BTreeSet::new();
blocktree.insert_shreds(fork1_shreds).unwrap();
blocktree.insert_shreds(fork2_incomplete_shreds).unwrap();
blocktree.insert_shreds(fork1_shreds, None).unwrap();
blocktree
.insert_shreds(fork2_incomplete_shreds, None)
.unwrap();
// Test that only slots > root from fork1 were included
let epoch_schedule = EpochSchedule::new(32, 32, false);
@ -672,7 +674,7 @@ mod test {
.into_iter()
.flat_map(|(shreds, _)| shreds)
.collect();
blocktree.insert_shreds(fork3_shreds).unwrap();
blocktree.insert_shreds(fork3_shreds, None).unwrap();
RepairService::get_completed_slots_past_root(
&blocktree,
&mut full_slots,
@ -719,7 +721,7 @@ mod test {
let step = rng.gen_range(1, max_step + 1) as usize;
let step = std::cmp::min(step, num_shreds - i);
let shreds_to_insert = shreds.drain(..step).collect_vec();
blocktree_.insert_shreds(shreds_to_insert).unwrap();
blocktree_.insert_shreds(shreds_to_insert, None).unwrap();
sleep(Duration::from_millis(repair_interval_ms));
i += step;
}
@ -749,7 +751,7 @@ mod test {
// Update with new root, should filter out the slots <= root
root = num_slots / 2;
let (shreds, _) = make_slot_entries(num_slots + 2, num_slots + 1, entries_per_slot);
blocktree.insert_shreds(shreds).unwrap();
blocktree.insert_shreds(shreds, None).unwrap();
RepairService::update_epoch_slots(
Pubkey::default(),
root,