mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 07:37:57 +00:00
migrations: prevent accidentally using unversioned migrations instead of VersionedMigration (#3835)
closes #1324 #### Problem Currently, it is possible to accidentally use inner unversioned migration instead of `VersionedMigration` since both implement `OnRuntimeUpgrade`. #### Solution With this change, we make it clear that value of `Inner` is not intended to be used directly. It is achieved by bounding `Inner` to new trait `UncheckedOnRuntimeUpgrade`, which has the same interface (except `unchecked_` prefix) as `OnRuntimeUpgrade`. #### `try-runtime` functions Since developers can implement `try-runtime` for `Inner` value in `VersionedMigration` and have custom logic for it, I added the same `try-runtime` functions to `UncheckedOnRuntimeUpgrade`. I looked for a ways to not duplicate functions, but couldn't find anything that doesn't significantly change the codebase. So I would appreciate If you have any suggestions to improve this cc @liamaharon @xlc polkadot address: 16FqwPZ8GRC5U5D4Fu7W33nA55ZXzXGWHwmbnE1eT6pxuqcT --------- Co-authored-by: Liam Aharon <liam.aharon@hotmail.com>
This commit is contained in:
@@ -23,7 +23,7 @@ use frame_support::{
|
||||
construct_runtime, derive_impl,
|
||||
migrations::VersionedMigration,
|
||||
parameter_types,
|
||||
traits::{GetStorageVersion, OnRuntimeUpgrade, StorageVersion},
|
||||
traits::{GetStorageVersion, OnRuntimeUpgrade, StorageVersion, UncheckedOnRuntimeUpgrade},
|
||||
weights::constants::RocksDbWeight,
|
||||
};
|
||||
use frame_system::Config;
|
||||
@@ -103,9 +103,11 @@ parameter_types! {
|
||||
static PostUpgradeCalledWith: Vec<u8> = Vec::new();
|
||||
}
|
||||
|
||||
/// Implement `OnRuntimeUpgrade` for `SomeUnversionedMigration`.
|
||||
/// Implement `UncheckedOnRuntimeUpgrade` for `SomeUnversionedMigration`.
|
||||
/// It sets SomeStorage to S, and returns a weight derived from UpgradeReads and UpgradeWrites.
|
||||
impl<T: dummy_pallet::Config, const S: u32> OnRuntimeUpgrade for SomeUnversionedMigration<T, S> {
|
||||
impl<T: dummy_pallet::Config, const S: u32> UncheckedOnRuntimeUpgrade
|
||||
for SomeUnversionedMigration<T, S>
|
||||
{
|
||||
fn pre_upgrade() -> Result<Vec<u8>, sp_runtime::TryRuntimeError> {
|
||||
PreUpgradeCalled::set(true);
|
||||
Ok(PreUpgradeReturnBytes::get().to_vec())
|
||||
|
||||
Reference in New Issue
Block a user