mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 11:07:56 +00:00
BREAKING - Try-runtime: Use proper error types (#13993)
* Try-state: DispatchResult as return type * try_state for the rest of the pallets * pre_upgrade * post_upgrade * try_runtime_upgrade * fixes * bags-list fix * fix * update test * warning fix * ... * final fixes 🤞 * warning.. * frame-support * warnings * Update frame/staking/src/migrations.rs Co-authored-by: Liam Aharon <liam.aharon@hotmail.com> * fix * fix warning * nit fix * merge fixes * small fix * should be good now * missed these ones * introduce TryRuntimeError and TryRuntimeResult * fixes * fix * removed TryRuntimeResult & made some fixes * fix testsg * tests passing * unnecessary imports * Update frame/assets/src/migration.rs Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> --------- Co-authored-by: Liam Aharon <liam.aharon@hotmail.com> Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
This commit is contained in:
@@ -2097,7 +2097,7 @@ macro_rules! decl_module {
|
||||
fn try_state(
|
||||
_: <$trait_instance as $system::Config>::BlockNumber,
|
||||
_: $crate::traits::TryStateSelect,
|
||||
) -> Result<(), &'static str> {
|
||||
) -> Result<(), $crate::sp_runtime::TryRuntimeError> {
|
||||
let pallet_name = <<
|
||||
$trait_instance
|
||||
as
|
||||
@@ -2144,12 +2144,12 @@ macro_rules! decl_module {
|
||||
}
|
||||
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn pre_upgrade() -> Result<$crate::sp_std::vec::Vec<u8>, &'static str> {
|
||||
fn pre_upgrade() -> Result<$crate::sp_std::vec::Vec<u8>, $crate::sp_runtime::TryRuntimeError> {
|
||||
Ok($crate::sp_std::vec::Vec::new())
|
||||
}
|
||||
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn post_upgrade(_: $crate::sp_std::vec::Vec<u8>) -> Result<(), &'static str> {
|
||||
fn post_upgrade(_: $crate::sp_std::vec::Vec<u8>) -> Result<(), $crate::sp_runtime::TryRuntimeError> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
@@ -2182,12 +2182,12 @@ macro_rules! decl_module {
|
||||
}
|
||||
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn pre_upgrade() -> Result<$crate::sp_std::vec::Vec<u8>, &'static str> {
|
||||
fn pre_upgrade() -> Result<$crate::sp_std::vec::Vec<u8>, $crate::sp_runtime::TryRuntimeError> {
|
||||
Ok($crate::sp_std::vec::Vec::new())
|
||||
}
|
||||
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn post_upgrade(_: $crate::sp_std::vec::Vec<u8>) -> Result<(), &'static str> {
|
||||
fn post_upgrade(_: $crate::sp_std::vec::Vec<u8>) -> Result<(), $crate::sp_runtime::TryRuntimeError> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -184,7 +184,7 @@ impl<P: Get<&'static str>, DbWeight: Get<RuntimeDbWeight>> frame_support::traits
|
||||
}
|
||||
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn pre_upgrade() -> Result<Vec<u8>, &'static str> {
|
||||
fn pre_upgrade() -> Result<Vec<u8>, sp_runtime::TryRuntimeError> {
|
||||
let hashed_prefix = twox_128(P::get().as_bytes());
|
||||
match contains_prefixed_key(&hashed_prefix) {
|
||||
true => log::info!("Found {} keys pre-removal 👀", P::get()),
|
||||
@@ -197,12 +197,12 @@ impl<P: Get<&'static str>, DbWeight: Get<RuntimeDbWeight>> frame_support::traits
|
||||
}
|
||||
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn post_upgrade(_state: Vec<u8>) -> Result<(), &'static str> {
|
||||
fn post_upgrade(_state: Vec<u8>) -> Result<(), sp_runtime::TryRuntimeError> {
|
||||
let hashed_prefix = twox_128(P::get().as_bytes());
|
||||
match contains_prefixed_key(&hashed_prefix) {
|
||||
true => {
|
||||
log::error!("{} has keys remaining post-removal ❗", P::get());
|
||||
return Err("Keys remaining post-removal, this should never happen 🚨")
|
||||
return Err("Keys remaining post-removal, this should never happen 🚨".into())
|
||||
},
|
||||
false => log::info!("No {} keys found post-removal 🎉", P::get()),
|
||||
};
|
||||
|
||||
@@ -22,6 +22,9 @@ use impl_trait_for_tuples::impl_for_tuples;
|
||||
use sp_runtime::traits::AtLeast32BitUnsigned;
|
||||
use sp_std::prelude::*;
|
||||
|
||||
#[cfg(feature = "try-runtime")]
|
||||
use sp_runtime::TryRuntimeError;
|
||||
|
||||
/// The block initialization trait.
|
||||
///
|
||||
/// Implementing this lets you express what should happen for your pallet when the block is
|
||||
@@ -136,7 +139,7 @@ pub trait OnRuntimeUpgrade {
|
||||
/// Same as `on_runtime_upgrade`, but perform the optional `pre_upgrade` and `post_upgrade` as
|
||||
/// well.
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn try_on_runtime_upgrade(checks: bool) -> Result<Weight, &'static str> {
|
||||
fn try_on_runtime_upgrade(checks: bool) -> Result<Weight, TryRuntimeError> {
|
||||
let maybe_state = if checks {
|
||||
let _guard = frame_support::StorageNoopGuard::default();
|
||||
let state = Self::pre_upgrade()?;
|
||||
@@ -167,7 +170,7 @@ pub trait OnRuntimeUpgrade {
|
||||
/// This hook must not write to any state, as it would make the main `on_runtime_upgrade` path
|
||||
/// inaccurate.
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn pre_upgrade() -> Result<Vec<u8>, &'static str> {
|
||||
fn pre_upgrade() -> Result<Vec<u8>, TryRuntimeError> {
|
||||
Ok(Vec::new())
|
||||
}
|
||||
|
||||
@@ -182,7 +185,7 @@ pub trait OnRuntimeUpgrade {
|
||||
/// This hook must not write to any state, as it would make the main `on_runtime_upgrade` path
|
||||
/// inaccurate.
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn post_upgrade(_state: Vec<u8>) -> Result<(), &'static str> {
|
||||
fn post_upgrade(_state: Vec<u8>) -> Result<(), TryRuntimeError> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
@@ -201,7 +204,7 @@ impl OnRuntimeUpgrade for Tuple {
|
||||
/// consecutive migrations for the same pallet without errors. Therefore pre and post upgrade
|
||||
/// hooks for tuples are a noop.
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn try_on_runtime_upgrade(checks: bool) -> Result<Weight, &'static str> {
|
||||
fn try_on_runtime_upgrade(checks: bool) -> Result<Weight, TryRuntimeError> {
|
||||
let mut weight = Weight::zero();
|
||||
|
||||
let mut errors = Vec::new();
|
||||
@@ -224,12 +227,12 @@ impl OnRuntimeUpgrade for Tuple {
|
||||
errors.iter().for_each(|err| {
|
||||
log::error!(
|
||||
target: "try-runtime",
|
||||
"{}",
|
||||
"{:?}",
|
||||
err
|
||||
);
|
||||
});
|
||||
|
||||
return Err("Detected multiple errors while executing `try_on_runtime_upgrade`, check the logs!")
|
||||
return Err("Detected multiple errors while executing `try_on_runtime_upgrade`, check the logs!".into())
|
||||
}
|
||||
|
||||
Ok(weight)
|
||||
@@ -305,7 +308,7 @@ pub trait Hooks<BlockNumber> {
|
||||
///
|
||||
/// This hook should not alter any storage.
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn try_state(_n: BlockNumber) -> Result<(), &'static str> {
|
||||
fn try_state(_n: BlockNumber) -> Result<(), TryRuntimeError> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -317,7 +320,7 @@ pub trait Hooks<BlockNumber> {
|
||||
///
|
||||
/// This hook is never meant to be executed on-chain but is meant to be used by testing tools.
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn pre_upgrade() -> Result<Vec<u8>, &'static str> {
|
||||
fn pre_upgrade() -> Result<Vec<u8>, TryRuntimeError> {
|
||||
Ok(Vec::new())
|
||||
}
|
||||
|
||||
@@ -329,7 +332,7 @@ pub trait Hooks<BlockNumber> {
|
||||
///
|
||||
/// This hook is never meant to be executed on-chain but is meant to be used by testing tools.
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn post_upgrade(_state: Vec<u8>) -> Result<(), &'static str> {
|
||||
fn post_upgrade(_state: Vec<u8>) -> Result<(), TryRuntimeError> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -411,13 +414,13 @@ mod tests {
|
||||
}
|
||||
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn pre_upgrade() -> Result<Vec<u8>, &'static str> {
|
||||
fn pre_upgrade() -> Result<Vec<u8>, TryRuntimeError> {
|
||||
Pre::mutate(|s| s.push(stringify!($name)));
|
||||
Ok(Vec::new())
|
||||
}
|
||||
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn post_upgrade(_: Vec<u8>) -> Result<(), &'static str> {
|
||||
fn post_upgrade(_: Vec<u8>) -> Result<(), TryRuntimeError> {
|
||||
Post::mutate(|s| s.push(stringify!($name)));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
use impl_trait_for_tuples::impl_for_tuples;
|
||||
use sp_arithmetic::traits::AtLeast32BitUnsigned;
|
||||
use sp_runtime::TryRuntimeError;
|
||||
use sp_std::prelude::*;
|
||||
|
||||
/// Which state tests to execute.
|
||||
@@ -129,7 +130,7 @@ impl core::str::FromStr for UpgradeCheckSelect {
|
||||
/// This hook should not alter any storage.
|
||||
pub trait TryState<BlockNumber> {
|
||||
/// Execute the state checks.
|
||||
fn try_state(_: BlockNumber, _: Select) -> Result<(), &'static str>;
|
||||
fn try_state(_: BlockNumber, _: Select) -> Result<(), TryRuntimeError>;
|
||||
}
|
||||
|
||||
#[cfg_attr(all(not(feature = "tuples-96"), not(feature = "tuples-128")), impl_for_tuples(64))]
|
||||
@@ -139,7 +140,7 @@ impl<BlockNumber: Clone + sp_std::fmt::Debug + AtLeast32BitUnsigned> TryState<Bl
|
||||
for Tuple
|
||||
{
|
||||
for_tuples!( where #( Tuple: crate::traits::PalletInfoAccess )* );
|
||||
fn try_state(n: BlockNumber, targets: Select) -> Result<(), &'static str> {
|
||||
fn try_state(n: BlockNumber, targets: Select) -> Result<(), TryRuntimeError> {
|
||||
match targets {
|
||||
Select::None => Ok(()),
|
||||
Select::All => {
|
||||
@@ -148,7 +149,7 @@ impl<BlockNumber: Clone + sp_std::fmt::Debug + AtLeast32BitUnsigned> TryState<Bl
|
||||
result
|
||||
},
|
||||
Select::RoundRobin(len) => {
|
||||
let functions: &[fn(BlockNumber, Select) -> Result<(), &'static str>] =
|
||||
let functions: &[fn(BlockNumber, Select) -> Result<(), TryRuntimeError>] =
|
||||
&[for_tuples!(#( Tuple::try_state ),*)];
|
||||
let skip = n.clone() % (functions.len() as u32).into();
|
||||
let skip: u32 =
|
||||
@@ -163,7 +164,7 @@ impl<BlockNumber: Clone + sp_std::fmt::Debug + AtLeast32BitUnsigned> TryState<Bl
|
||||
Select::Only(ref pallet_names) => {
|
||||
let try_state_fns: &[(
|
||||
&'static str,
|
||||
fn(BlockNumber, Select) -> Result<(), &'static str>,
|
||||
fn(BlockNumber, Select) -> Result<(), TryRuntimeError>,
|
||||
)] = &[for_tuples!(
|
||||
#( (<Tuple as crate::traits::PalletInfoAccess>::name(), Tuple::try_state) ),*
|
||||
)];
|
||||
|
||||
Reference in New Issue
Block a user