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:
georgepisaltu
2024-02-16 12:59:10 +02:00
committed by GitHub
parent ad68a05079
commit 9346019dad
9 changed files with 2292 additions and 377 deletions
+110 -1
View File
@@ -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);
}
+254 -13
View File
@@ -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>
+40
View File
@@ -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
+311 -147
View File
@@ -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))
}
}