Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
add migratin
  • Loading branch information
kianenigma committed Oct 6, 2022
commit 38fc84d6d327691a3a8bb35ce6692ccc2a9e5002
8 changes: 7 additions & 1 deletion frame/election-provider-multi-phase/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,7 @@ const LOG_TARGET: &str = "runtime::election-provider";
pub mod signed;
pub mod unsigned;
pub mod weights;
pub mod migrations;
use unsigned::VoterOf;
pub use weights::WeightInfo;

Expand Down Expand Up @@ -1296,9 +1297,14 @@ pub mod pallet {
#[pallet::getter(fn minimum_untrusted_score)]
pub type MinimumUntrustedScore<T: Config> = StorageValue<_, ElectionScore>;

/// The current storage version.
///
/// v1: https://github.com/paritytech/substrate/pull/12237/
const STORAGE_VERSION: StorageVersion = StorageVersion::new(1);

#[pallet::pallet]
#[pallet::generate_store(pub(super) trait Store)]
#[pallet::without_storage_info]
#[pallet::storage_version(STORAGE_VERSION)]
pub struct Pallet<T>(PhantomData<T>);
}

Expand Down
68 changes: 68 additions & 0 deletions frame/election-provider-multi-phase/src/migrations.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// This file is part of Substrate.

// Copyright (C) 2022 Parity Technologies (UK) Ltd.
// SPDX-License-Identifier: Apache-2.0

// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

pub mod v1 {
use frame_support::{
storage::unhashed,
traits::{GetStorageVersion, OnRuntimeUpgrade, Defensive},
BoundedVec,
};
use sp_std::collections::btree_map::BTreeMap;

use crate::*;
pub struct MigrateToV1<T>(sp_std::marker::PhantomData<T>);
impl<T: Config> OnRuntimeUpgrade for MigrateToV1<T> {
fn on_runtime_upgrade() -> Weight {
let current = Pallet::<T>::current_storage_version();
let onchain = Pallet::<T>::on_chain_storage_version();

log!(
info,
"Running migration with current storage version {:?} / onchain {:?}",
current,
onchain
);

if current == 1 && onchain == 0 {
Comment thread
kianenigma marked this conversation as resolved.
if SignedSubmissionIndices::<T>::exists() {
// This needs to be tested at a both a block height where this value exists, and
// when it doesn't.
let now = frame_system::Pallet::<T>::block_number();
let map = unhashed::get::<BTreeMap<ElectionScore, u32>>(
Comment thread
ggwpez marked this conversation as resolved.
&SignedSubmissionIndices::<T>::hashed_key(),
).defensive_unwrap_or_default();
let vector = map
.into_iter()
.map(|(score, index)| (score, now, index))
.collect::<Vec<_>>();
// defensive-only
Comment thread
kianenigma marked this conversation as resolved.
Outdated
let bounded = BoundedVec::<_, _>::truncate_from(vector);
SignedSubmissionIndices::<T>::put(bounded);
log!(info, "SignedSubmissionIndices existed and got migrated");
Comment thread
kianenigma marked this conversation as resolved.
} else {
log!(info, "SignedSubmissionIndices did NOT exist.");
}

current.put::<Pallet<T>>();
T::DbWeight::get().reads_writes(2, 1)
} else {
log!(info, "Migration did not executed. This probably should be removed");
T::DbWeight::get().reads(1)
}
}
}
}
2 changes: 2 additions & 0 deletions frame/election-provider-multi-phase/src/signed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ pub type SignedSubmissionOf<T> = SignedSubmission<
<<T as crate::Config>::MinerConfig as MinerConfig>::Solution,
>;

/// Always sorted vector of a score, submitted at the given block number, which can be found at the
/// given index (`u32`) of the `SignedSubmissionsMap`.
pub type SubmissionIndicesOf<T> = BoundedVec<
Comment thread
kianenigma marked this conversation as resolved.
(ElectionScore, <T as frame_system::Config>::BlockNumber, u32),
<T as Config>::SignedMaxSubmissions,
Expand Down