From b843259890ee0edf316063fb95be38b8f95c1e72 Mon Sep 17 00:00:00 2001 From: Andre da Silva <2917611+ndr-ds@users.noreply.github.com> Date: Thu, 6 Feb 2025 15:42:24 -0300 Subject: [PATCH] make_benchmark_block_proposals now returns BlockProposals (#3264) ## Motivation This `RpcMessage` type is needed only when calling `mass_broadcast`, and it makes the code a bit more awkward because you have to check if it's a block proposal, when it'll always be ## Proposal Return the actual `BlockProposal`s instead, and only convert them when needed. ## Test Plan CI + ran locally ## Release Plan - Nothing to do / These changes follow the usual release cycle. --- linera-client/src/client_context.rs | 4 ++-- linera-service/src/linera/main.rs | 24 ++++++++++++++++-------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/linera-client/src/client_context.rs b/linera-client/src/client_context.rs index efb94927c48..e946ce602c3 100644 --- a/linera-client/src/client_context.rs +++ b/linera-client/src/client_context.rs @@ -843,7 +843,7 @@ where key_pairs: &HashMap, transactions_per_block: usize, fungible_application_id: Option, - ) -> Vec { + ) -> Vec { let mut proposals = Vec::new(); let mut previous_chain_id = *key_pairs .iter() @@ -887,7 +887,7 @@ where block.clone(), key_pair, ); - proposals.push(RpcMessage::BlockProposal(Box::new(proposal))); + proposals.push(proposal); previous_chain_id = chain.chain_id; } proposals diff --git a/linera-service/src/linera/main.rs b/linera-service/src/linera/main.rs index b76c606a992..a202e83e284 100644 --- a/linera-service/src/linera/main.rs +++ b/linera-service/src/linera/main.rs @@ -809,16 +809,24 @@ impl Runnable for Job { let num_proposal = proposals.len(); let mut values = HashMap::new(); - for rpc_msg in &proposals { - if let RpcMessage::BlockProposal(proposal) = rpc_msg { - let executed_block = context - .stage_block_execution(proposal.content.block.clone(), None) - .await?; - let value = Hashed::new(ConfirmedBlock::new(executed_block)); - values.insert(value.hash(), value); - } + let start = Instant::now(); + for proposal in &proposals { + let executed_block = context + .stage_block_execution(proposal.content.block.clone(), None) + .await?; + let value = Hashed::new(ConfirmedBlock::new(executed_block)); + values.insert(value.hash(), value); } + info!( + "Staged {} block proposals in {} ms", + num_proposal, + start.elapsed().as_millis() + ); + let proposals = proposals + .into_iter() + .map(|proposal| RpcMessage::BlockProposal(Box::new(proposal))) + .collect::>(); let responses = context.mass_broadcast("block proposals", proposals).await; let votes = responses .into_iter()