mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 13:27:57 +00:00
Improve try-state developer experience & fix bug (#2019)
Making some devex improvements as I audit our chains adherence to try-state invariants, in preparation for automated try-state checks and alerting. Note to reviewer: while you're here, if you have time would be great to get your eyes on https://github.com/paritytech/polkadot-sdk/pull/1297 also since it touches a similar file and I'd like to avoid merge conflicts :P ## Devex Improvements - Changes the log level of logs informing the user that try-state checks are being run for a pallet from debug to info - Improves how errors are communicated - Errors are logged when they are encountered, rather than after everything has been executed - Exact pallet the error originated from is included with the error log - Clearly see all errors and how many there are, rather than only one - Closes #136 ### Example of new logs <img width="1185" alt="Screenshot 2023-10-25 at 15 44 44" src="https://github.com/paritytech/polkadot-sdk/assets/16665596/b75588a2-1c64-45df-bbc8-bcb8bf8b0fe0"> ### Same but with old logs (run with RUST_LOG=debug) Notice only informed of one of the errors, and it's unclear which pallet it originated <img width="1185" alt="Screenshot 2023-10-25 at 15 39 01" src="https://github.com/paritytech/polkadot-sdk/assets/16665596/e3429cb1-489e-430a-9716-77c052e5dae6"> ## Bug fix When dry-running migrations and `checks.try_state()` is `true`, only run `try_state` checks after migrations have been executed. Otherwise, `try_state` checks that expect state to be in at a HIGHER storage version than is on-chain could incorrectly fail. --------- Co-authored-by: command-bot <>
This commit is contained in:
@@ -144,9 +144,27 @@ impl<BlockNumber: Clone + sp_std::fmt::Debug + AtLeast32BitUnsigned> TryState<Bl
|
||||
match targets {
|
||||
Select::None => Ok(()),
|
||||
Select::All => {
|
||||
let mut result = Ok(());
|
||||
for_tuples!( #( result = result.and(Tuple::try_state(n.clone(), targets.clone())); )* );
|
||||
result
|
||||
let mut error_count = 0;
|
||||
for_tuples!(#(
|
||||
if let Err(_) = Tuple::try_state(n.clone(), targets.clone()) {
|
||||
error_count += 1;
|
||||
}
|
||||
)*);
|
||||
|
||||
if error_count > 0 {
|
||||
log::error!(
|
||||
target: "try-runtime",
|
||||
"{} pallets exited with errors while executing try_state checks.",
|
||||
error_count
|
||||
);
|
||||
|
||||
return Err(
|
||||
"Detected errors while executing try_state checks. See logs for more info."
|
||||
.into(),
|
||||
)
|
||||
}
|
||||
|
||||
Ok(())
|
||||
},
|
||||
Select::RoundRobin(len) => {
|
||||
let functions: &[fn(BlockNumber, Select) -> Result<(), TryRuntimeError>] =
|
||||
|
||||
Reference in New Issue
Block a user