SoM: Gate cluster average skip rate behind a flag

This commit is contained in:
Trent Nelson 2021-03-03 15:52:52 -07:00 committed by Michael Vines
parent e5ebe61687
commit bbf7ded997
1 changed files with 18 additions and 3 deletions

View File

@ -222,6 +222,9 @@ struct Config {
/// destaking those in the list and warning any others /// destaking those in the list and warning any others
infrastructure_concentration_affects: InfrastructureConcentrationAffects, infrastructure_concentration_affects: InfrastructureConcentrationAffects,
/// Use a cluster-average skip rate floor for block-production quality calculations
use_cluster_average_skip_rate: bool,
bad_cluster_average_skip_rate: usize, bad_cluster_average_skip_rate: usize,
} }
@ -247,6 +250,7 @@ impl Config {
confirmed_block_cache_path: default_confirmed_block_cache_path(), confirmed_block_cache_path: default_confirmed_block_cache_path(),
max_infrastructure_concentration: 100.0, max_infrastructure_concentration: 100.0,
infrastructure_concentration_affects: InfrastructureConcentrationAffects::WarnAll, infrastructure_concentration_affects: InfrastructureConcentrationAffects::WarnAll,
use_cluster_average_skip_rate: false,
bad_cluster_average_skip_rate: 50, bad_cluster_average_skip_rate: 50,
} }
} }
@ -439,6 +443,11 @@ fn get_config() -> Config {
destaking those in the list and warning \ destaking those in the list and warning \
any others") any others")
) )
.arg(
Arg::with_name("use_cluster_average_skip_rate")
.long("use-cluster-average-skip-rate")
.help("Use a cluster-average skip rate floor for block-production quality calculations")
)
.get_matches(); .get_matches();
let config = if let Some(config_file) = matches.value_of("config_file") { let config = if let Some(config_file) = matches.value_of("config_file") {
@ -519,6 +528,7 @@ fn get_config() -> Config {
InfrastructureConcentrationAffects InfrastructureConcentrationAffects
) )
.unwrap(); .unwrap();
let use_cluster_average_skip_rate = matches.is_present("use_cluster_average_skip_rate");
let config = Config { let config = Config {
json_rpc_url, json_rpc_url,
@ -539,6 +549,7 @@ fn get_config() -> Config {
confirmed_block_cache_path, confirmed_block_cache_path,
max_infrastructure_concentration, max_infrastructure_concentration,
infrastructure_concentration_affects, infrastructure_concentration_affects,
use_cluster_average_skip_rate,
bad_cluster_average_skip_rate, bad_cluster_average_skip_rate,
}; };
@ -652,9 +663,12 @@ fn classify_producers(
let cluster_average_rate = 100 - total_blocks * 100 / total_slots; let cluster_average_rate = 100 - total_blocks * 100 / total_slots;
for (validator_identity, (blocks, slots)) in blocks_and_slots { for (validator_identity, (blocks, slots)) in blocks_and_slots {
let skip_rate: usize = 100 - (blocks * 100 / slots); let skip_rate: usize = 100 - (blocks * 100 / slots);
if skip_rate.saturating_sub(config.quality_block_producer_percentage) let skip_rate_floor = if config.use_cluster_average_skip_rate {
>= cluster_average_rate cluster_average_rate
{ } else {
0
};
if skip_rate.saturating_sub(config.quality_block_producer_percentage) >= skip_rate_floor {
poor_block_producers.insert(validator_identity); poor_block_producers.insert(validator_identity);
} else { } else {
quality_block_producers.insert(validator_identity); quality_block_producers.insert(validator_identity);
@ -1628,6 +1642,7 @@ mod test {
solana_logger::setup(); solana_logger::setup();
let config = Config { let config = Config {
quality_block_producer_percentage: 10, quality_block_producer_percentage: 10,
use_cluster_average_skip_rate: true,
..Config::default_for_test() ..Config::default_for_test()
}; };