Fix deserialize reference tick (#10111)
Co-authored-by: Carl <carl@solana.com>
This commit is contained in:
@ -1357,7 +1357,6 @@ impl Blockstore {
|
||||
// the tick that will be used to figure out the timeout for this hole
|
||||
let reference_tick = u64::from(Shred::reference_tick_from_data(
|
||||
&db_iterator.value().expect("couldn't read value"),
|
||||
current_slot,
|
||||
));
|
||||
|
||||
if ticks_since_first_insert < reference_tick + MAX_TURBINE_DELAY_IN_TICKS {
|
||||
|
@ -451,9 +451,8 @@ impl Shred {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn reference_tick_from_data(data: &[u8], slot: Slot) -> u8 {
|
||||
let size_of_data_shred_header = Shredder::get_expected_data_header_size_from_slot(slot);
|
||||
let flags = data[SIZE_OF_COMMON_SHRED_HEADER + size_of_data_shred_header - size_of::<u8>()];
|
||||
pub fn reference_tick_from_data(data: &[u8]) -> u8 {
|
||||
let flags = data[SIZE_OF_COMMON_SHRED_HEADER + SIZE_OF_DATA_SHRED_HEADER - size_of::<u8>()];
|
||||
flags & SHRED_TICK_REFERENCE_MASK
|
||||
}
|
||||
|
||||
@ -1232,12 +1231,10 @@ pub mod tests {
|
||||
assert_eq!(deserialized_shred, *data_shreds.last().unwrap());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_shred_reference_tick() {
|
||||
fn run_test_shred_reference_tick(slot: Slot) {
|
||||
let keypair = Arc::new(Keypair::new());
|
||||
let slot = 1;
|
||||
|
||||
let parent_slot = 0;
|
||||
let parent_slot = slot - 1;
|
||||
let shredder = Shredder::new(slot, parent_slot, 0.0, keypair.clone(), 5, 0)
|
||||
.expect("Failed in creating shredder");
|
||||
|
||||
@ -1254,7 +1251,7 @@ pub mod tests {
|
||||
let data_shreds = shredder.entries_to_shreds(&entries, true, 0).0;
|
||||
data_shreds.iter().for_each(|s| {
|
||||
assert_eq!(s.reference_tick(), 5);
|
||||
assert_eq!(Shred::reference_tick_from_data(&s.payload, slot), 5);
|
||||
assert_eq!(Shred::reference_tick_from_data(&s.payload), 5);
|
||||
});
|
||||
|
||||
let deserialized_shred =
|
||||
@ -1262,6 +1259,12 @@ pub mod tests {
|
||||
assert_eq!(deserialized_shred.reference_tick(), 5);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_shred_reference_tick() {
|
||||
run_test_shred_reference_tick(UNLOCK_NONCE_SLOT);
|
||||
run_test_shred_reference_tick(UNLOCK_NONCE_SLOT + 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_shred_reference_tick_overflow() {
|
||||
let keypair = Arc::new(Keypair::new());
|
||||
@ -1285,7 +1288,7 @@ pub mod tests {
|
||||
data_shreds.iter().for_each(|s| {
|
||||
assert_eq!(s.reference_tick(), SHRED_TICK_REFERENCE_MASK);
|
||||
assert_eq!(
|
||||
Shred::reference_tick_from_data(&s.payload, slot),
|
||||
Shred::reference_tick_from_data(&s.payload),
|
||||
SHRED_TICK_REFERENCE_MASK
|
||||
);
|
||||
});
|
||||
|
Reference in New Issue
Block a user