Fix bug of early termination of batch send

This commit is contained in:
Emilia Hane 2023-01-06 11:26:41 +01:00
parent caad492d48
commit 74bca46fc2
No known key found for this signature in database
GPG Key ID: E73394F9C09206FA
2 changed files with 15 additions and 18 deletions

View File

@ -972,7 +972,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
}
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<T: BeaconChainTypes> BeaconChain<T> {
/// ## Errors
///
/// May return a database error.
pub async fn get_blobs(
pub fn get_blobs(
&self,
block_root: &Hash256,
) -> Result<Option<BlobsSidecar<T::EthSpec>>, Error> {
@ -1060,7 +1060,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
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 {

View File

@ -658,25 +658,22 @@ impl<T: BeaconChainTypes> Worker<T> {
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;
}