diff --git a/beacon_node/network/src/sync/block_lookups/mod.rs b/beacon_node/network/src/sync/block_lookups/mod.rs index 91e88c35cf..6b8ca30489 100644 --- a/beacon_node/network/src/sync/block_lookups/mod.rs +++ b/beacon_node/network/src/sync/block_lookups/mod.rs @@ -1292,7 +1292,7 @@ impl BlockLookups { cx: &mut SyncNetworkContext, ) { let response = parent_lookup.request_parent_block(cx); - self.handle_response(parent_lookup, cx, response); + self.handle_response(parent_lookup, cx, response, ResponseType::Block); } fn request_parent_blob( @@ -1301,7 +1301,7 @@ impl BlockLookups { cx: &mut SyncNetworkContext, ) { let response = parent_lookup.request_parent_blobs(cx); - self.handle_response(parent_lookup, cx, response); + self.handle_response(parent_lookup, cx, response, ResponseType::Blob); } fn request_parent_block_and_blobs( @@ -1309,18 +1309,24 @@ impl BlockLookups { mut parent_lookup: ParentLookup, cx: &mut SyncNetworkContext, ) { - let response = parent_lookup - .request_parent_block(cx) - .and_then(|_| parent_lookup.request_parent_blobs(cx)); - self.handle_response(parent_lookup, cx, response); + let block_res = parent_lookup.request_parent_block(cx); + match block_res { + Ok(()) => { + let blob_res = parent_lookup.request_parent_blobs(cx); + self.handle_response(parent_lookup, cx, blob_res, ResponseType::Blob) + } + Err(e) => { + self.handle_response(parent_lookup, cx, Err(e), ResponseType::Block); + } + } } - //TODO(sean) how should peer scoring work with failures in this method? fn handle_response( &mut self, - mut parent_lookup: ParentLookup, + parent_lookup: ParentLookup, cx: &mut SyncNetworkContext, result: Result<(), parent_lookup::RequestError>, + response_type: ResponseType, ) { match result { Err(e) => { @@ -1332,7 +1338,7 @@ impl BlockLookups { parent_lookup::RequestError::ChainTooLong => { self.failed_chains.insert(parent_lookup.chain_hash()); // This indicates faulty peers. - for &peer_id in parent_lookup.used_block_peers() { + for &peer_id in parent_lookup.used_peers(response_type) { cx.report_peer(peer_id, PeerAction::LowToleranceError, e.as_static()) } } @@ -1345,7 +1351,7 @@ impl BlockLookups { self.failed_chains.insert(parent_lookup.chain_hash()); } // This indicates faulty peers. - for &peer_id in parent_lookup.used_block_peers() { + for &peer_id in parent_lookup.used_peers(response_type) { cx.report_peer(peer_id, PeerAction::LowToleranceError, e.as_static()) } } diff --git a/beacon_node/network/src/sync/block_lookups/parent_lookup.rs b/beacon_node/network/src/sync/block_lookups/parent_lookup.rs index 6cd1fedc40..9ba8364424 100644 --- a/beacon_node/network/src/sync/block_lookups/parent_lookup.rs +++ b/beacon_node/network/src/sync/block_lookups/parent_lookup.rs @@ -1,5 +1,5 @@ use super::single_block_lookup::{LookupRequestError, LookupVerifyError, SingleBlockLookup}; -use super::{DownloadedBlocks, PeerShouldHave}; +use super::{DownloadedBlocks, PeerShouldHave, ResponseType}; use crate::sync::block_lookups::{single_block_lookup, RootBlockTuple}; use crate::sync::{ manager::{Id, SLOT_IMPORT_TOLERANCE}, @@ -358,12 +358,19 @@ impl ParentLookup { .add_peer_if_useful(block_root, peer_id, peer_usefulness) } - //TODO(sean) fix this up - pub fn used_block_peers(&self) -> impl Iterator + '_ { - self.current_parent_request - .block_request_state - .used_peers - .iter() + pub fn used_peers(&self, response_type: ResponseType) -> impl Iterator + '_ { + match response_type { + ResponseType::Block => self + .current_parent_request + .block_request_state + .used_peers + .iter(), + ResponseType::Blob => self + .current_parent_request + .blob_request_state + .used_peers + .iter(), + } } }