From 74bca46fc2d1a955ff1516be173a454a480f81bd Mon Sep 17 00:00:00 2001 From: Emilia Hane Date: Fri, 6 Jan 2023 11:26:41 +0100 Subject: [PATCH] Fix bug of early termination of batch send --- beacon_node/beacon_chain/src/beacon_chain.rs | 6 ++--- .../beacon_processor/worker/rpc_methods.rs | 27 +++++++++---------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/beacon_node/beacon_chain/src/beacon_chain.rs b/beacon_node/beacon_chain/src/beacon_chain.rs index 087f7c22e..f4e5781d1 100644 --- a/beacon_node/beacon_chain/src/beacon_chain.rs +++ b/beacon_node/beacon_chain/src/beacon_chain.rs @@ -972,7 +972,7 @@ impl BeaconChain { } Ok(( self.get_block(block_root).await?.map(Arc::new), - self.get_blobs(block_root).await?.map(Arc::new), + self.get_blobs(block_root).ok().flatten().map(Arc::new), )) } @@ -1048,7 +1048,7 @@ impl BeaconChain { /// ## Errors /// /// May return a database error. - pub async fn get_blobs( + pub fn get_blobs( &self, block_root: &Hash256, ) -> Result>, Error> { @@ -1060,7 +1060,7 @@ impl BeaconChain { if expected_kzg_commitments.len() > 0 { Err(Error::DBInconsistent(format!( - "expected kzg_commitments but no blobs stored for block_root {}", + "Expected kzg commitments but no blobs stored for block root {}", block_root ))) } else { diff --git a/beacon_node/network/src/beacon_processor/worker/rpc_methods.rs b/beacon_node/network/src/beacon_processor/worker/rpc_methods.rs index 892d2671a..f0c5addbe 100644 --- a/beacon_node/network/src/beacon_processor/worker/rpc_methods.rs +++ b/beacon_node/network/src/beacon_processor/worker/rpc_methods.rs @@ -658,25 +658,22 @@ impl Worker { let send_response = true; for root in block_roots { - match self.chain.store.get_blobs(&root) { - Ok(Some(blob)) => { - let response_data = if blob.blobs.len() > 0 { - Some(Arc::new(blob)) - } else { - None - }; - blobs_sent += 1; - self.send_network_message(NetworkMessage::SendResponse { - peer_id, - response: Response::BlobsByRange(response_data), - id: request_id, - }); + match self.chain.get_blobs(&root) { + Ok(Some(blobs)) => { + if blobs.blobs.len() > 0 { + blobs_sent += 1; + self.send_network_message(NetworkMessage::SendResponse { + peer_id, + response: Response::BlobsByRange(Some(Arc::new(blobs))), + id: request_id, + }); + } } Ok(None) => { error!( self.log, - "Blob in the chain is not in the store"; - "request_root" => ?root + "No blobs or block in the store for block root"; + "block_root" => ?root ); break; }