mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 08:51:09 +00:00
Add retry mechanics to pallet-scheduler (#3060)
Fixes #3014 This PR adds retry mechanics to `pallet-scheduler`, as described in the issue above. Users can now set a retry configuration for a task so that, in case its scheduled run fails, it will be retried after a number of blocks, for a specified number of times or until it succeeds. If a retried task runs successfully before running out of retries, its remaining retry counter will be reset to the initial value. If a retried task runs out of retries, it will be removed from the schedule. Tasks which need to be scheduled for a retry are still subject to weight metering and agenda space, same as a regular task. Periodic tasks will have their periodic schedule put on hold while the task is retrying. --------- Signed-off-by: georgepisaltu <george.pisaltu@parity.io> Co-authored-by: command-bot <>
This commit is contained in:
+147
-67
@@ -1,42 +1,41 @@
|
||||
// Copyright (C) Parity Technologies (UK) Ltd.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
// This file is part of Cumulus.
|
||||
|
||||
// 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.
|
||||
// Cumulus 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.
|
||||
|
||||
// Cumulus 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
//! Autogenerated weights for `pallet_scheduler`
|
||||
//!
|
||||
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
|
||||
//! DATE: 2023-07-31, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! DATE: 2024-01-25, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! WORST CASE MAP SIZE: `1000000`
|
||||
//! HOSTNAME: `runner-ynta1nyy-project-238-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
|
||||
//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-polkadot-dev")`, DB CACHE: 1024
|
||||
//! HOSTNAME: `runner-grjcggob-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
|
||||
//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("collectives-westend-dev")`, DB CACHE: 1024
|
||||
|
||||
// Executed Command:
|
||||
// ./target/production/polkadot-parachain
|
||||
// target/production/polkadot-parachain
|
||||
// benchmark
|
||||
// pallet
|
||||
// --chain=collectives-polkadot-dev
|
||||
// --wasm-execution=compiled
|
||||
// --pallet=pallet_scheduler
|
||||
// --no-storage-info
|
||||
// --no-median-slopes
|
||||
// --no-min-squares
|
||||
// --extrinsic=*
|
||||
// --steps=50
|
||||
// --repeat=20
|
||||
// --json
|
||||
// --header=./file_header.txt
|
||||
// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/
|
||||
// --extrinsic=*
|
||||
// --wasm-execution=compiled
|
||||
// --heap-pages=4096
|
||||
// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json
|
||||
// --pallet=pallet_scheduler
|
||||
// --chain=collectives-westend-dev
|
||||
// --header=./cumulus/file_header.txt
|
||||
// --output=./cumulus/parachains/runtimes/collectives/collectives-westend/src/weights/
|
||||
|
||||
#![cfg_attr(rustfmt, rustfmt_skip)]
|
||||
#![allow(unused_parens)]
|
||||
@@ -55,8 +54,8 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `31`
|
||||
// Estimated: `1489`
|
||||
// Minimum execution time: 3_441_000 picoseconds.
|
||||
Weight::from_parts(3_604_000, 0)
|
||||
// Minimum execution time: 2_475_000 picoseconds.
|
||||
Weight::from_parts(2_644_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 1489))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
@@ -68,11 +67,11 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `77 + s * (177 ±0)`
|
||||
// Estimated: `159279`
|
||||
// Minimum execution time: 2_879_000 picoseconds.
|
||||
Weight::from_parts(2_963_000, 0)
|
||||
// Minimum execution time: 2_898_000 picoseconds.
|
||||
Weight::from_parts(1_532_342, 0)
|
||||
.saturating_add(Weight::from_parts(0, 159279))
|
||||
// Standard Error: 3_764
|
||||
.saturating_add(Weight::from_parts(909_557, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 4_736
|
||||
.saturating_add(Weight::from_parts(412_374, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
@@ -80,25 +79,27 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 5_172_000 picoseconds.
|
||||
Weight::from_parts(5_294_000, 0)
|
||||
// Minimum execution time: 3_171_000 picoseconds.
|
||||
Weight::from_parts(3_349_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
/// Storage: `Preimage::PreimageFor` (r:1 w:1)
|
||||
/// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`)
|
||||
/// Storage: `Preimage::StatusFor` (r:1 w:1)
|
||||
/// Storage: `Preimage::StatusFor` (r:1 w:0)
|
||||
/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
|
||||
/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[128, 4194304]`.
|
||||
fn service_task_fetched(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `213 + s * (1 ±0)`
|
||||
// Estimated: `3678 + s * (1 ±0)`
|
||||
// Minimum execution time: 19_704_000 picoseconds.
|
||||
Weight::from_parts(19_903_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 3678))
|
||||
// Standard Error: 5
|
||||
.saturating_add(Weight::from_parts(1_394, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
// Measured: `246 + s * (1 ±0)`
|
||||
// Estimated: `3711 + s * (1 ±0)`
|
||||
// Minimum execution time: 17_329_000 picoseconds.
|
||||
Weight::from_parts(17_604_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 3711))
|
||||
// Standard Error: 1
|
||||
.saturating_add(Weight::from_parts(1_256, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(3))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
.saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into()))
|
||||
}
|
||||
@@ -108,8 +109,8 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 6_359_000 picoseconds.
|
||||
Weight::from_parts(6_599_000, 0)
|
||||
// Minimum execution time: 4_503_000 picoseconds.
|
||||
Weight::from_parts(4_677_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
@@ -117,24 +118,24 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 5_217_000 picoseconds.
|
||||
Weight::from_parts(5_333_000, 0)
|
||||
// Minimum execution time: 3_145_000 picoseconds.
|
||||
Weight::from_parts(3_252_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
fn execute_dispatch_signed() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 2_406_000 picoseconds.
|
||||
Weight::from_parts(2_541_000, 0)
|
||||
// Minimum execution time: 1_804_000 picoseconds.
|
||||
Weight::from_parts(1_891_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
fn execute_dispatch_unsigned() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 2_370_000 picoseconds.
|
||||
Weight::from_parts(2_561_000, 0)
|
||||
// Minimum execution time: 1_706_000 picoseconds.
|
||||
Weight::from_parts(1_776_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
@@ -144,11 +145,11 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `77 + s * (177 ±0)`
|
||||
// Estimated: `159279`
|
||||
// Minimum execution time: 11_784_000 picoseconds.
|
||||
Weight::from_parts(5_574_404, 0)
|
||||
// Minimum execution time: 8_629_000 picoseconds.
|
||||
Weight::from_parts(6_707_232, 0)
|
||||
.saturating_add(Weight::from_parts(0, 159279))
|
||||
// Standard Error: 7_217
|
||||
.saturating_add(Weight::from_parts(1_035_248, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 5_580
|
||||
.saturating_add(Weight::from_parts(471_827, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
@@ -161,11 +162,11 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `77 + s * (177 ±0)`
|
||||
// Estimated: `159279`
|
||||
// Minimum execution time: 16_373_000 picoseconds.
|
||||
Weight::from_parts(3_088_135, 0)
|
||||
// Minimum execution time: 12_675_000 picoseconds.
|
||||
Weight::from_parts(7_791_682, 0)
|
||||
.saturating_add(Weight::from_parts(0, 159279))
|
||||
// Standard Error: 7_095
|
||||
.saturating_add(Weight::from_parts(1_745_270, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 5_381
|
||||
.saturating_add(Weight::from_parts(653_023, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
}
|
||||
@@ -178,11 +179,11 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `468 + s * (179 ±0)`
|
||||
// Estimated: `159279`
|
||||
// Minimum execution time: 14_822_000 picoseconds.
|
||||
Weight::from_parts(9_591_402, 0)
|
||||
// Minimum execution time: 11_908_000 picoseconds.
|
||||
Weight::from_parts(11_833_059, 0)
|
||||
.saturating_add(Weight::from_parts(0, 159279))
|
||||
// Standard Error: 7_151
|
||||
.saturating_add(Weight::from_parts(1_058_408, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 5_662
|
||||
.saturating_add(Weight::from_parts(482_816, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
}
|
||||
@@ -195,12 +196,91 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `509 + s * (179 ±0)`
|
||||
// Estimated: `159279`
|
||||
// Minimum execution time: 18_541_000 picoseconds.
|
||||
Weight::from_parts(6_522_239, 0)
|
||||
// Minimum execution time: 15_506_000 picoseconds.
|
||||
Weight::from_parts(11_372_975, 0)
|
||||
.saturating_add(Weight::from_parts(0, 159279))
|
||||
// Standard Error: 8_349
|
||||
.saturating_add(Weight::from_parts(1_760_431, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 5_765
|
||||
.saturating_add(Weight::from_parts(656_322, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
}
|
||||
/// Storage: `Scheduler::Retries` (r:1 w:2)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 200]`.
|
||||
fn schedule_retry(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `159`
|
||||
// Estimated: `159279`
|
||||
// Minimum execution time: 14_069_000 picoseconds.
|
||||
Weight::from_parts(14_868_345, 0)
|
||||
.saturating_add(Weight::from_parts(0, 159279))
|
||||
// Standard Error: 425
|
||||
.saturating_add(Weight::from_parts(33_468, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(4))
|
||||
}
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn set_retry() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `77 + s * (177 ±0)`
|
||||
// Estimated: `159279`
|
||||
// Minimum execution time: 7_550_000 picoseconds.
|
||||
Weight::from_parts(6_735_955, 0)
|
||||
.saturating_add(Weight::from_parts(0, 159279))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn set_retry_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `513 + s * (179 ±0)`
|
||||
// Estimated: `159279`
|
||||
// Minimum execution time: 11_017_000 picoseconds.
|
||||
Weight::from_parts(11_749_385, 0)
|
||||
.saturating_add(Weight::from_parts(0, 159279))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn cancel_retry() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `77 + s * (177 ±0)`
|
||||
// Estimated: `159279`
|
||||
// Minimum execution time: 7_550_000 picoseconds.
|
||||
Weight::from_parts(6_735_955, 0)
|
||||
.saturating_add(Weight::from_parts(0, 159279))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(155814), added: 158289, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn cancel_retry_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `513 + s * (179 ±0)`
|
||||
// Estimated: `159279`
|
||||
// Minimum execution time: 11_017_000 picoseconds.
|
||||
Weight::from_parts(11_749_385, 0)
|
||||
.saturating_add(Weight::from_parts(0, 159279))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,24 +17,25 @@
|
||||
//! Autogenerated weights for `pallet_scheduler`
|
||||
//!
|
||||
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
|
||||
//! DATE: 2023-05-26, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! DATE: 2024-01-25, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! WORST CASE MAP SIZE: `1000000`
|
||||
//! HOSTNAME: `bm5`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
||||
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 1024
|
||||
//! HOSTNAME: `runner-grjcggob-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
|
||||
//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("rococo-dev")`, DB CACHE: 1024
|
||||
|
||||
// Executed Command:
|
||||
// ./target/production/polkadot
|
||||
// target/production/polkadot
|
||||
// benchmark
|
||||
// pallet
|
||||
// --chain=rococo-dev
|
||||
// --steps=50
|
||||
// --repeat=20
|
||||
// --pallet=pallet_scheduler
|
||||
// --extrinsic=*
|
||||
// --execution=wasm
|
||||
// --wasm-execution=compiled
|
||||
// --header=./file_header.txt
|
||||
// --output=./runtime/rococo/src/weights/
|
||||
// --heap-pages=4096
|
||||
// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json
|
||||
// --pallet=pallet_scheduler
|
||||
// --chain=rococo-dev
|
||||
// --header=./polkadot/file_header.txt
|
||||
// --output=./polkadot/runtime/rococo/src/weights/
|
||||
|
||||
#![cfg_attr(rustfmt, rustfmt_skip)]
|
||||
#![allow(unused_parens)]
|
||||
@@ -47,30 +48,30 @@ use core::marker::PhantomData;
|
||||
/// Weight functions for `pallet_scheduler`.
|
||||
pub struct WeightInfo<T>(PhantomData<T>);
|
||||
impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
/// Storage: Scheduler IncompleteSince (r:1 w:1)
|
||||
/// Proof: Scheduler IncompleteSince (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::IncompleteSince` (r:1 w:1)
|
||||
/// Proof: `Scheduler::IncompleteSince` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
|
||||
fn service_agendas_base() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `69`
|
||||
// Measured: `68`
|
||||
// Estimated: `1489`
|
||||
// Minimum execution time: 4_741_000 picoseconds.
|
||||
Weight::from_parts(4_939_000, 0)
|
||||
// Minimum execution time: 2_869_000 picoseconds.
|
||||
Weight::from_parts(3_109_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 1489))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[0, 50]`.
|
||||
fn service_agenda_base(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `116 + s * (177 ±0)`
|
||||
// Measured: `115 + s * (177 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 4_504_000 picoseconds.
|
||||
Weight::from_parts(7_569_333, 0)
|
||||
// Minimum execution time: 3_326_000 picoseconds.
|
||||
Weight::from_parts(5_818_563, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
// Standard Error: 1_818
|
||||
.saturating_add(Weight::from_parts(771_180, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 1_261
|
||||
.saturating_add(Weight::from_parts(336_446, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
@@ -78,36 +79,38 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 5_709_000 picoseconds.
|
||||
Weight::from_parts(5_929_000, 0)
|
||||
// Minimum execution time: 3_007_000 picoseconds.
|
||||
Weight::from_parts(3_197_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
/// Storage: Preimage PreimageFor (r:1 w:1)
|
||||
/// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured)
|
||||
/// Storage: Preimage StatusFor (r:1 w:1)
|
||||
/// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen)
|
||||
/// Storage: `Preimage::PreimageFor` (r:1 w:1)
|
||||
/// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`)
|
||||
/// Storage: `Preimage::StatusFor` (r:1 w:0)
|
||||
/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
|
||||
/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[128, 4194304]`.
|
||||
fn service_task_fetched(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `251 + s * (1 ±0)`
|
||||
// Estimated: `3716 + s * (1 ±0)`
|
||||
// Minimum execution time: 20_710_000 picoseconds.
|
||||
Weight::from_parts(20_918_000, 0)
|
||||
// Minimum execution time: 16_590_000 picoseconds.
|
||||
Weight::from_parts(16_869_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 3716))
|
||||
// Standard Error: 9
|
||||
.saturating_add(Weight::from_parts(1_257, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(Weight::from_parts(1_308, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(3))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
.saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into()))
|
||||
}
|
||||
/// Storage: Scheduler Lookup (r:0 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
fn service_task_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 7_262_000 picoseconds.
|
||||
Weight::from_parts(7_412_000, 0)
|
||||
// Minimum execution time: 4_320_000 picoseconds.
|
||||
Weight::from_parts(4_594_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
@@ -115,90 +118,173 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 5_774_000 picoseconds.
|
||||
Weight::from_parts(5_887_000, 0)
|
||||
// Minimum execution time: 2_956_000 picoseconds.
|
||||
Weight::from_parts(3_216_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
fn execute_dispatch_signed() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 2_777_000 picoseconds.
|
||||
Weight::from_parts(2_865_000, 0)
|
||||
// Minimum execution time: 1_824_000 picoseconds.
|
||||
Weight::from_parts(1_929_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
fn execute_dispatch_unsigned() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 2_739_000 picoseconds.
|
||||
Weight::from_parts(2_827_000, 0)
|
||||
// Minimum execution time: 1_749_000 picoseconds.
|
||||
Weight::from_parts(1_916_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[0, 49]`.
|
||||
fn schedule(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `116 + s * (177 ±0)`
|
||||
// Measured: `115 + s * (177 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 14_788_000 picoseconds.
|
||||
Weight::from_parts(17_705_748, 0)
|
||||
// Minimum execution time: 9_086_000 picoseconds.
|
||||
Weight::from_parts(11_733_696, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
// Standard Error: 1_703
|
||||
.saturating_add(Weight::from_parts(760_991, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 1_362
|
||||
.saturating_add(Weight::from_parts(375_266, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen)
|
||||
/// Storage: Scheduler Lookup (r:0 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 50]`.
|
||||
fn cancel(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `116 + s * (177 ±0)`
|
||||
// Measured: `115 + s * (177 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 18_716_000 picoseconds.
|
||||
Weight::from_parts(18_220_022, 0)
|
||||
// Minimum execution time: 12_716_000 picoseconds.
|
||||
Weight::from_parts(12_529_180, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
// Standard Error: 1_508
|
||||
.saturating_add(Weight::from_parts(1_357_835, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 867
|
||||
.saturating_add(Weight::from_parts(548_188, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
}
|
||||
/// Storage: Scheduler Lookup (r:1 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[0, 49]`.
|
||||
fn schedule_named(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `293 + s * (185 ±0)`
|
||||
// Measured: `292 + s * (185 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 17_719_000 picoseconds.
|
||||
Weight::from_parts(21_657_806, 0)
|
||||
// Minimum execution time: 12_053_000 picoseconds.
|
||||
Weight::from_parts(15_358_056, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
// Standard Error: 2_645
|
||||
.saturating_add(Weight::from_parts(794_184, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 3_176
|
||||
.saturating_add(Weight::from_parts(421_589, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
}
|
||||
/// Storage: Scheduler Lookup (r:1 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 50]`.
|
||||
fn cancel_named(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `319 + s * (185 ±0)`
|
||||
// Measured: `318 + s * (185 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 20_225_000 picoseconds.
|
||||
Weight::from_parts(20_494_405, 0)
|
||||
// Minimum execution time: 14_803_000 picoseconds.
|
||||
Weight::from_parts(15_805_714, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
// Standard Error: 1_890
|
||||
.saturating_add(Weight::from_parts(1_379_025, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 2_597
|
||||
.saturating_add(Weight::from_parts(611_053, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
}
|
||||
/// Storage: `Scheduler::Retries` (r:1 w:2)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 50]`.
|
||||
fn schedule_retry(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `196`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 13_156_000 picoseconds.
|
||||
Weight::from_parts(13_801_287, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
// Standard Error: 568
|
||||
.saturating_add(Weight::from_parts(35_441, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(4))
|
||||
}
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 50]`.
|
||||
fn set_retry() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `115 + s * (177 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 7_912_000 picoseconds.
|
||||
Weight::from_parts(8_081_460, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 50]`.
|
||||
fn set_retry_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `324 + s * (185 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 10_673_000 picoseconds.
|
||||
Weight::from_parts(12_212_185, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 50]`.
|
||||
fn cancel_retry() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `115 + s * (177 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 7_912_000 picoseconds.
|
||||
Weight::from_parts(8_081_460, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 50]`.
|
||||
fn cancel_retry_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `324 + s * (185 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 10_673_000 picoseconds.
|
||||
Weight::from_parts(12_212_185, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,27 +17,25 @@
|
||||
//! Autogenerated weights for `pallet_scheduler`
|
||||
//!
|
||||
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
|
||||
//! DATE: 2023-06-14, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! DATE: 2024-01-25, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! WORST CASE MAP SIZE: `1000000`
|
||||
//! HOSTNAME: `runner--ss9ysm1-project-163-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
|
||||
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 1024
|
||||
//! HOSTNAME: `runner-grjcggob-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
|
||||
//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("westend-dev")`, DB CACHE: 1024
|
||||
|
||||
// Executed Command:
|
||||
// ./target/production/polkadot
|
||||
// target/production/polkadot
|
||||
// benchmark
|
||||
// pallet
|
||||
// --chain=westend-dev
|
||||
// --steps=50
|
||||
// --repeat=20
|
||||
// --no-storage-info
|
||||
// --no-median-slopes
|
||||
// --no-min-squares
|
||||
// --pallet=pallet_scheduler
|
||||
// --extrinsic=*
|
||||
// --execution=wasm
|
||||
// --wasm-execution=compiled
|
||||
// --header=./file_header.txt
|
||||
// --output=./runtime/westend/src/weights/
|
||||
// --heap-pages=4096
|
||||
// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json
|
||||
// --pallet=pallet_scheduler
|
||||
// --chain=westend-dev
|
||||
// --header=./polkadot/file_header.txt
|
||||
// --output=./polkadot/runtime/westend/src/weights/
|
||||
|
||||
#![cfg_attr(rustfmt, rustfmt_skip)]
|
||||
#![allow(unused_parens)]
|
||||
@@ -50,30 +48,30 @@ use core::marker::PhantomData;
|
||||
/// Weight functions for `pallet_scheduler`.
|
||||
pub struct WeightInfo<T>(PhantomData<T>);
|
||||
impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
/// Storage: Scheduler IncompleteSince (r:1 w:1)
|
||||
/// Proof: Scheduler IncompleteSince (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::IncompleteSince` (r:1 w:1)
|
||||
/// Proof: `Scheduler::IncompleteSince` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
|
||||
fn service_agendas_base() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `69`
|
||||
// Estimated: `1489`
|
||||
// Minimum execution time: 3_991_000 picoseconds.
|
||||
Weight::from_parts(4_160_000, 0)
|
||||
// Minimum execution time: 3_220_000 picoseconds.
|
||||
Weight::from_parts(3_512_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 1489))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[0, 50]`.
|
||||
fn service_agenda_base(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `116 + s * (177 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 3_647_000 picoseconds.
|
||||
Weight::from_parts(6_608_270, 0)
|
||||
// Minimum execution time: 3_565_000 picoseconds.
|
||||
Weight::from_parts(6_102_216, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
// Standard Error: 2_516
|
||||
.saturating_add(Weight::from_parts(892_866, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 1_413
|
||||
.saturating_add(Weight::from_parts(339_016, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
@@ -81,36 +79,38 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 5_552_000 picoseconds.
|
||||
Weight::from_parts(5_836_000, 0)
|
||||
// Minimum execution time: 2_940_000 picoseconds.
|
||||
Weight::from_parts(3_070_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
/// Storage: Preimage PreimageFor (r:1 w:1)
|
||||
/// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured)
|
||||
/// Storage: Preimage StatusFor (r:1 w:1)
|
||||
/// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen)
|
||||
/// Storage: `Preimage::PreimageFor` (r:1 w:1)
|
||||
/// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`)
|
||||
/// Storage: `Preimage::StatusFor` (r:1 w:0)
|
||||
/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
|
||||
/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[128, 4194304]`.
|
||||
fn service_task_fetched(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `217 + s * (1 ±0)`
|
||||
// Estimated: `3682 + s * (1 ±0)`
|
||||
// Minimum execution time: 20_583_000 picoseconds.
|
||||
Weight::from_parts(20_771_000, 0)
|
||||
// Minimum execution time: 16_602_000 picoseconds.
|
||||
Weight::from_parts(16_834_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 3682))
|
||||
// Standard Error: 11
|
||||
.saturating_add(Weight::from_parts(2_250, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
// Standard Error: 10
|
||||
.saturating_add(Weight::from_parts(1_307, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(3))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
.saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into()))
|
||||
}
|
||||
/// Storage: Scheduler Lookup (r:0 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
fn service_task_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 7_271_000 picoseconds.
|
||||
Weight::from_parts(7_447_000, 0)
|
||||
// Minimum execution time: 4_202_000 picoseconds.
|
||||
Weight::from_parts(4_383_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
@@ -118,90 +118,169 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 5_547_000 picoseconds.
|
||||
Weight::from_parts(5_776_000, 0)
|
||||
// Minimum execution time: 2_917_000 picoseconds.
|
||||
Weight::from_parts(3_043_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
fn execute_dispatch_signed() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 2_480_000 picoseconds.
|
||||
Weight::from_parts(2_628_000, 0)
|
||||
// Minimum execution time: 1_707_000 picoseconds.
|
||||
Weight::from_parts(1_802_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
fn execute_dispatch_unsigned() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 2_479_000 picoseconds.
|
||||
Weight::from_parts(2_626_000, 0)
|
||||
// Minimum execution time: 1_671_000 picoseconds.
|
||||
Weight::from_parts(1_796_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[0, 49]`.
|
||||
fn schedule(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `116 + s * (177 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 13_350_000 picoseconds.
|
||||
Weight::from_parts(15_289_847, 0)
|
||||
// Minimum execution time: 9_313_000 picoseconds.
|
||||
Weight::from_parts(12_146_613, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
// Standard Error: 5_375
|
||||
.saturating_add(Weight::from_parts(974_567, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 1_381
|
||||
.saturating_add(Weight::from_parts(360_418, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen)
|
||||
/// Storage: Scheduler Lookup (r:0 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 50]`.
|
||||
fn cancel(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `116 + s * (177 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 17_646_000 picoseconds.
|
||||
Weight::from_parts(15_858_434, 0)
|
||||
// Minimum execution time: 13_079_000 picoseconds.
|
||||
Weight::from_parts(12_921_017, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
// Standard Error: 5_354
|
||||
.saturating_add(Weight::from_parts(1_697_642, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 1_112
|
||||
.saturating_add(Weight::from_parts(538_089, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
}
|
||||
/// Storage: Scheduler Lookup (r:1 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[0, 49]`.
|
||||
fn schedule_named(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `293 + s * (185 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 16_419_000 picoseconds.
|
||||
Weight::from_parts(19_868_760, 0)
|
||||
// Minimum execution time: 12_458_000 picoseconds.
|
||||
Weight::from_parts(16_009_539, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
// Standard Error: 6_915
|
||||
.saturating_add(Weight::from_parts(1_010_225, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 2_260
|
||||
.saturating_add(Weight::from_parts(399_245, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
}
|
||||
/// Storage: Scheduler Lookup (r:1 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(38963), added: 41438, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 50]`.
|
||||
fn cancel_named(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `319 + s * (185 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 19_574_000 picoseconds.
|
||||
Weight::from_parts(18_453_197, 0)
|
||||
// Minimum execution time: 15_173_000 picoseconds.
|
||||
Weight::from_parts(15_602_728, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
// Standard Error: 6_009
|
||||
.saturating_add(Weight::from_parts(1_707_130, 0).saturating_mul(s.into()))
|
||||
// Standard Error: 1_302
|
||||
.saturating_add(Weight::from_parts(557_878, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
}
|
||||
/// Storage: `Scheduler::Retries` (r:1 w:2)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 50]`.
|
||||
fn schedule_retry(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `197`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 13_531_000 picoseconds.
|
||||
Weight::from_parts(13_985_249, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
// Standard Error: 619
|
||||
.saturating_add(Weight::from_parts(39_068, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(4))
|
||||
}
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn set_retry() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `116 + s * (177 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 8_050_000 picoseconds.
|
||||
Weight::from_parts(8_440_627, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn set_retry_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `325 + s * (185 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 10_876_000 picoseconds.
|
||||
Weight::from_parts(11_708_172, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn cancel_retry() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `116 + s * (177 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 8_050_000 picoseconds.
|
||||
Weight::from_parts(8_440_627, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(38963), added: 41438, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn cancel_retry_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `325 + s * (185 ±0)`
|
||||
// Estimated: `42428`
|
||||
// Minimum execution time: 10_876_000 picoseconds.
|
||||
Weight::from_parts(11_708_172, 0)
|
||||
.saturating_add(Weight::from_parts(0, 42428))
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
# Schema: Polkadot SDK PRDoc Schema (prdoc) v1.0.0
|
||||
# See doc at https://raw.githubusercontent.com/paritytech/polkadot-sdk/master/prdoc/schema_user.json
|
||||
|
||||
title: Add retry mechanics to `pallet-scheduler`
|
||||
|
||||
doc:
|
||||
- audience: Runtime Dev
|
||||
description: |
|
||||
This PR adds retry mechanics to pallet-scheduler, as described in the issue above.
|
||||
Users can now set a retry configuration for a task so that, in case its scheduled run fails, it will be retried after a number of blocks, for a specified number of times or until it succeeds.
|
||||
If a retried task runs successfully before running out of retries, its remaining retry counter will be reset to the initial value. If a retried task runs out of retries, it will be removed from the schedule.
|
||||
Tasks which need to be scheduled for a retry are still subject to weight metering and agenda space, same as a regular task. Periodic tasks will have their periodic schedule put on hold while the task is retrying.
|
||||
|
||||
crates:
|
||||
- name: pallet-scheduler
|
||||
@@ -22,12 +22,13 @@ use frame_benchmarking::v1::{account, benchmarks, BenchmarkError};
|
||||
use frame_support::{
|
||||
ensure,
|
||||
traits::{schedule::Priority, BoundedInline},
|
||||
weights::WeightMeter,
|
||||
};
|
||||
use frame_system::{pallet_prelude::BlockNumberFor, RawOrigin};
|
||||
use sp_std::{prelude::*, vec};
|
||||
|
||||
use crate::Pallet as Scheduler;
|
||||
use frame_system::Call as SystemCall;
|
||||
use frame_system::{Call as SystemCall, EventRecord};
|
||||
|
||||
const SEED: u32 = 0;
|
||||
|
||||
@@ -35,6 +36,14 @@ const BLOCK_NUMBER: u32 = 2;
|
||||
|
||||
type SystemOrigin<T> = <T as frame_system::Config>::RuntimeOrigin;
|
||||
|
||||
fn assert_last_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
|
||||
let events = frame_system::Pallet::<T>::events();
|
||||
let system_event: <T as frame_system::Config>::RuntimeEvent = generic_event.into();
|
||||
// compare to the last event record
|
||||
let EventRecord { event, .. } = &events[events.len() - 1];
|
||||
assert_eq!(event, &system_event);
|
||||
}
|
||||
|
||||
/// Add `n` items to the schedule.
|
||||
///
|
||||
/// For `resolved`:
|
||||
@@ -306,5 +315,105 @@ benchmarks! {
|
||||
);
|
||||
}
|
||||
|
||||
schedule_retry {
|
||||
let s in 1 .. T::MaxScheduledPerBlock::get();
|
||||
let when = BLOCK_NUMBER.into();
|
||||
|
||||
fill_schedule::<T>(when, s)?;
|
||||
let name = u32_to_name(s - 1);
|
||||
let address = Lookup::<T>::get(name).unwrap();
|
||||
let period: BlockNumberFor<T> = 1u32.into();
|
||||
let root: <T as Config>::PalletsOrigin = frame_system::RawOrigin::Root.into();
|
||||
let retry_config = RetryConfig { total_retries: 10, remaining: 10, period };
|
||||
Retries::<T>::insert(address, retry_config);
|
||||
let (mut when, index) = address;
|
||||
let task = Agenda::<T>::get(when)[index as usize].clone().unwrap();
|
||||
let mut weight_counter = WeightMeter::with_limit(T::MaximumWeight::get());
|
||||
}: {
|
||||
Scheduler::<T>::schedule_retry(&mut weight_counter, when, when, index, &task, retry_config);
|
||||
} verify {
|
||||
when = when + BlockNumberFor::<T>::one();
|
||||
assert_eq!(
|
||||
Retries::<T>::get((when, 0)),
|
||||
Some(RetryConfig { total_retries: 10, remaining: 9, period })
|
||||
);
|
||||
}
|
||||
|
||||
set_retry {
|
||||
let s = T::MaxScheduledPerBlock::get();
|
||||
let when = BLOCK_NUMBER.into();
|
||||
|
||||
fill_schedule::<T>(when, s)?;
|
||||
let name = u32_to_name(s - 1);
|
||||
let address = Lookup::<T>::get(name).unwrap();
|
||||
let (when, index) = address;
|
||||
let period = BlockNumberFor::<T>::one();
|
||||
}: _(RawOrigin::Root, (when, index), 10, period)
|
||||
verify {
|
||||
assert_eq!(
|
||||
Retries::<T>::get((when, index)),
|
||||
Some(RetryConfig { total_retries: 10, remaining: 10, period })
|
||||
);
|
||||
assert_last_event::<T>(
|
||||
Event::RetrySet { task: address, id: None, period, retries: 10 }.into(),
|
||||
);
|
||||
}
|
||||
|
||||
set_retry_named {
|
||||
let s = T::MaxScheduledPerBlock::get();
|
||||
let when = BLOCK_NUMBER.into();
|
||||
|
||||
fill_schedule::<T>(when, s)?;
|
||||
let name = u32_to_name(s - 1);
|
||||
let address = Lookup::<T>::get(name).unwrap();
|
||||
let (when, index) = address;
|
||||
let period = BlockNumberFor::<T>::one();
|
||||
}: _(RawOrigin::Root, name, 10, period)
|
||||
verify {
|
||||
assert_eq!(
|
||||
Retries::<T>::get((when, index)),
|
||||
Some(RetryConfig { total_retries: 10, remaining: 10, period })
|
||||
);
|
||||
assert_last_event::<T>(
|
||||
Event::RetrySet { task: address, id: Some(name), period, retries: 10 }.into(),
|
||||
);
|
||||
}
|
||||
|
||||
cancel_retry {
|
||||
let s = T::MaxScheduledPerBlock::get();
|
||||
let when = BLOCK_NUMBER.into();
|
||||
|
||||
fill_schedule::<T>(when, s)?;
|
||||
let name = u32_to_name(s - 1);
|
||||
let address = Lookup::<T>::get(name).unwrap();
|
||||
let (when, index) = address;
|
||||
let period = BlockNumberFor::<T>::one();
|
||||
assert!(Scheduler::<T>::set_retry(RawOrigin::Root.into(), (when, index), 10, period).is_ok());
|
||||
}: _(RawOrigin::Root, (when, index))
|
||||
verify {
|
||||
assert!(!Retries::<T>::contains_key((when, index)));
|
||||
assert_last_event::<T>(
|
||||
Event::RetryCancelled { task: address, id: None }.into(),
|
||||
);
|
||||
}
|
||||
|
||||
cancel_retry_named {
|
||||
let s = T::MaxScheduledPerBlock::get();
|
||||
let when = BLOCK_NUMBER.into();
|
||||
|
||||
fill_schedule::<T>(when, s)?;
|
||||
let name = u32_to_name(s - 1);
|
||||
let address = Lookup::<T>::get(name).unwrap();
|
||||
let (when, index) = address;
|
||||
let period = BlockNumberFor::<T>::one();
|
||||
assert!(Scheduler::<T>::set_retry_named(RawOrigin::Root.into(), name, 10, period).is_ok());
|
||||
}: _(RawOrigin::Root, name)
|
||||
verify {
|
||||
assert!(!Retries::<T>::contains_key((when, index)));
|
||||
assert_last_event::<T>(
|
||||
Event::RetryCancelled { task: address, id: Some(name) }.into(),
|
||||
);
|
||||
}
|
||||
|
||||
impl_benchmark_test_suite!(Scheduler, crate::mock::new_test_ext(), crate::mock::Test);
|
||||
}
|
||||
|
||||
@@ -122,6 +122,17 @@ pub type CallOrHashOf<T> =
|
||||
pub type BoundedCallOf<T> =
|
||||
Bounded<<T as Config>::RuntimeCall, <T as frame_system::Config>::Hashing>;
|
||||
|
||||
/// The configuration of the retry mechanism for a given task along with its current state.
|
||||
#[derive(Clone, Copy, RuntimeDebug, PartialEq, Eq, Encode, Decode, MaxEncodedLen, TypeInfo)]
|
||||
pub struct RetryConfig<Period> {
|
||||
/// Initial amount of retries allowed.
|
||||
total_retries: u8,
|
||||
/// Amount of retries left.
|
||||
remaining: u8,
|
||||
/// Period of time between retry attempts.
|
||||
period: Period,
|
||||
}
|
||||
|
||||
#[cfg_attr(any(feature = "std", test), derive(PartialEq, Eq))]
|
||||
#[derive(Clone, RuntimeDebug, Encode, Decode)]
|
||||
struct ScheduledV1<Call, BlockNumber> {
|
||||
@@ -148,6 +159,26 @@ pub struct Scheduled<Name, Call, BlockNumber, PalletsOrigin, AccountId> {
|
||||
_phantom: PhantomData<AccountId>,
|
||||
}
|
||||
|
||||
impl<Name, Call, BlockNumber, PalletsOrigin, AccountId>
|
||||
Scheduled<Name, Call, BlockNumber, PalletsOrigin, AccountId>
|
||||
where
|
||||
Call: Clone,
|
||||
PalletsOrigin: Clone,
|
||||
{
|
||||
/// Create a new task to be used for retry attempts of the original one. The cloned task will
|
||||
/// have the same `priority`, `call` and `origin`, but will always be non-periodic and unnamed.
|
||||
pub fn as_retry(&self) -> Self {
|
||||
Self {
|
||||
maybe_id: None,
|
||||
priority: self.priority,
|
||||
call: self.call.clone(),
|
||||
maybe_periodic: None,
|
||||
origin: self.origin.clone(),
|
||||
_phantom: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
use crate::{Scheduled as ScheduledV3, Scheduled as ScheduledV2};
|
||||
|
||||
pub type ScheduledV2Of<T> = ScheduledV2<
|
||||
@@ -273,6 +304,16 @@ pub mod pallet {
|
||||
ValueQuery,
|
||||
>;
|
||||
|
||||
/// Retry configurations for items to be executed, indexed by task address.
|
||||
#[pallet::storage]
|
||||
pub type Retries<T: Config> = StorageMap<
|
||||
_,
|
||||
Blake2_128Concat,
|
||||
TaskAddress<BlockNumberFor<T>>,
|
||||
RetryConfig<BlockNumberFor<T>>,
|
||||
OptionQuery,
|
||||
>;
|
||||
|
||||
/// Lookup from a name to the block number and index of the task.
|
||||
///
|
||||
/// For v3 -> v4 the previously unbounded identities are Blake2-256 hashed to form the v4
|
||||
@@ -295,10 +336,22 @@ pub mod pallet {
|
||||
id: Option<TaskName>,
|
||||
result: DispatchResult,
|
||||
},
|
||||
/// Set a retry configuration for some task.
|
||||
RetrySet {
|
||||
task: TaskAddress<BlockNumberFor<T>>,
|
||||
id: Option<TaskName>,
|
||||
period: BlockNumberFor<T>,
|
||||
retries: u8,
|
||||
},
|
||||
/// Cancel a retry configuration for some task.
|
||||
RetryCancelled { task: TaskAddress<BlockNumberFor<T>>, id: Option<TaskName> },
|
||||
/// The call for the provided hash was not found so the task has been aborted.
|
||||
CallUnavailable { task: TaskAddress<BlockNumberFor<T>>, id: Option<TaskName> },
|
||||
/// The given task was unable to be renewed since the agenda is full at that block.
|
||||
PeriodicFailed { task: TaskAddress<BlockNumberFor<T>>, id: Option<TaskName> },
|
||||
/// The given task was unable to be retried since the agenda is full at that block or there
|
||||
/// was not enough weight to reschedule it.
|
||||
RetryFailed { task: TaskAddress<BlockNumberFor<T>>, id: Option<TaskName> },
|
||||
/// The given task can never be executed since it is overweight.
|
||||
PermanentlyOverweight { task: TaskAddress<BlockNumberFor<T>>, id: Option<TaskName> },
|
||||
}
|
||||
@@ -440,6 +493,111 @@ pub mod pallet {
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Set a retry configuration for a task so that, in case its scheduled run fails, it will
|
||||
/// be retried after `period` blocks, for a total amount of `retries` retries or until it
|
||||
/// succeeds.
|
||||
///
|
||||
/// Tasks which need to be scheduled for a retry are still subject to weight metering and
|
||||
/// agenda space, same as a regular task. If a periodic task fails, it will be scheduled
|
||||
/// normally while the task is retrying.
|
||||
///
|
||||
/// Tasks scheduled as a result of a retry for a periodic task are unnamed, non-periodic
|
||||
/// clones of the original task. Their retry configuration will be derived from the
|
||||
/// original task's configuration, but will have a lower value for `remaining` than the
|
||||
/// original `total_retries`.
|
||||
#[pallet::call_index(6)]
|
||||
#[pallet::weight(<T as Config>::WeightInfo::set_retry())]
|
||||
pub fn set_retry(
|
||||
origin: OriginFor<T>,
|
||||
task: TaskAddress<BlockNumberFor<T>>,
|
||||
retries: u8,
|
||||
period: BlockNumberFor<T>,
|
||||
) -> DispatchResult {
|
||||
T::ScheduleOrigin::ensure_origin(origin.clone())?;
|
||||
let origin = <T as Config>::RuntimeOrigin::from(origin);
|
||||
let (when, index) = task;
|
||||
let agenda = Agenda::<T>::get(when);
|
||||
let scheduled = agenda
|
||||
.get(index as usize)
|
||||
.and_then(Option::as_ref)
|
||||
.ok_or(Error::<T>::NotFound)?;
|
||||
Self::ensure_privilege(origin.caller(), &scheduled.origin)?;
|
||||
Retries::<T>::insert(
|
||||
(when, index),
|
||||
RetryConfig { total_retries: retries, remaining: retries, period },
|
||||
);
|
||||
Self::deposit_event(Event::RetrySet { task, id: None, period, retries });
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Set a retry configuration for a named task so that, in case its scheduled run fails, it
|
||||
/// will be retried after `period` blocks, for a total amount of `retries` retries or until
|
||||
/// it succeeds.
|
||||
///
|
||||
/// Tasks which need to be scheduled for a retry are still subject to weight metering and
|
||||
/// agenda space, same as a regular task. If a periodic task fails, it will be scheduled
|
||||
/// normally while the task is retrying.
|
||||
///
|
||||
/// Tasks scheduled as a result of a retry for a periodic task are unnamed, non-periodic
|
||||
/// clones of the original task. Their retry configuration will be derived from the
|
||||
/// original task's configuration, but will have a lower value for `remaining` than the
|
||||
/// original `total_retries`.
|
||||
#[pallet::call_index(7)]
|
||||
#[pallet::weight(<T as Config>::WeightInfo::set_retry_named())]
|
||||
pub fn set_retry_named(
|
||||
origin: OriginFor<T>,
|
||||
id: TaskName,
|
||||
retries: u8,
|
||||
period: BlockNumberFor<T>,
|
||||
) -> DispatchResult {
|
||||
T::ScheduleOrigin::ensure_origin(origin.clone())?;
|
||||
let origin = <T as Config>::RuntimeOrigin::from(origin);
|
||||
let (when, agenda_index) = Lookup::<T>::get(&id).ok_or(Error::<T>::NotFound)?;
|
||||
let agenda = Agenda::<T>::get(when);
|
||||
let scheduled = agenda
|
||||
.get(agenda_index as usize)
|
||||
.and_then(Option::as_ref)
|
||||
.ok_or(Error::<T>::NotFound)?;
|
||||
Self::ensure_privilege(origin.caller(), &scheduled.origin)?;
|
||||
Retries::<T>::insert(
|
||||
(when, agenda_index),
|
||||
RetryConfig { total_retries: retries, remaining: retries, period },
|
||||
);
|
||||
Self::deposit_event(Event::RetrySet {
|
||||
task: (when, agenda_index),
|
||||
id: Some(id),
|
||||
period,
|
||||
retries,
|
||||
});
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Removes the retry configuration of a task.
|
||||
#[pallet::call_index(8)]
|
||||
#[pallet::weight(<T as Config>::WeightInfo::cancel_retry())]
|
||||
pub fn cancel_retry(
|
||||
origin: OriginFor<T>,
|
||||
task: TaskAddress<BlockNumberFor<T>>,
|
||||
) -> DispatchResult {
|
||||
T::ScheduleOrigin::ensure_origin(origin.clone())?;
|
||||
let origin = <T as Config>::RuntimeOrigin::from(origin);
|
||||
Self::do_cancel_retry(origin.caller(), task)?;
|
||||
Self::deposit_event(Event::RetryCancelled { task, id: None });
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Cancel the retry configuration of a named task.
|
||||
#[pallet::call_index(9)]
|
||||
#[pallet::weight(<T as Config>::WeightInfo::cancel_retry_named())]
|
||||
pub fn cancel_retry_named(origin: OriginFor<T>, id: TaskName) -> DispatchResult {
|
||||
T::ScheduleOrigin::ensure_origin(origin.clone())?;
|
||||
let origin = <T as Config>::RuntimeOrigin::from(origin);
|
||||
let task = Lookup::<T>::get(&id).ok_or(Error::<T>::NotFound)?;
|
||||
Self::do_cancel_retry(origin.caller(), task)?;
|
||||
Self::deposit_event(Event::RetryCancelled { task, id: Some(id) });
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -838,12 +996,7 @@ impl<T: Config> Pallet<T> {
|
||||
Ok(None),
|
||||
|s| -> Result<Option<Scheduled<_, _, _, _, _>>, DispatchError> {
|
||||
if let (Some(ref o), Some(ref s)) = (origin, s.borrow()) {
|
||||
if matches!(
|
||||
T::OriginPrivilegeCmp::cmp_privilege(o, &s.origin),
|
||||
Some(Ordering::Less) | None
|
||||
) {
|
||||
return Err(BadOrigin.into())
|
||||
}
|
||||
Self::ensure_privilege(o, &s.origin)?;
|
||||
};
|
||||
Ok(s.take())
|
||||
},
|
||||
@@ -854,6 +1007,7 @@ impl<T: Config> Pallet<T> {
|
||||
if let Some(id) = s.maybe_id {
|
||||
Lookup::<T>::remove(id);
|
||||
}
|
||||
Retries::<T>::remove((when, index));
|
||||
Self::cleanup_agenda(when);
|
||||
Self::deposit_event(Event::Canceled { when, index });
|
||||
Ok(())
|
||||
@@ -931,12 +1085,8 @@ impl<T: Config> Pallet<T> {
|
||||
Agenda::<T>::try_mutate(when, |agenda| -> DispatchResult {
|
||||
if let Some(s) = agenda.get_mut(i) {
|
||||
if let (Some(ref o), Some(ref s)) = (origin, s.borrow()) {
|
||||
if matches!(
|
||||
T::OriginPrivilegeCmp::cmp_privilege(o, &s.origin),
|
||||
Some(Ordering::Less) | None
|
||||
) {
|
||||
return Err(BadOrigin.into())
|
||||
}
|
||||
Self::ensure_privilege(o, &s.origin)?;
|
||||
Retries::<T>::remove((when, index));
|
||||
T::Preimages::drop(&s.call);
|
||||
}
|
||||
*s = None;
|
||||
@@ -973,6 +1123,20 @@ impl<T: Config> Pallet<T> {
|
||||
Self::deposit_event(Event::Canceled { when, index });
|
||||
Self::place_task(new_time, task).map_err(|x| x.0)
|
||||
}
|
||||
|
||||
fn do_cancel_retry(
|
||||
origin: &T::PalletsOrigin,
|
||||
(when, index): TaskAddress<BlockNumberFor<T>>,
|
||||
) -> Result<(), DispatchError> {
|
||||
let agenda = Agenda::<T>::get(when);
|
||||
let scheduled = agenda
|
||||
.get(index as usize)
|
||||
.and_then(Option::as_ref)
|
||||
.ok_or(Error::<T>::NotFound)?;
|
||||
Self::ensure_privilege(origin, &scheduled.origin)?;
|
||||
Retries::<T>::remove((when, index));
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
enum ServiceTaskError {
|
||||
@@ -1124,11 +1288,21 @@ impl<T: Config> Pallet<T> {
|
||||
},
|
||||
Err(()) => Err((Overweight, Some(task))),
|
||||
Ok(result) => {
|
||||
let failed = result.is_err();
|
||||
let maybe_retry_config = Retries::<T>::take((when, agenda_index));
|
||||
Self::deposit_event(Event::Dispatched {
|
||||
task: (when, agenda_index),
|
||||
id: task.maybe_id,
|
||||
result,
|
||||
});
|
||||
|
||||
match maybe_retry_config {
|
||||
Some(retry_config) if failed => {
|
||||
Self::schedule_retry(weight, now, when, agenda_index, &task, retry_config);
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
|
||||
if let &Some((period, count)) = &task.maybe_periodic {
|
||||
if count > 1 {
|
||||
task.maybe_periodic = Some((period, count - 1));
|
||||
@@ -1137,7 +1311,10 @@ impl<T: Config> Pallet<T> {
|
||||
}
|
||||
let wake = now.saturating_add(period);
|
||||
match Self::place_task(wake, task) {
|
||||
Ok(_) => {},
|
||||
Ok(new_address) =>
|
||||
if let Some(retry_config) = maybe_retry_config {
|
||||
Retries::<T>::insert(new_address, retry_config);
|
||||
},
|
||||
Err((_, task)) => {
|
||||
// TODO: Leave task in storage somewhere for it to be rescheduled
|
||||
// manually.
|
||||
@@ -1192,6 +1369,70 @@ impl<T: Config> Pallet<T> {
|
||||
let _ = weight.try_consume(call_weight);
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
/// Check if a task has a retry configuration in place and, if so, try to reschedule it.
|
||||
///
|
||||
/// Possible causes for failure to schedule a retry for a task:
|
||||
/// - there wasn't enough weight to run the task reschedule logic
|
||||
/// - there was no retry configuration in place
|
||||
/// - there were no more retry attempts left
|
||||
/// - the agenda was full.
|
||||
fn schedule_retry(
|
||||
weight: &mut WeightMeter,
|
||||
now: BlockNumberFor<T>,
|
||||
when: BlockNumberFor<T>,
|
||||
agenda_index: u32,
|
||||
task: &ScheduledOf<T>,
|
||||
retry_config: RetryConfig<BlockNumberFor<T>>,
|
||||
) {
|
||||
if weight
|
||||
.try_consume(T::WeightInfo::schedule_retry(T::MaxScheduledPerBlock::get()))
|
||||
.is_err()
|
||||
{
|
||||
Self::deposit_event(Event::RetryFailed {
|
||||
task: (when, agenda_index),
|
||||
id: task.maybe_id,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
let RetryConfig { total_retries, mut remaining, period } = retry_config;
|
||||
remaining = match remaining.checked_sub(1) {
|
||||
Some(n) => n,
|
||||
None => return,
|
||||
};
|
||||
let wake = now.saturating_add(period);
|
||||
match Self::place_task(wake, task.as_retry()) {
|
||||
Ok(address) => {
|
||||
// Reinsert the retry config to the new address of the task after it was
|
||||
// placed.
|
||||
Retries::<T>::insert(address, RetryConfig { total_retries, remaining, period });
|
||||
},
|
||||
Err((_, task)) => {
|
||||
// TODO: Leave task in storage somewhere for it to be
|
||||
// rescheduled manually.
|
||||
T::Preimages::drop(&task.call);
|
||||
Self::deposit_event(Event::RetryFailed {
|
||||
task: (when, agenda_index),
|
||||
id: task.maybe_id,
|
||||
});
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
/// Ensure that `left` has at least the same level of privilege or higher than `right`.
|
||||
///
|
||||
/// Returns an error if `left` has a lower level of privilege or the two cannot be compared.
|
||||
fn ensure_privilege(
|
||||
left: &<T as Config>::PalletsOrigin,
|
||||
right: &<T as Config>::PalletsOrigin,
|
||||
) -> Result<(), DispatchError> {
|
||||
if matches!(T::OriginPrivilegeCmp::cmp_privilege(left, right), Some(Ordering::Less) | None)
|
||||
{
|
||||
return Err(BadOrigin.into());
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Config> schedule::v2::Anon<BlockNumberFor<T>, <T as Config>::RuntimeCall, T::PalletsOrigin>
|
||||
|
||||
@@ -51,6 +51,17 @@ pub mod logger {
|
||||
#[pallet::pallet]
|
||||
pub struct Pallet<T>(_);
|
||||
|
||||
#[pallet::storage]
|
||||
pub type Threshold<T: Config> = StorageValue<_, (BlockNumberFor<T>, BlockNumberFor<T>)>;
|
||||
|
||||
#[pallet::error]
|
||||
pub enum Error<T> {
|
||||
/// Under the threshold.
|
||||
TooEarly,
|
||||
/// Over the threshold.
|
||||
TooLate,
|
||||
}
|
||||
|
||||
#[pallet::hooks]
|
||||
impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {}
|
||||
|
||||
@@ -89,6 +100,20 @@ pub mod logger {
|
||||
});
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[pallet::call_index(2)]
|
||||
#[pallet::weight(*weight)]
|
||||
pub fn timed_log(origin: OriginFor<T>, i: u32, weight: Weight) -> DispatchResult {
|
||||
let now = frame_system::Pallet::<T>::block_number();
|
||||
let (start, end) = Threshold::<T>::get().unwrap_or((0u32.into(), u32::MAX.into()));
|
||||
ensure!(now >= start, Error::<T>::TooEarly);
|
||||
ensure!(now <= end, Error::<T>::TooLate);
|
||||
Self::deposit_event(Event::Logged(i, weight));
|
||||
Log::mutate(|log| {
|
||||
log.push((origin.caller().clone(), i));
|
||||
});
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,6 +223,21 @@ impl WeightInfo for TestWeightInfo {
|
||||
fn cancel_named(_s: u32) -> Weight {
|
||||
Weight::from_parts(50, 0)
|
||||
}
|
||||
fn schedule_retry(_s: u32) -> Weight {
|
||||
Weight::from_parts(100000, 0)
|
||||
}
|
||||
fn set_retry() -> Weight {
|
||||
Weight::from_parts(50, 0)
|
||||
}
|
||||
fn set_retry_named() -> Weight {
|
||||
Weight::from_parts(50, 0)
|
||||
}
|
||||
fn cancel_retry() -> Weight {
|
||||
Weight::from_parts(50, 0)
|
||||
}
|
||||
fn cancel_retry_named() -> Weight {
|
||||
Weight::from_parts(50, 0)
|
||||
}
|
||||
}
|
||||
parameter_types! {
|
||||
pub MaximumSchedulerWeight: Weight = Perbill::from_percent(80) *
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Generated
+311
-147
@@ -15,32 +15,29 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//! Autogenerated weights for pallet_scheduler
|
||||
//! Autogenerated weights for `pallet_scheduler`
|
||||
//!
|
||||
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
|
||||
//! DATE: 2023-06-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! DATE: 2024-01-25, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! WORST CASE MAP SIZE: `1000000`
|
||||
//! HOSTNAME: `runner-e8ezs4ez-project-145-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
|
||||
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
|
||||
//! HOSTNAME: `runner-grjcggob-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
|
||||
//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024`
|
||||
|
||||
// Executed Command:
|
||||
// ./target/production/substrate
|
||||
// target/production/substrate-node
|
||||
// benchmark
|
||||
// pallet
|
||||
// --chain=dev
|
||||
// --steps=50
|
||||
// --repeat=20
|
||||
// --pallet=pallet_scheduler
|
||||
// --no-storage-info
|
||||
// --no-median-slopes
|
||||
// --no-min-squares
|
||||
// --extrinsic=*
|
||||
// --execution=wasm
|
||||
// --wasm-execution=compiled
|
||||
// --heap-pages=4096
|
||||
// --output=./frame/scheduler/src/weights.rs
|
||||
// --header=./HEADER-APACHE2
|
||||
// --template=./.maintain/frame-weight-template.hbs
|
||||
// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json
|
||||
// --pallet=pallet_scheduler
|
||||
// --chain=dev
|
||||
// --header=./substrate/HEADER-APACHE2
|
||||
// --output=./substrate/frame/scheduler/src/weights.rs
|
||||
// --template=./substrate/.maintain/frame-weight-template.hbs
|
||||
|
||||
#![cfg_attr(rustfmt, rustfmt_skip)]
|
||||
#![allow(unused_parens)]
|
||||
@@ -50,7 +47,7 @@
|
||||
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
|
||||
use core::marker::PhantomData;
|
||||
|
||||
/// Weight functions needed for pallet_scheduler.
|
||||
/// Weight functions needed for `pallet_scheduler`.
|
||||
pub trait WeightInfo {
|
||||
fn service_agendas_base() -> Weight;
|
||||
fn service_agenda_base(s: u32, ) -> Weight;
|
||||
@@ -64,33 +61,38 @@ pub trait WeightInfo {
|
||||
fn cancel(s: u32, ) -> Weight;
|
||||
fn schedule_named(s: u32, ) -> Weight;
|
||||
fn cancel_named(s: u32, ) -> Weight;
|
||||
fn schedule_retry(s: u32, ) -> Weight;
|
||||
fn set_retry() -> Weight;
|
||||
fn set_retry_named() -> Weight;
|
||||
fn cancel_retry() -> Weight;
|
||||
fn cancel_retry_named() -> Weight;
|
||||
}
|
||||
|
||||
/// Weights for pallet_scheduler using the Substrate node and recommended hardware.
|
||||
/// Weights for `pallet_scheduler` using the Substrate node and recommended hardware.
|
||||
pub struct SubstrateWeight<T>(PhantomData<T>);
|
||||
impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
/// Storage: Scheduler IncompleteSince (r:1 w:1)
|
||||
/// Proof: Scheduler IncompleteSince (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::IncompleteSince` (r:1 w:1)
|
||||
/// Proof: `Scheduler::IncompleteSince` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
|
||||
fn service_agendas_base() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `31`
|
||||
// Estimated: `1489`
|
||||
// Minimum execution time: 3_991_000 picoseconds.
|
||||
Weight::from_parts(4_174_000, 1489)
|
||||
// Minimum execution time: 3_040_000 picoseconds.
|
||||
Weight::from_parts(3_202_000, 1489)
|
||||
.saturating_add(T::DbWeight::get().reads(1_u64))
|
||||
.saturating_add(T::DbWeight::get().writes(1_u64))
|
||||
}
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(107022), added: 109497, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[0, 512]`.
|
||||
fn service_agenda_base(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `81 + s * (177 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 3_581_000 picoseconds.
|
||||
Weight::from_parts(7_413_174, 110487)
|
||||
// Standard Error: 971
|
||||
.saturating_add(Weight::from_parts(348_077, 0).saturating_mul(s.into()))
|
||||
// Minimum execution time: 3_462_000 picoseconds.
|
||||
Weight::from_parts(6_262_125, 110487)
|
||||
// Standard Error: 536
|
||||
.saturating_add(Weight::from_parts(332_570, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(1_u64))
|
||||
.saturating_add(T::DbWeight::get().writes(1_u64))
|
||||
}
|
||||
@@ -98,145 +100,226 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 5_250_000 picoseconds.
|
||||
Weight::from_parts(5_549_000, 0)
|
||||
// Minimum execution time: 3_425_000 picoseconds.
|
||||
Weight::from_parts(3_680_000, 0)
|
||||
}
|
||||
/// Storage: Preimage PreimageFor (r:1 w:1)
|
||||
/// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured)
|
||||
/// Storage: Preimage StatusFor (r:1 w:1)
|
||||
/// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen)
|
||||
/// Storage: `Preimage::PreimageFor` (r:1 w:1)
|
||||
/// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`)
|
||||
/// Storage: `Preimage::StatusFor` (r:1 w:0)
|
||||
/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
|
||||
/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[128, 4194304]`.
|
||||
fn service_task_fetched(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `179 + s * (1 ±0)`
|
||||
// Estimated: `3644 + s * (1 ±0)`
|
||||
// Minimum execution time: 20_089_000 picoseconds.
|
||||
Weight::from_parts(20_376_000, 3644)
|
||||
// Standard Error: 3
|
||||
.saturating_add(Weight::from_parts(1_170, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2_u64))
|
||||
// Measured: `246 + s * (1 ±0)`
|
||||
// Estimated: `3711 + s * (1 ±0)`
|
||||
// Minimum execution time: 17_564_000 picoseconds.
|
||||
Weight::from_parts(17_887_000, 3711)
|
||||
// Standard Error: 1
|
||||
.saturating_add(Weight::from_parts(1_253, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(3_u64))
|
||||
.saturating_add(T::DbWeight::get().writes(2_u64))
|
||||
.saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into()))
|
||||
}
|
||||
/// Storage: Scheduler Lookup (r:0 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
fn service_task_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 6_998_000 picoseconds.
|
||||
Weight::from_parts(7_303_000, 0)
|
||||
// Minimum execution time: 4_934_000 picoseconds.
|
||||
Weight::from_parts(5_275_000, 0)
|
||||
.saturating_add(T::DbWeight::get().writes(1_u64))
|
||||
}
|
||||
fn service_task_periodic() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 5_078_000 picoseconds.
|
||||
Weight::from_parts(5_315_000, 0)
|
||||
// Minimum execution time: 3_348_000 picoseconds.
|
||||
Weight::from_parts(3_561_000, 0)
|
||||
}
|
||||
/// Storage: `SafeMode::EnteredUntil` (r:1 w:0)
|
||||
/// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
|
||||
/// Storage: `TxPause::PausedCalls` (r:1 w:0)
|
||||
/// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`)
|
||||
fn execute_dispatch_signed() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 2_228_000 picoseconds.
|
||||
Weight::from_parts(2_352_000, 0)
|
||||
// Measured: `145`
|
||||
// Estimated: `3997`
|
||||
// Minimum execution time: 6_395_000 picoseconds.
|
||||
Weight::from_parts(6_642_000, 3997)
|
||||
.saturating_add(T::DbWeight::get().reads(2_u64))
|
||||
}
|
||||
fn execute_dispatch_unsigned() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 2_226_000 picoseconds.
|
||||
Weight::from_parts(2_371_000, 0)
|
||||
// Minimum execution time: 2_167_000 picoseconds.
|
||||
Weight::from_parts(2_266_000, 0)
|
||||
}
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(107022), added: 109497, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[0, 511]`.
|
||||
fn schedule(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `81 + s * (177 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 12_683_000 picoseconds.
|
||||
Weight::from_parts(16_951_846, 110487)
|
||||
// Standard Error: 1_046
|
||||
.saturating_add(Weight::from_parts(380_842, 0).saturating_mul(s.into()))
|
||||
// Minimum execution time: 10_009_000 picoseconds.
|
||||
Weight::from_parts(13_565_985, 110487)
|
||||
// Standard Error: 575
|
||||
.saturating_add(Weight::from_parts(354_760, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(1_u64))
|
||||
.saturating_add(T::DbWeight::get().writes(1_u64))
|
||||
}
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(107022), added: 109497, mode: MaxEncodedLen)
|
||||
/// Storage: Scheduler Lookup (r:0 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 512]`.
|
||||
fn cancel(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `81 + s * (177 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 16_201_000 picoseconds.
|
||||
Weight::from_parts(18_259_422, 110487)
|
||||
// Standard Error: 1_344
|
||||
.saturating_add(Weight::from_parts(545_863, 0).saturating_mul(s.into()))
|
||||
// Minimum execution time: 14_048_000 picoseconds.
|
||||
Weight::from_parts(15_141_696, 110487)
|
||||
// Standard Error: 1_082
|
||||
.saturating_add(Weight::from_parts(533_390, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(1_u64))
|
||||
.saturating_add(T::DbWeight::get().writes(2_u64))
|
||||
}
|
||||
/// Storage: Scheduler Lookup (r:1 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(107022), added: 109497, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[0, 511]`.
|
||||
fn schedule_named(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `596 + s * (178 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 16_180_000 picoseconds.
|
||||
Weight::from_parts(25_128_925, 110487)
|
||||
// Standard Error: 1_118
|
||||
.saturating_add(Weight::from_parts(375_631, 0).saturating_mul(s.into()))
|
||||
// Minimum execution time: 12_902_000 picoseconds.
|
||||
Weight::from_parts(18_957_156, 110487)
|
||||
// Standard Error: 792
|
||||
.saturating_add(Weight::from_parts(361_909, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2_u64))
|
||||
.saturating_add(T::DbWeight::get().writes(2_u64))
|
||||
}
|
||||
/// Storage: Scheduler Lookup (r:1 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(107022), added: 109497, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 512]`.
|
||||
fn cancel_named(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `709 + s * (177 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 18_244_000 picoseconds.
|
||||
Weight::from_parts(21_439_366, 110487)
|
||||
// Standard Error: 1_084
|
||||
.saturating_add(Weight::from_parts(557_691, 0).saturating_mul(s.into()))
|
||||
// Minimum execution time: 15_933_000 picoseconds.
|
||||
Weight::from_parts(18_091_415, 110487)
|
||||
// Standard Error: 779
|
||||
.saturating_add(Weight::from_parts(534_402, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2_u64))
|
||||
.saturating_add(T::DbWeight::get().writes(2_u64))
|
||||
}
|
||||
/// Storage: `Scheduler::Retries` (r:1 w:2)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 512]`.
|
||||
fn schedule_retry(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `159`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 14_155_000 picoseconds.
|
||||
Weight::from_parts(16_447_031, 110487)
|
||||
// Standard Error: 233
|
||||
.saturating_add(Weight::from_parts(8_424, 0).saturating_mul(s.into()))
|
||||
.saturating_add(T::DbWeight::get().reads(2_u64))
|
||||
.saturating_add(T::DbWeight::get().writes(4_u64))
|
||||
}
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn set_retry() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `81 + s * (177 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 8_130_000 picoseconds.
|
||||
Weight::from_parts(9_047_554, 110487)
|
||||
.saturating_add(T::DbWeight::get().reads(1_u64))
|
||||
.saturating_add(T::DbWeight::get().writes(1_u64))
|
||||
}
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn set_retry_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `647 + s * (178 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 10_838_000 picoseconds.
|
||||
Weight::from_parts(12_804_076, 110487)
|
||||
.saturating_add(T::DbWeight::get().reads(2_u64))
|
||||
.saturating_add(T::DbWeight::get().writes(1_u64))
|
||||
}
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn cancel_retry() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `81 + s * (177 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 8_130_000 picoseconds.
|
||||
Weight::from_parts(9_047_554, 110487)
|
||||
.saturating_add(T::DbWeight::get().reads(1_u64))
|
||||
.saturating_add(T::DbWeight::get().writes(1_u64))
|
||||
}
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn cancel_retry_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `647 + s * (178 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 10_838_000 picoseconds.
|
||||
Weight::from_parts(12_804_076, 110487)
|
||||
.saturating_add(T::DbWeight::get().reads(2_u64))
|
||||
.saturating_add(T::DbWeight::get().writes(1_u64))
|
||||
}
|
||||
}
|
||||
|
||||
// For backwards compatibility and tests
|
||||
// For backwards compatibility and tests.
|
||||
impl WeightInfo for () {
|
||||
/// Storage: Scheduler IncompleteSince (r:1 w:1)
|
||||
/// Proof: Scheduler IncompleteSince (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::IncompleteSince` (r:1 w:1)
|
||||
/// Proof: `Scheduler::IncompleteSince` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
|
||||
fn service_agendas_base() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `31`
|
||||
// Estimated: `1489`
|
||||
// Minimum execution time: 3_991_000 picoseconds.
|
||||
Weight::from_parts(4_174_000, 1489)
|
||||
// Minimum execution time: 3_040_000 picoseconds.
|
||||
Weight::from_parts(3_202_000, 1489)
|
||||
.saturating_add(RocksDbWeight::get().reads(1_u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(1_u64))
|
||||
}
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(107022), added: 109497, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[0, 512]`.
|
||||
fn service_agenda_base(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `81 + s * (177 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 3_581_000 picoseconds.
|
||||
Weight::from_parts(7_413_174, 110487)
|
||||
// Standard Error: 971
|
||||
.saturating_add(Weight::from_parts(348_077, 0).saturating_mul(s.into()))
|
||||
// Minimum execution time: 3_462_000 picoseconds.
|
||||
Weight::from_parts(6_262_125, 110487)
|
||||
// Standard Error: 536
|
||||
.saturating_add(Weight::from_parts(332_570, 0).saturating_mul(s.into()))
|
||||
.saturating_add(RocksDbWeight::get().reads(1_u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(1_u64))
|
||||
}
|
||||
@@ -244,117 +327,198 @@ impl WeightInfo for () {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 5_250_000 picoseconds.
|
||||
Weight::from_parts(5_549_000, 0)
|
||||
// Minimum execution time: 3_425_000 picoseconds.
|
||||
Weight::from_parts(3_680_000, 0)
|
||||
}
|
||||
/// Storage: Preimage PreimageFor (r:1 w:1)
|
||||
/// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured)
|
||||
/// Storage: Preimage StatusFor (r:1 w:1)
|
||||
/// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen)
|
||||
/// Storage: `Preimage::PreimageFor` (r:1 w:1)
|
||||
/// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`)
|
||||
/// Storage: `Preimage::StatusFor` (r:1 w:0)
|
||||
/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
|
||||
/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[128, 4194304]`.
|
||||
fn service_task_fetched(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `179 + s * (1 ±0)`
|
||||
// Estimated: `3644 + s * (1 ±0)`
|
||||
// Minimum execution time: 20_089_000 picoseconds.
|
||||
Weight::from_parts(20_376_000, 3644)
|
||||
// Standard Error: 3
|
||||
.saturating_add(Weight::from_parts(1_170, 0).saturating_mul(s.into()))
|
||||
.saturating_add(RocksDbWeight::get().reads(2_u64))
|
||||
// Measured: `246 + s * (1 ±0)`
|
||||
// Estimated: `3711 + s * (1 ±0)`
|
||||
// Minimum execution time: 17_564_000 picoseconds.
|
||||
Weight::from_parts(17_887_000, 3711)
|
||||
// Standard Error: 1
|
||||
.saturating_add(Weight::from_parts(1_253, 0).saturating_mul(s.into()))
|
||||
.saturating_add(RocksDbWeight::get().reads(3_u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(2_u64))
|
||||
.saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into()))
|
||||
}
|
||||
/// Storage: Scheduler Lookup (r:0 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
fn service_task_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 6_998_000 picoseconds.
|
||||
Weight::from_parts(7_303_000, 0)
|
||||
// Minimum execution time: 4_934_000 picoseconds.
|
||||
Weight::from_parts(5_275_000, 0)
|
||||
.saturating_add(RocksDbWeight::get().writes(1_u64))
|
||||
}
|
||||
fn service_task_periodic() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 5_078_000 picoseconds.
|
||||
Weight::from_parts(5_315_000, 0)
|
||||
// Minimum execution time: 3_348_000 picoseconds.
|
||||
Weight::from_parts(3_561_000, 0)
|
||||
}
|
||||
/// Storage: `SafeMode::EnteredUntil` (r:1 w:0)
|
||||
/// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
|
||||
/// Storage: `TxPause::PausedCalls` (r:1 w:0)
|
||||
/// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`)
|
||||
fn execute_dispatch_signed() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 2_228_000 picoseconds.
|
||||
Weight::from_parts(2_352_000, 0)
|
||||
// Measured: `145`
|
||||
// Estimated: `3997`
|
||||
// Minimum execution time: 6_395_000 picoseconds.
|
||||
Weight::from_parts(6_642_000, 3997)
|
||||
.saturating_add(RocksDbWeight::get().reads(2_u64))
|
||||
}
|
||||
fn execute_dispatch_unsigned() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 2_226_000 picoseconds.
|
||||
Weight::from_parts(2_371_000, 0)
|
||||
// Minimum execution time: 2_167_000 picoseconds.
|
||||
Weight::from_parts(2_266_000, 0)
|
||||
}
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(107022), added: 109497, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[0, 511]`.
|
||||
fn schedule(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `81 + s * (177 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 12_683_000 picoseconds.
|
||||
Weight::from_parts(16_951_846, 110487)
|
||||
// Standard Error: 1_046
|
||||
.saturating_add(Weight::from_parts(380_842, 0).saturating_mul(s.into()))
|
||||
// Minimum execution time: 10_009_000 picoseconds.
|
||||
Weight::from_parts(13_565_985, 110487)
|
||||
// Standard Error: 575
|
||||
.saturating_add(Weight::from_parts(354_760, 0).saturating_mul(s.into()))
|
||||
.saturating_add(RocksDbWeight::get().reads(1_u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(1_u64))
|
||||
}
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(107022), added: 109497, mode: MaxEncodedLen)
|
||||
/// Storage: Scheduler Lookup (r:0 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 512]`.
|
||||
fn cancel(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `81 + s * (177 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 16_201_000 picoseconds.
|
||||
Weight::from_parts(18_259_422, 110487)
|
||||
// Standard Error: 1_344
|
||||
.saturating_add(Weight::from_parts(545_863, 0).saturating_mul(s.into()))
|
||||
// Minimum execution time: 14_048_000 picoseconds.
|
||||
Weight::from_parts(15_141_696, 110487)
|
||||
// Standard Error: 1_082
|
||||
.saturating_add(Weight::from_parts(533_390, 0).saturating_mul(s.into()))
|
||||
.saturating_add(RocksDbWeight::get().reads(1_u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(2_u64))
|
||||
}
|
||||
/// Storage: Scheduler Lookup (r:1 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(107022), added: 109497, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[0, 511]`.
|
||||
fn schedule_named(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `596 + s * (178 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 16_180_000 picoseconds.
|
||||
Weight::from_parts(25_128_925, 110487)
|
||||
// Standard Error: 1_118
|
||||
.saturating_add(Weight::from_parts(375_631, 0).saturating_mul(s.into()))
|
||||
// Minimum execution time: 12_902_000 picoseconds.
|
||||
Weight::from_parts(18_957_156, 110487)
|
||||
// Standard Error: 792
|
||||
.saturating_add(Weight::from_parts(361_909, 0).saturating_mul(s.into()))
|
||||
.saturating_add(RocksDbWeight::get().reads(2_u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(2_u64))
|
||||
}
|
||||
/// Storage: Scheduler Lookup (r:1 w:1)
|
||||
/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
|
||||
/// Storage: Scheduler Agenda (r:1 w:1)
|
||||
/// Proof: Scheduler Agenda (max_values: None, max_size: Some(107022), added: 109497, mode: MaxEncodedLen)
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 512]`.
|
||||
fn cancel_named(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `709 + s * (177 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 18_244_000 picoseconds.
|
||||
Weight::from_parts(21_439_366, 110487)
|
||||
// Standard Error: 1_084
|
||||
.saturating_add(Weight::from_parts(557_691, 0).saturating_mul(s.into()))
|
||||
// Minimum execution time: 15_933_000 picoseconds.
|
||||
Weight::from_parts(18_091_415, 110487)
|
||||
// Standard Error: 779
|
||||
.saturating_add(Weight::from_parts(534_402, 0).saturating_mul(s.into()))
|
||||
.saturating_add(RocksDbWeight::get().reads(2_u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(2_u64))
|
||||
}
|
||||
/// Storage: `Scheduler::Retries` (r:1 w:2)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:1)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Lookup` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// The range of component `s` is `[1, 512]`.
|
||||
fn schedule_retry(s: u32, ) -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `159`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 14_155_000 picoseconds.
|
||||
Weight::from_parts(16_447_031, 110487)
|
||||
// Standard Error: 233
|
||||
.saturating_add(Weight::from_parts(8_424, 0).saturating_mul(s.into()))
|
||||
.saturating_add(RocksDbWeight::get().reads(2_u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(4_u64))
|
||||
}
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn set_retry() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `81 + s * (177 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 8_130_000 picoseconds.
|
||||
Weight::from_parts(9_047_554, 110487)
|
||||
.saturating_add(RocksDbWeight::get().reads(1_u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(1_u64))
|
||||
}
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn set_retry_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `647 + s * (178 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 10_838_000 picoseconds.
|
||||
Weight::from_parts(12_804_076, 110487)
|
||||
.saturating_add(RocksDbWeight::get().reads(2_u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(1_u64))
|
||||
}
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn cancel_retry() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `81 + s * (177 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 8_130_000 picoseconds.
|
||||
Weight::from_parts(9_047_554, 110487)
|
||||
.saturating_add(RocksDbWeight::get().reads(1_u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(1_u64))
|
||||
}
|
||||
/// Storage: `Scheduler::Lookup` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Agenda` (r:1 w:0)
|
||||
/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`)
|
||||
/// Storage: `Scheduler::Retries` (r:0 w:1)
|
||||
/// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`)
|
||||
fn cancel_retry_named() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `647 + s * (178 ±0)`
|
||||
// Estimated: `110487`
|
||||
// Minimum execution time: 10_838_000 picoseconds.
|
||||
Weight::from_parts(12_804_076, 110487)
|
||||
.saturating_add(RocksDbWeight::get().reads(2_u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(1_u64))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user