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));
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 // Coding at (1, 5) passes
assert!(!should_skip_retransmit(&shred, &shreds_received)); assert!(!should_skip_retransmit(&shred, &shreds_received));
// then blocked // then blocked
assert!(should_skip_retransmit(&shred, &shreds_received)); 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 // 2nd unique coding at (1, 5) passes
assert!(!should_skip_retransmit(&shred, &shreds_received)); assert!(!should_skip_retransmit(&shred, &shreds_received));
// same again is blocked // same again is blocked
assert!(should_skip_retransmit(&shred, &shreds_received)); 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 // Another unique coding at (1, 5) always blocked
assert!(should_skip_retransmit(&shred, &shreds_received)); assert!(should_skip_retransmit(&shred, &shreds_received));
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 // 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 = let mut coding_shred =
Shred::new_empty_from_header(common, DataShredHeader::default(), coding); Shred::new_empty_from_header(common, DataShredHeader::default(), coding);
Shredder::sign_shred(&leader_keypair, &mut coding_shred); Shredder::sign_shred(&leader_keypair, &mut coding_shred);
@ -918,7 +926,15 @@ mod test {
std::net::{IpAddr, Ipv4Addr}, std::net::{IpAddr, Ipv4Addr},
}; };
solana_logger::setup(); 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 shred = Shred::new_empty_from_header(common, DataShredHeader::default(), coding);
let mut shreds = vec![shred.clone(), shred.clone(), shred]; let mut shreds = vec![shred.clone(), shred.clone(), shred];
let _from_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080); 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 blockstore = Blockstore::open(&blockstore_path).unwrap();
let slot = 1; 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 = let coding_shred =
Shred::new_empty_from_header(shred, DataShredHeader::default(), coding); Shred::new_empty_from_header(shred, DataShredHeader::default(), coding);
@ -5767,7 +5774,14 @@ pub mod tests {
let last_root = RwLock::new(0); let last_root = RwLock::new(0);
let slot = 1; 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( let coding_shred = Shred::new_empty_from_header(
shred.clone(), shred.clone(),
DataShredHeader::default(), DataShredHeader::default(),

View File

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