Revert "Revert "adds back position field to coding-shred-header (backport #21600) (#21619)""

This reverts commit c901227d0f.
This commit is contained in:
Tyera Eulberg
2021-12-16 14:23:16 -07:00
committed by Tyera Eulberg
parent e3e9d32f33
commit 01e932c6a4
4 changed files with 75 additions and 19 deletions

View File

@ -632,19 +632,19 @@ mod tests {
assert!(should_skip_retransmit(&shred, &shreds_received));
assert!(should_skip_retransmit(&shred, &shreds_received));
let shred = Shred::new_empty_coding(slot, index, 0, 1, 1, version);
let shred = Shred::new_empty_coding(slot, index, 0, 1, 1, 0, version);
// Coding at (1, 5) passes
assert!(!should_skip_retransmit(&shred, &shreds_received));
// then blocked
assert!(should_skip_retransmit(&shred, &shreds_received));
let shred = Shred::new_empty_coding(slot, index, 2, 1, 1, version);
let shred = Shred::new_empty_coding(slot, index, 2, 1, 1, 0, version);
// 2nd unique coding at (1, 5) passes
assert!(!should_skip_retransmit(&shred, &shreds_received));
// same again is blocked
assert!(should_skip_retransmit(&shred, &shreds_received));
let shred = Shred::new_empty_coding(slot, index, 3, 1, 1, version);
let shred = Shred::new_empty_coding(slot, index, 3, 1, 1, 0, version);
// Another unique coding at (1, 5) always blocked
assert!(should_skip_retransmit(&shred, &shreds_received));
assert!(should_skip_retransmit(&shred, &shreds_received));

View File

@ -791,7 +791,15 @@ mod test {
));
// If it's a coding shred, test that slot >= root
let (common, coding) = Shredder::new_coding_shred_header(5, 5, 5, 6, 6, 0);
let (common, coding) = Shredder::new_coding_shred_header(
5, // slot
5, // index
5, // fec_set_index
6, // num_data_shreds
6, // num_coding_shreds
3, // position
0, // version
);
let mut coding_shred =
Shred::new_empty_from_header(common, DataShredHeader::default(), coding);
Shredder::sign_shred(&leader_keypair, &mut coding_shred);
@ -918,7 +926,15 @@ mod test {
std::net::{IpAddr, Ipv4Addr},
};
solana_logger::setup();
let (common, coding) = Shredder::new_coding_shred_header(5, 5, 5, 6, 6, 0);
let (common, coding) = Shredder::new_coding_shred_header(
5, // slot
5, // index
5, // fec_set_index
6, // num_data_shreds
6, // num_coding_shreds
4, // position
0, // version
);
let shred = Shred::new_empty_from_header(common, DataShredHeader::default(), coding);
let mut shreds = vec![shred.clone(), shred.clone(), shred];
let _from_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);

View File

@ -5717,7 +5717,14 @@ pub mod tests {
let blockstore = Blockstore::open(&blockstore_path).unwrap();
let slot = 1;
let (shred, coding) = Shredder::new_coding_shred_header(slot, 11, 11, 11, 11, 0);
let (shred, coding) = Shredder::new_coding_shred_header(
slot, 11, // index
11, // fec_set_index
11, // num_data_shreds
11, // num_coding_shreds
8, // position
0, // version
);
let coding_shred =
Shred::new_empty_from_header(shred, DataShredHeader::default(), coding);
@ -5767,7 +5774,14 @@ pub mod tests {
let last_root = RwLock::new(0);
let slot = 1;
let (mut shred, coding) = Shredder::new_coding_shred_header(slot, 11, 11, 11, 11, 0);
let (mut shred, coding) = Shredder::new_coding_shred_header(
slot, 11, // index
11, // fec_set_index
11, // num_data_shreds
11, // num_coding_shreds
8, // position
0, // version
);
let coding_shred = Shred::new_empty_from_header(
shred.clone(),
DataShredHeader::default(),

View File

@ -75,7 +75,12 @@ use {
pubkey::Pubkey,
signature::{Keypair, Signature, Signer},
},
std::{convert::TryInto, mem::size_of, ops::Deref, sync::Arc},
std::{
convert::{TryFrom, TryInto},
mem::size_of,
ops::Deref,
sync::Arc,
},
thiserror::Error,
};
@ -203,8 +208,7 @@ pub struct DataShredHeader {
pub struct CodingShredHeader {
pub num_data_shreds: u16,
pub num_coding_shreds: u16,
#[serde(rename = "position")]
__unused: u16,
pub position: u16,
}
#[derive(Clone, Debug, PartialEq)]
@ -362,8 +366,9 @@ impl Shred {
slot: Slot,
index: u32,
fec_set_index: u32,
num_data: usize,
num_code: usize,
num_data: u16,
num_code: u16,
position: u16,
version: u16,
) -> Self {
let (header, coding_header) = Shredder::new_coding_shred_header(
@ -372,6 +377,7 @@ impl Shred {
fec_set_index,
num_data,
num_code,
position,
version,
);
Shred::new_empty_from_header(header, DataShredHeader::default(), coding_header)
@ -757,8 +763,9 @@ impl Shredder {
slot: Slot,
index: u32,
fec_set_index: u32,
num_data: usize,
num_code: usize,
num_data_shreds: u16,
num_coding_shreds: u16,
position: u16,
version: u16,
) -> (ShredCommonHeader, CodingShredHeader) {
let header = ShredCommonHeader {
@ -772,9 +779,9 @@ impl Shredder {
(
header,
CodingShredHeader {
num_data_shreds: num_data as u16,
num_coding_shreds: num_code as u16,
..CodingShredHeader::default()
num_data_shreds,
num_coding_shreds,
position,
},
)
}
@ -810,6 +817,8 @@ impl Shredder {
.unwrap()
.encode(&data, &mut parity[..])
.unwrap();
let num_data = u16::try_from(num_data).unwrap();
let num_coding = u16::try_from(num_coding).unwrap();
parity
.iter()
.enumerate()
@ -820,6 +829,7 @@ impl Shredder {
fec_set_index,
num_data,
num_coding,
u16::try_from(i).unwrap(), // position
version,
);
shred.payload[SIZE_OF_CODING_SHRED_HEADERS..].copy_from_slice(parity);
@ -1947,7 +1957,15 @@ pub mod tests {
);
assert_eq!(stats.index_overrun, 4);
let shred = Shred::new_empty_coding(8, 2, 10, 30, 4, 200);
let shred = Shred::new_empty_coding(
8, // slot
2, // index
10, // fec_set_index
30, // num_data
4, // num_code
1, // position
200, // version
);
shred.copy_to_packet(&mut packet);
assert_eq!(
Some((8, 2, false)),
@ -1959,7 +1977,15 @@ pub mod tests {
assert_eq!(None, get_shred_slot_index_type(&packet, &mut stats));
assert_eq!(1, stats.index_out_of_bounds);
let (mut header, coding_header) = Shredder::new_coding_shred_header(8, 2, 10, 30, 4, 200);
let (mut header, coding_header) = Shredder::new_coding_shred_header(
8, // slot
2, // index
10, // fec_set_index
30, // num_data_shreds
4, // num_coding_shreds
3, // position
200, // version
);
header.shred_type = ShredType(u8::MAX);
let shred = Shred::new_empty_from_header(header, DataShredHeader::default(), coding_header);
shred.copy_to_packet(&mut packet);