diff --git a/toolkit/pallets/block-production-log/src/lib.rs b/toolkit/pallets/block-production-log/src/lib.rs index 892335523..a62316a18 100644 --- a/toolkit/pallets/block-production-log/src/lib.rs +++ b/toolkit/pallets/block-production-log/src/lib.rs @@ -118,9 +118,7 @@ pub mod pallet { } pub fn drop_prefix<'a>(slot: Slot) { - let entries_left: Vec<_> = - Log::::get().into_iter().filter(move |(s, _)| s > &slot).collect(); - Log::::put(entries_left); + Log::::mutate(|vec| vec.retain(move |(s, _)| s > &slot)) } } } diff --git a/toolkit/pallets/block-production-log/src/test.rs b/toolkit/pallets/block-production-log/src/test.rs index de544e84b..400a6b2af 100644 --- a/toolkit/pallets/block-production-log/src/test.rs +++ b/toolkit/pallets/block-production-log/src/test.rs @@ -135,3 +135,49 @@ fn take_prefix_when_there_are_two_entries_for_the_same_slot() { ); }) } + +#[test] +fn drop_prefix() { + new_test_ext().execute_with(|| { + Log::::put(vec![ + (Slot::from(100), make_id(0)), + (Slot::from(101), make_id(1)), + (Slot::from(102), make_id(2)), + (Slot::from(103), make_id(3)), + (Slot::from(104), make_id(4)), + ]); + + BlockProductionLog::drop_prefix(Slot::from(102)); + + let left_in_storage = Log::::get().to_vec(); + + assert_eq!( + left_in_storage.to_vec(), + vec![(Slot::from(103), make_id(3)), (Slot::from(104), make_id(4)),] + ); + }) +} + +#[test] +fn peek_prefix() { + new_test_ext().execute_with(|| { + Log::::put(vec![ + (Slot::from(100), make_id(0)), + (Slot::from(101), make_id(1)), + (Slot::from(102), make_id(2)), + (Slot::from(103), make_id(3)), + (Slot::from(104), make_id(4)), + ]); + + let prefix = BlockProductionLog::peek_prefix(Slot::from(102)); + + assert_eq!( + prefix.collect::>(), + vec![ + (Slot::from(100), make_id(0)), + (Slot::from(101), make_id(1)), + (Slot::from(102), make_id(2)), + ] + ); + }) +}