pallet_elections_phragmen/migrations/
v4.rs1use super::super::LOG_TARGET;
21use frame_support::{
22 traits::{Get, StorageVersion},
23 weights::Weight,
24};
25
26pub const OLD_PREFIX: &[u8] = b"PhragmenElection";
28
29pub fn migrate<T: crate::Config, N: AsRef<str>>(new_pallet_name: N) -> Weight {
37 if new_pallet_name.as_ref().as_bytes() == OLD_PREFIX {
38 log::info!(
39 target: LOG_TARGET,
40 "New pallet name is equal to the old prefix. No migration needs to be done.",
41 );
42 return Weight::zero()
43 }
44 let storage_version = StorageVersion::get::<crate::Pallet<T>>();
45 log::info!(
46 target: LOG_TARGET,
47 "Running migration to v4 for elections-phragmen with storage version {:?}",
48 storage_version,
49 );
50
51 if storage_version <= 3 {
52 log::info!("new prefix: {}", new_pallet_name.as_ref());
53 frame_support::storage::migration::move_pallet(
54 OLD_PREFIX,
55 new_pallet_name.as_ref().as_bytes(),
56 );
57
58 StorageVersion::new(4).put::<crate::Pallet<T>>();
59
60 <T as frame_system::Config>::BlockWeights::get().max_block
61 } else {
62 log::warn!(
63 target: LOG_TARGET,
64 "Attempted to apply migration to v4 but failed because storage version is {:?}",
65 storage_version,
66 );
67 Weight::zero()
68 }
69}
70
71pub fn pre_migration<T: crate::Config, N: AsRef<str>>(new: N) {
76 let new = new.as_ref();
77 log::info!("pre-migration elections-phragmen test with new = {}", new);
78
79 let next_key = sp_io::storage::next_key(OLD_PREFIX).unwrap();
81 assert!(next_key.starts_with(&sp_io::hashing::twox_128(OLD_PREFIX)));
82
83 assert!(
85 sp_io::storage::next_key(new.as_bytes()).map_or(
86 true,
88 |next_key| !next_key.starts_with(&sp_io::hashing::twox_128(new.as_bytes()))
90 ),
91 "unexpected next_key({}) = {:?}",
92 new,
93 sp_core::hexdisplay::HexDisplay::from(&sp_io::storage::next_key(new.as_bytes()).unwrap())
94 );
95 assert_eq!(StorageVersion::get::<crate::Pallet<T>>(), 3);
97}
98
99pub fn post_migration<T: crate::Config>() {
104 log::info!("post-migration elections-phragmen");
105 assert_eq!(StorageVersion::get::<crate::Pallet<T>>(), 4);
107}