configuration: validation_upgrade_delay consistency (#4583)

Closes #4248

Impose additional constraint on configuration consistency:
`validation_upgrade_delay` should not be less than or equal to 1.

See the original issue for more details.
This commit is contained in:
Sergei Shulepov
2021-12-28 16:46:51 +01:00
committed by GitHub
parent a17162afa8
commit b49291dc76
2 changed files with 19 additions and 3 deletions
@@ -219,7 +219,7 @@ impl<BlockNumber: Default + From<u32>> Default for HostConfiguration<BlockNumber
thread_availability_period: 1u32.into(), thread_availability_period: 1u32.into(),
no_show_slots: 1u32.into(), no_show_slots: 1u32.into(),
validation_upgrade_frequency: Default::default(), validation_upgrade_frequency: Default::default(),
validation_upgrade_delay: Default::default(), validation_upgrade_delay: 2u32.into(),
code_retention_period: Default::default(), code_retention_period: Default::default(),
max_code_size: Default::default(), max_code_size: Default::default(),
max_pov_size: Default::default(), max_pov_size: Default::default(),
@@ -288,9 +288,14 @@ pub enum InconsistentError<BlockNumber> {
minimum_validation_upgrade_delay: BlockNumber, minimum_validation_upgrade_delay: BlockNumber,
thread_availability_period: BlockNumber, thread_availability_period: BlockNumber,
}, },
/// `validation_upgrade_delay` is less than or equal 1.
ValidationUpgradeDelayIsTooLow { validation_upgrade_delay: BlockNumber },
} }
impl<BlockNumber: Zero + PartialOrd + sp_std::fmt::Debug + Clone> HostConfiguration<BlockNumber> { impl<BlockNumber> HostConfiguration<BlockNumber>
where
BlockNumber: Zero + PartialOrd + sp_std::fmt::Debug + Clone + From<u32>,
{
/// Checks that this instance is consistent with the requirements on each individual member. /// Checks that this instance is consistent with the requirements on each individual member.
/// ///
/// # Errors /// # Errors
@@ -341,6 +346,12 @@ impl<BlockNumber: Zero + PartialOrd + sp_std::fmt::Debug + Clone> HostConfigurat
}) })
} }
if self.validation_upgrade_delay <= 1.into() {
return Err(ValidationUpgradeDelayIsTooLow {
validation_upgrade_delay: self.validation_upgrade_delay.clone(),
})
}
Ok(()) Ok(())
} }
@@ -1499,6 +1510,11 @@ mod tests {
Configuration::set_minimum_validation_upgrade_delay(Origin::root(), 9), Configuration::set_minimum_validation_upgrade_delay(Origin::root(), 9),
Error::<Test>::InvalidNewValue Error::<Test>::InvalidNewValue
); );
assert_err!(
Configuration::set_validation_upgrade_delay(Origin::root(), 0),
Error::<Test>::InvalidNewValue
);
}); });
} }
@@ -1307,7 +1307,7 @@ fn candidate_checks() {
{ {
let cfg = Configuration::config(); let cfg = Configuration::config();
let expected_at = 10 + cfg.validation_upgrade_delay; let expected_at = 10 + cfg.validation_upgrade_delay;
assert_eq!(expected_at, 10); assert_eq!(expected_at, 12);
Paras::schedule_code_upgrade(chain_a, vec![1, 2, 3, 4].into(), expected_at, &cfg); Paras::schedule_code_upgrade(chain_a, vec![1, 2, 3, 4].into(), expected_at, &cfg);
} }