Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Ensure all StorageVersions on Rococo/Westend are correct and migration hooks pass #7251

Merged
merged 15 commits into from
May 23, 2023
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion runtime/parachains/src/configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -473,8 +473,20 @@ impl WeightInfo for TestWeightInfo {
pub mod pallet {
use super::*;

/// The current storage version.
///
/// v0-v1: <https://github.com/paritytech/polkadot/pull/3575>
/// v1-v2: <https://github.com/paritytech/polkadot/pull/4420>
/// v2-v3: <https://github.com/paritytech/polkadot/pull/6091>
/// v3-v4: <https://github.com/paritytech/polkadot/pull/6345>
/// v4-v5: <https://github.com/paritytech/polkadot/pull/6937>
/// + <https://github.com/paritytech/polkadot/pull/6961>
/// + <https://github.com/paritytech/polkadot/pull/6934>
/// v5-v6: <https://github.com/paritytech/polkadot/pull/6271> (remove UMP dispatch queue)
const STORAGE_VERSION: StorageVersion = StorageVersion::new(6);

#[pallet::pallet]
#[pallet::storage_version(migration::STORAGE_VERSION)]
#[pallet::storage_version(STORAGE_VERSION)]
#[pallet::without_storage_info]
pub struct Pallet<T>(_);

Expand Down
13 changes: 0 additions & 13 deletions runtime/parachains/src/configuration/migration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,7 @@

//! A module that is responsible for migration of storage.

use frame_support::traits::StorageVersion;
use primitives::ExecutorParams;

/// The current storage version.
///
/// v0-v1: <https://github.com/paritytech/polkadot/pull/3575>
/// v1-v2: <https://github.com/paritytech/polkadot/pull/4420>
/// v2-v3: <https://github.com/paritytech/polkadot/pull/6091>
/// v3-v4: <https://github.com/paritytech/polkadot/pull/6345>
/// v4-v5: <https://github.com/paritytech/polkadot/pull/6937>
/// + <https://github.com/paritytech/polkadot/pull/6961>
/// + <https://github.com/paritytech/polkadot/pull/6934>
/// v5-v6: <https://github.com/paritytech/polkadot/pull/6271> (remove UMP dispatch queue)
pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(6);

pub mod v5;
pub mod v6;
6 changes: 2 additions & 4 deletions runtime/parachains/src/configuration/migration/v5.rs
Original file line number Diff line number Diff line change
Expand Up @@ -262,8 +262,6 @@ impl<T: Config> OnRuntimeUpgrade for MigrateToV5<T> {
#[cfg(feature = "try-runtime")]
fn pre_upgrade() -> Result<Vec<u8>, sp_runtime::TryRuntimeError> {
log::trace!(target: crate::configuration::LOG_TARGET, "Running pre_upgrade()");

ensure!(StorageVersion::get::<Pallet<T>>() == 4, "The migration requires version 4");
Ok(Vec::new())
}

Expand All @@ -285,8 +283,8 @@ impl<T: Config> OnRuntimeUpgrade for MigrateToV5<T> {
fn post_upgrade(_state: Vec<u8>) -> Result<(), sp_runtime::TryRuntimeError> {
log::trace!(target: crate::configuration::LOG_TARGET, "Running post_upgrade()");
ensure!(
StorageVersion::get::<Pallet<T>>() == 5,
"Storage version should be 5 after the migration"
StorageVersion::get::<Pallet<T>>() >= 5,
"Storage version should be greater or equal to 5 after the migration"
);

Ok(())
Expand Down
6 changes: 2 additions & 4 deletions runtime/parachains/src/configuration/migration/v6.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,6 @@ impl<T: Config> OnRuntimeUpgrade for MigrateToV6<T> {
#[cfg(feature = "try-runtime")]
fn pre_upgrade() -> Result<Vec<u8>, sp_runtime::TryRuntimeError> {
log::trace!(target: crate::configuration::LOG_TARGET, "Running pre_upgrade()");

ensure!(StorageVersion::get::<Pallet<T>>() == 5, "The migration requires version 4");
Ok(Vec::new())
}

Expand All @@ -84,8 +82,8 @@ impl<T: Config> OnRuntimeUpgrade for MigrateToV6<T> {
fn post_upgrade(_state: Vec<u8>) -> Result<(), sp_runtime::TryRuntimeError> {
log::trace!(target: crate::configuration::LOG_TARGET, "Running post_upgrade()");
ensure!(
StorageVersion::get::<Pallet<T>>() == 6,
"Storage version should be 6 after the migration"
StorageVersion::get::<Pallet<T>>() >= 6,
"Storage version should be >= 6 after the migration"
);

Ok(())
Expand Down
85 changes: 85 additions & 0 deletions runtime/rococo/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1527,6 +1527,7 @@ pub type Migrations =
#[allow(deprecated, missing_docs)]
pub mod migrations {
use super::*;
use frame_support::traits::{GetStorageVersion, OnRuntimeUpgrade, StorageVersion};

pub type V0940 = ();
pub type V0941 = (); // Node only release - no migrations.
Expand All @@ -1535,8 +1536,92 @@ pub mod migrations {
pallet_offences::migration::v1::MigrateToV1<Runtime>,
);

/// Migrations that set `StorageVersion`s we missed to set.
///
/// It's *possible* that these pallets have not in fact been migrated to the versions being set,
/// which we should keep in mind in the future if we notice any strange behavior.
/// We opted to not check exactly what on-chain versions each pallet is at, since it would be
/// an involved effort, this is testnet, and no one has complained
/// (https://github.com/paritytech/polkadot/issues/6657#issuecomment-1552956439).
pub struct SetStorageVersions;

impl OnRuntimeUpgrade for SetStorageVersions {
fn on_runtime_upgrade() -> Weight {
let mut writes = 0;
let mut reads = 0;

// Council
if Council::on_chain_storage_version() < 4 {
// Safe to assume Council was created with V4 pallet.
StorageVersion::new(4).put::<Council>();
writes += 1;
}
reads += 1;

// Technical Committee
if TechnicalCommittee::on_chain_storage_version() < 4 {
StorageVersion::new(4).put::<TechnicalCommittee>();
writes += 1;
}
reads += 1;

// PhragmenElection
if PhragmenElection::on_chain_storage_version() < 4 {
StorageVersion::new(4).put::<PhragmenElection>();
writes += 1;
}
reads += 1;

// TechnicalMembership
if TechnicalMembership::on_chain_storage_version() < 4 {
// Did not miss V4 upgrade because version would have been set in storage, qed.
StorageVersion::new(4).put::<TechnicalMembership>();
writes += 1;
}
reads += 1;

// Scheduler
if Scheduler::on_chain_storage_version() < 4 {
StorageVersion::new(4).put::<Scheduler>();
writes += 1;
}
reads += 1;

// Bounties
if Bounties::on_chain_storage_version() < 4 {
StorageVersion::new(4).put::<Bounties>();
writes += 1;
}
reads += 1;

// Tips
if Tips::on_chain_storage_version() < 4 {
StorageVersion::new(4).put::<Tips>();
writes += 1;
}
reads += 1;

// NisCounterpartBalances
if NisCounterpartBalances::on_chain_storage_version() < 1 {
StorageVersion::new(1).put::<NisCounterpartBalances>();
writes += 1;
}
reads += 1;

// Crowdloan
if Crowdloan::on_chain_storage_version() < 2 {
StorageVersion::new(2).put::<Crowdloan>();
writes += 1;
}
reads += 1;

RocksDbWeight::get().reads_writes(reads, writes)
}
}

/// Unreleased migrations. Add new ones here:
pub type Unreleased = (
SetStorageVersions,
// Remove UMP dispatch queue <https://github.com/paritytech/polkadot/pull/6271>
parachains_configuration::migration::v6::MigrateToV6<Runtime>,
ump_migrations::UpdateUmpLimits,
Expand Down
17 changes: 17 additions & 0 deletions runtime/westend/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1281,6 +1281,8 @@ pub type Migrations =
/// The runtime migrations per release.
#[allow(deprecated, missing_docs)]
pub mod migrations {
use frame_support::traits::{GetStorageVersion, OnRuntimeUpgrade, StorageVersion};

use super::*;

pub type V0940 = (
Expand All @@ -1297,8 +1299,23 @@ pub mod migrations {
pallet_offences::migration::v1::MigrateToV1<Runtime>,
);

/// Migrations that set `StorageVersion`s we missed to set.
pub struct SetStorageVersions;

impl OnRuntimeUpgrade for SetStorageVersions {
fn on_runtime_upgrade() -> Weight {
if FastUnstake::on_chain_storage_version() < 1 {
StorageVersion::new(1).put::<FastUnstake>();
return RocksDbWeight::get().reads_writes(1, 1)
}

RocksDbWeight::get().reads(1)
}
}

/// Unreleased migrations. Add new ones here:
pub type Unreleased = (
SetStorageVersions,
// Remove UMP dispatch queue <https://github.com/paritytech/polkadot/pull/6271>
parachains_configuration::migration::v6::MigrateToV6<Runtime>,
ump_migrations::UpdateUmpLimits,
Expand Down