From fcaf3e83e716edd9d13406088b2899f24f421e89 Mon Sep 17 00:00:00 2001 From: Longarithm Date: Tue, 8 Oct 2024 23:49:00 +0400 Subject: [PATCH] suggestions --- chain/chain/src/chain.rs | 5 +++-- core/primitives/src/epoch_manager.rs | 9 +++++++++ integration-tests/src/test_loop/builder.rs | 17 +++++------------ .../src/test_loop/tests/resharding_v3.rs | 11 ++++++++--- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/chain/chain/src/chain.rs b/chain/chain/src/chain.rs index 05db645064c..aa6e24b9581 100644 --- a/chain/chain/src/chain.rs +++ b/chain/chain/src/chain.rs @@ -2348,8 +2348,9 @@ impl Chain { let result = epoch_manager.will_shard_layout_change(parent_hash); let will_shard_layout_change = match result { Ok(_will_shard_layout_change) => { - // Before state sync is fixed, we don't catch up split shards. - // Assume that all needed shards are tracked already. + // TODO(#11881): before state sync is fixed, we don't catch up + // split shards. Assume that all needed shards are tracked + // already. // will_shard_layout_change, false } diff --git a/core/primitives/src/epoch_manager.rs b/core/primitives/src/epoch_manager.rs index abf74b10fa3..5beedb78b13 100644 --- a/core/primitives/src/epoch_manager.rs +++ b/core/primitives/src/epoch_manager.rs @@ -55,6 +55,15 @@ pub struct EpochConfig { pub validator_selection_config: ValidatorSelectionConfig, } +impl EpochConfig { + /// Total number of validator seats in the epoch since protocol version 69. + pub fn num_validators(&self) -> NumSeats { + self.num_block_producer_seats + .max(self.validator_selection_config.num_chunk_producer_seats) + .max(self.validator_selection_config.num_chunk_validator_seats) + } +} + #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct ShardConfig { pub num_block_producer_seats_per_shard: Vec, diff --git a/integration-tests/src/test_loop/builder.rs b/integration-tests/src/test_loop/builder.rs index b5ba31004d5..9c9903b1e75 100644 --- a/integration-tests/src/test_loop/builder.rs +++ b/integration-tests/src/test_loop/builder.rs @@ -278,21 +278,14 @@ impl TestLoopBuilder { // Configure tracked shards. // * single shard tracking for validators // * all shard tracking for non-validators (RPCs and archival) - let not_a_validator = { + let is_validator = { let epoch_config = epoch_config_store.get_config(genesis.config.protocol_version); - let num_block_producer = epoch_config.num_block_producer_seats; - let num_chunk_producer = - epoch_config.validator_selection_config.num_chunk_producer_seats; - let num_chunk_validator = - epoch_config.validator_selection_config.num_chunk_validator_seats; - let validator_num = - num_block_producer.max(num_chunk_producer).max(num_chunk_validator) as usize; - idx >= validator_num + idx < epoch_config.num_validators() as usize }; - if self.track_all_shards || not_a_validator { - client_config.tracked_shards = vec![666]; - } else { + if is_validator && !self.track_all_shards { client_config.tracked_shards = Vec::new(); + } else { + client_config.tracked_shards = vec![666]; } if let Some(config_modifier) = &self.config_modifier { diff --git a/integration-tests/src/test_loop/tests/resharding_v3.rs b/integration-tests/src/test_loop/tests/resharding_v3.rs index 5ea60b1fd6b..0dca672f4f2 100644 --- a/integration-tests/src/test_loop/tests/resharding_v3.rs +++ b/integration-tests/src/test_loop/tests/resharding_v3.rs @@ -20,8 +20,10 @@ use crate::test_loop::utils::ONE_NEAR; /// which is incorrect!!! /// - Nodes must not track all shards. State sync must succeed. /// - Set up chunk validator-only nodes. State witness must pass validation. -/// - Tx load must be consistent. Txs and receipts must cross resharding -/// boundary. All txs must succeed. +/// - Consistent tx load. All txs must succeed. +/// - Delayed receipts, congestion control computation. +/// - Cross-shard receipts of all kinds, crossing resharding boundary. +/// - Shard layout v2 -> v2 transition. /// - Shard layout can be taken from mainnet. #[test] fn test_resharding_v3() { @@ -36,6 +38,7 @@ fn test_resharding_v3() { let epoch_length = 6; let accounts = (0..8).map(|i| format!("account{}", i).parse().unwrap()).collect::>(); + // #12195 prevents number of BPs bigger than `epoch_length`. let clients = vec![accounts[0].clone(), accounts[3].clone(), accounts[6].clone()]; let block_and_chunk_producers = clients.iter().map(|account: &AccountId| account.as_str()).collect_vec(); @@ -47,6 +50,8 @@ fn test_resharding_v3() { base_epoch_config_store.get_config(base_protocol_version).as_ref().clone(); base_epoch_config.validator_selection_config.shuffle_shard_assignment_for_chunk_producers = false; + // TODO(#11881): enable kickouts when blocks and chunks are produced + // properly. base_epoch_config.block_producer_kickout_threshold = 0; base_epoch_config.chunk_producer_kickout_threshold = 0; base_epoch_config.chunk_validator_only_kickout_threshold = 0; @@ -59,7 +64,7 @@ fn test_resharding_v3() { let last_shard_id = shard_ids.pop().unwrap(); let mut shards_split_map: BTreeMap> = shard_ids.iter().map(|shard_id| (*shard_id, vec![*shard_id])).collect(); - // Keep this way until non-contiguous shard ids are supported. + // TODO(#11881): keep this way until non-contiguous shard ids are supported. // let new_shards = vec![max_shard_id + 1, max_shard_id + 2]; let new_shards = vec![max_shard_id, max_shard_id + 1]; shard_ids.extend(new_shards.clone());