use frame_support::traits::{Get, OnRuntimeUpgrade};
use pallet_order_book::weights::Weight;
use sp_io::{storage::clear_prefix, KillStorageResult};
use sp_std::vec::Vec;
pub struct Migration<T>(sp_std::marker::PhantomData<T>);
const REMOVAL_LIMIT: u32 = 10u32;
const LOG_PREFIX: &str = "ForeignInvestmentsV2";
impl<T> OnRuntimeUpgrade for Migration<T>
where
T: frame_system::Config,
{
fn on_runtime_upgrade() -> Weight {
let mut weight = Weight::zero();
match clear_prefix(&get_storage_prefix(), Some(REMOVAL_LIMIT)) {
KillStorageResult::AllRemoved(n) => {
log::info!("{LOG_PREFIX}: Removed {n} ForeignInvestmentInfo V1 keys");
weight.saturating_accrue(T::DbWeight::get().writes(n.into()));
}
KillStorageResult::SomeRemaining(n) => {
log::warn!("{LOG_PREFIX}: There are {n} remaining ForeignInvestmentInfo V1 keys!");
weight.saturating_accrue(T::DbWeight::get().writes(REMOVAL_LIMIT.into()));
}
}
log::info!("{LOG_PREFIX}: Migration done!");
weight
}
#[cfg(feature = "try-runtime")]
fn pre_upgrade() -> Result<Vec<u8>, sp_runtime::TryRuntimeError> {
log::info!("{LOG_PREFIX}: Pre checks done!");
Ok(Vec::new())
}
#[cfg(feature = "try-runtime")]
fn post_upgrade(_: Vec<u8>) -> Result<(), sp_runtime::TryRuntimeError> {
assert!(
!sp_io::storage::exists(&get_storage_prefix()),
"{LOG_PREFIX}: ForeignInvestmentV0 keys remaining!"
);
log::info!("{LOG_PREFIX}: Post checks done!");
Ok(())
}
}
fn get_storage_prefix() -> Vec<u8> {
hex_literal::hex!("464aed913919bab92f79f3c7b79d28f7efbac15e93f37811895e260605cdc487").to_vec()
}