Struct frame_support::migrations::VersionedMigration
source · pub struct VersionedMigration<const FROM: u16, const TO: u16, Inner, Pallet, Weight> { /* private fields */ }
Expand description
Handles storage migration pallet versioning.
VersionedMigration
allows developers to write migrations without worrying about checking and
setting storage versions. Instead, the developer wraps their migration in this struct which
takes care of version handling using best practices.
It takes 5 type parameters:
From
: The version being upgraded from.To
: The version being upgraded to.Inner
: An implementation ofOnRuntimeUpgrade
.Pallet
: The Pallet being upgraded.Weight
: The runtime’s RuntimeDbWeight implementation.
When a VersionedMigration
on_runtime_upgrade
, pre_upgrade
, or post_upgrade
method is
called, the on-chain version of the pallet is compared to From
. If they match, the Inner
equivalent is called and the pallets on-chain version is set to To
after the migration.
Otherwise, a warning is logged notifying the developer that the upgrade was a noop and should
probably be removed.
§Examples
// In file defining migrations
pub struct VersionUncheckedMigrateV5ToV6<T>(sp_std::marker::PhantomData<T>);
impl<T: Config> OnRuntimeUpgrade for VersionUncheckedMigrateV5ToV6<T> {
// OnRuntimeUpgrade implementation...
}
pub type MigrateV5ToV6<T, I> =
VersionedMigration<
5,
6,
VersionUncheckedMigrateV5ToV6<T, I>,
crate::pallet::Pallet<T, I>,
<T as frame_system::Config>::DbWeight
>;
// Migrations tuple to pass to the Executive pallet:
pub type Migrations = (
// other migrations...
MigrateV5ToV6<T, ()>,
// other migrations...
);
Trait Implementations§
source§impl<const FROM: u16, const TO: u16, Inner: OnRuntimeUpgrade, Pallet: GetStorageVersion<CurrentStorageVersion = StorageVersion> + PalletInfoAccess, DbWeight: Get<RuntimeDbWeight>> OnRuntimeUpgrade for VersionedMigration<FROM, TO, Inner, Pallet, DbWeight>
impl<const FROM: u16, const TO: u16, Inner: OnRuntimeUpgrade, Pallet: GetStorageVersion<CurrentStorageVersion = StorageVersion> + PalletInfoAccess, DbWeight: Get<RuntimeDbWeight>> OnRuntimeUpgrade for VersionedMigration<FROM, TO, Inner, Pallet, DbWeight>
Implementation of the OnRuntimeUpgrade
trait for VersionedMigration
.
Its main function is to perform the runtime upgrade in on_runtime_upgrade
only if the on-chain
version of the pallets storage matches From
, and after the upgrade set the on-chain storage to
To
. If the versions do not match, it writes a log notifying the developer that the migration
is a noop.
source§fn on_runtime_upgrade() -> Weight
fn on_runtime_upgrade() -> Weight
Executes the versioned runtime upgrade.
First checks if the pallets on-chain storage version matches the version of this upgrade. If
it matches, it calls Inner::on_runtime_upgrade
, updates the on-chain version, and returns
the weight. If it does not match, it writes a log notifying the developer that the migration
is a noop.
Auto Trait Implementations§
impl<const FROM: u16, const TO: u16, Inner, Pallet, Weight> RefUnwindSafe for VersionedMigration<FROM, TO, Inner, Pallet, Weight>
impl<const FROM: u16, const TO: u16, Inner, Pallet, Weight> Send for VersionedMigration<FROM, TO, Inner, Pallet, Weight>
impl<const FROM: u16, const TO: u16, Inner, Pallet, Weight> Sync for VersionedMigration<FROM, TO, Inner, Pallet, Weight>
impl<const FROM: u16, const TO: u16, Inner, Pallet, Weight> Unpin for VersionedMigration<FROM, TO, Inner, Pallet, Weight>
impl<const FROM: u16, const TO: u16, Inner, Pallet, Weight> UnwindSafe for VersionedMigration<FROM, TO, Inner, Pallet, Weight>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T
. Read moresource§impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
type Error = <U as TryFromKey<T>>::Error
fn try_into_key(self) -> Result<U, <U as TryFromKey<T>>::Error>
source§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from
.source§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.