Skip to content
Snippets Groups Projects
Unverified Commit 85901220 authored by Alin Dima's avatar Alin Dima Committed by GitHub
Browse files

remove parachains_assigner code (#6171)

Resolves https://github.com/paritytech/polkadot-sdk/issues/5970

Removes the code of the legacy parachains assigner, which was used prior
to coretime. Now that all networks are upgraded to use the coretime
assigner, we can remove it.
parent 935eeb52
Branches
No related merge requests found
Pipeline #503159 waiting for manual action with stages
in 37 minutes and 43 seconds
// Copyright (C) Parity Technologies (UK) Ltd.
// This file is part of Polkadot.
// Polkadot is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Polkadot is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
//! The bulk (parachain slot auction) blockspace assignment provider.
//! This provider is tightly coupled with the configuration and paras modules.
#[cfg(test)]
mod mock_helpers;
#[cfg(test)]
mod tests;
use frame_system::pallet_prelude::BlockNumberFor;
use polkadot_primitives::CoreIndex;
use crate::{
configuration, paras,
scheduler::common::{Assignment, AssignmentProvider},
};
pub use pallet::*;
#[frame_support::pallet]
pub mod pallet {
use super::*;
#[pallet::pallet]
#[pallet::without_storage_info]
pub struct Pallet<T>(_);
#[pallet::config]
pub trait Config: frame_system::Config + configuration::Config + paras::Config {}
}
impl<T: Config> AssignmentProvider<BlockNumberFor<T>> for Pallet<T> {
fn pop_assignment_for_core(core_idx: CoreIndex) -> Option<Assignment> {
paras::Parachains::<T>::get()
.get(core_idx.0 as usize)
.copied()
.map(Assignment::Bulk)
}
fn report_processed(_: Assignment) {}
/// Bulk assignment has no need to push the assignment back on a session change,
/// this is a no-op in the case of a bulk assignment slot.
fn push_back_assignment(_: Assignment) {}
#[cfg(any(feature = "runtime-benchmarks", test))]
fn get_mock_assignment(_: CoreIndex, para_id: polkadot_primitives::Id) -> Assignment {
Assignment::Bulk(para_id)
}
fn assignment_duplicated(_: &Assignment) {}
}
// Copyright (C) Parity Technologies (UK) Ltd.
// This file is part of Polkadot.
// Polkadot is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Polkadot is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
//! Helper functions for tests
use crate::{
mock::MockGenesisConfig,
paras::{ParaGenesisArgs, ParaKind},
};
use polkadot_primitives::{Balance, HeadData, ValidationCode};
use sp_runtime::Perbill;
fn default_genesis_config() -> MockGenesisConfig {
MockGenesisConfig {
configuration: crate::configuration::GenesisConfig {
config: crate::configuration::HostConfiguration { ..Default::default() },
},
..Default::default()
}
}
#[derive(Debug)]
pub struct GenesisConfigBuilder {
pub on_demand_cores: u32,
pub on_demand_base_fee: Balance,
pub on_demand_fee_variability: Perbill,
pub on_demand_max_queue_size: u32,
pub on_demand_target_queue_utilization: Perbill,
pub onboarded_on_demand_chains: Vec<polkadot_primitives::Id>,
}
impl Default for GenesisConfigBuilder {
fn default() -> Self {
Self {
on_demand_cores: 10,
on_demand_base_fee: 10_000,
on_demand_fee_variability: Perbill::from_percent(1),
on_demand_max_queue_size: 100,
on_demand_target_queue_utilization: Perbill::from_percent(25),
onboarded_on_demand_chains: vec![],
}
}
}
impl GenesisConfigBuilder {
pub(super) fn build(self) -> MockGenesisConfig {
let mut genesis = default_genesis_config();
let config = &mut genesis.configuration.config;
config.scheduler_params.num_cores = self.on_demand_cores;
config.scheduler_params.on_demand_base_fee = self.on_demand_base_fee;
config.scheduler_params.on_demand_fee_variability = self.on_demand_fee_variability;
config.scheduler_params.on_demand_queue_max_size = self.on_demand_max_queue_size;
config.scheduler_params.on_demand_target_queue_utilization =
self.on_demand_target_queue_utilization;
let paras = &mut genesis.paras.paras;
for para_id in self.onboarded_on_demand_chains {
paras.push((
para_id,
ParaGenesisArgs {
genesis_head: HeadData::from(vec![0u8]),
validation_code: ValidationCode::from(vec![0u8]),
para_kind: ParaKind::Parathread,
},
))
}
genesis
}
}
// Copyright (C) Parity Technologies (UK) Ltd.
// This file is part of Polkadot.
// Polkadot is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Polkadot is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
use super::*;
use crate::{
assigner_parachains::mock_helpers::GenesisConfigBuilder,
initializer::SessionChangeNotification,
mock::{
new_test_ext, ParachainsAssigner, Paras, ParasShared, RuntimeOrigin, Scheduler, System,
},
paras::{ParaGenesisArgs, ParaKind},
};
use frame_support::{assert_ok, pallet_prelude::*};
use polkadot_primitives::{BlockNumber, Id as ParaId, SessionIndex, ValidationCode};
fn schedule_blank_para(id: ParaId, parakind: ParaKind) {
let validation_code: ValidationCode = vec![1, 2, 3].into();
assert_ok!(Paras::schedule_para_initialize(
id,
ParaGenesisArgs {
genesis_head: Vec::new().into(),
validation_code: validation_code.clone(),
para_kind: parakind,
}
));
assert_ok!(Paras::add_trusted_validation_code(RuntimeOrigin::root(), validation_code));
}
fn run_to_block(
to: BlockNumber,
new_session: impl Fn(BlockNumber) -> Option<SessionChangeNotification<BlockNumber>>,
) {
while System::block_number() < to {
let b = System::block_number();
Scheduler::initializer_finalize();
Paras::initializer_finalize(b);
if let Some(notification) = new_session(b + 1) {
let mut notification_with_session_index = notification;
// We will make every session change trigger an action queue. Normally this may require
// 2 or more session changes.
if notification_with_session_index.session_index == SessionIndex::default() {
notification_with_session_index.session_index = ParasShared::scheduled_session();
}
Paras::initializer_on_new_session(&notification_with_session_index);
Scheduler::initializer_on_new_session(&notification_with_session_index);
}
System::on_finalize(b);
System::on_initialize(b + 1);
System::set_block_number(b + 1);
Paras::initializer_initialize(b + 1);
Scheduler::initializer_initialize(b + 1);
// In the real runtime this is expected to be called by the `InclusionInherent` pallet.
Scheduler::advance_claim_queue(&Default::default());
}
}
// This and the scheduler test schedule_schedules_including_just_freed together
// ensure that next_up_on_available and next_up_on_time_out will always be
// filled with scheduler claims for lease holding parachains. (Removes the need
// for two other scheduler tests)
#[test]
fn parachains_assigner_pop_assignment_is_always_some() {
let core_index = CoreIndex(0);
let para_id = ParaId::from(10);
let expected_assignment = Assignment::Bulk(para_id);
new_test_ext(GenesisConfigBuilder::default().build()).execute_with(|| {
// Register the para_id as a lease holding parachain
schedule_blank_para(para_id, ParaKind::Parachain);
assert!(!Paras::is_parachain(para_id));
run_to_block(10, |n| if n == 10 { Some(Default::default()) } else { None });
assert!(Paras::is_parachain(para_id));
for _ in 0..20 {
assert!(
ParachainsAssigner::pop_assignment_for_core(core_index) ==
Some(expected_assignment.clone())
);
}
run_to_block(20, |n| if n == 20 { Some(Default::default()) } else { None });
for _ in 0..20 {
assert!(
ParachainsAssigner::pop_assignment_for_core(core_index) ==
Some(expected_assignment.clone())
);
}
});
}
......@@ -24,7 +24,6 @@
#![cfg_attr(not(feature = "std"), no_std)]
pub mod assigner_coretime;
pub mod assigner_parachains;
pub mod configuration;
pub mod coretime;
pub mod disputes;
......
......@@ -17,7 +17,7 @@
//! Mocks for all the traits.
use crate::{
assigner_coretime, assigner_parachains, configuration, coretime, disputes, dmp, hrmp,
assigner_coretime, configuration, coretime, disputes, dmp, hrmp,
inclusion::{self, AggregateMessageOrigin, UmpQueueId},
initializer, on_demand, origin, paras,
paras::ParaKind,
......@@ -76,7 +76,6 @@ frame_support::construct_runtime!(
ParaInherent: paras_inherent,
Scheduler: scheduler,
MockAssigner: mock_assigner,
ParachainsAssigner: assigner_parachains,
OnDemand: on_demand,
CoretimeAssigner: assigner_coretime,
Coretime: coretime,
......@@ -399,8 +398,6 @@ impl pallet_message_queue::Config for Test {
type IdleMaxServiceWeight = ();
}
impl assigner_parachains::Config for Test {}
parameter_types! {
pub const OnDemandTrafficDefaultValue: FixedU128 = FixedU128::from_u32(1);
// Production chains should keep this numbar around twice the
......
title: 'remove parachains_assigner'
doc:
- audience: Runtime Dev
description: "Remove the code of the parachains_assigner pallet, since coretime was released on all production networks."
crates:
- name: polkadot-runtime-parachains
bump: major
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment