mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-08 09:16:00 +00:00
retry on invalid block/blob
This commit is contained in:
@@ -909,11 +909,12 @@ impl<T: BeaconChainTypes> BlockLookups<T> {
|
|||||||
PeerAction::MidToleranceError,
|
PeerAction::MidToleranceError,
|
||||||
"single_block_failure",
|
"single_block_failure",
|
||||||
);
|
);
|
||||||
if let Some(blob_id_ref) = blob_id_ref {
|
if matches!(response_type, ResponseType::Blob)
|
||||||
// Try it again if possible.
|
|| (!request_ref.blob_request_state.component_processed
|
||||||
if !request_ref.awaiting_download(ResponseType::Blob) {
|
&& !request_ref.downloading(ResponseType::Blob))
|
||||||
|
{
|
||||||
retry_request_after_failure(
|
retry_request_after_failure(
|
||||||
blob_id_ref,
|
blob_id_ref.as_mut().unwrap(),
|
||||||
request_ref,
|
request_ref,
|
||||||
ResponseType::Blob,
|
ResponseType::Blob,
|
||||||
peer_id.as_peer_id(),
|
peer_id.as_peer_id(),
|
||||||
@@ -921,20 +922,20 @@ impl<T: BeaconChainTypes> BlockLookups<T> {
|
|||||||
&self.log,
|
&self.log,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(block_id_ref) = block_id_ref {
|
if matches!(response_type, ResponseType::Block)
|
||||||
if !request_ref.awaiting_download(ResponseType::Block) {
|
|| (!request_ref.block_request_state.component_processed
|
||||||
|
&& !request_ref.downloading(ResponseType::Block))
|
||||||
|
{
|
||||||
// Try it again if possible.
|
// Try it again if possible.
|
||||||
retry_request_after_failure(
|
retry_request_after_failure(
|
||||||
block_id_ref,
|
block_id_ref.as_mut().unwrap(),
|
||||||
request_ref,
|
request_ref,
|
||||||
ResponseType::Block,
|
ResponseType::Block,
|
||||||
peer_id.as_peer_id(),
|
peer_id.as_peer_id(),
|
||||||
cx,
|
cx,
|
||||||
&self.log,
|
&self.log,
|
||||||
);
|
);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ShouldRemoveLookup::False
|
ShouldRemoveLookup::False
|
||||||
}
|
}
|
||||||
@@ -1502,7 +1503,7 @@ fn should_remove_missing_components<T: BeaconChainTypes>(
|
|||||||
}
|
}
|
||||||
request_ref.remove_peer_if_useless(blob_peer.as_peer_id(), ResponseType::Blob);
|
request_ref.remove_peer_if_useless(blob_peer.as_peer_id(), ResponseType::Blob);
|
||||||
if let Some(blob_id_ref) = blob_id_ref {
|
if let Some(blob_id_ref) = blob_id_ref {
|
||||||
if !request_ref.awaiting_download(ResponseType::Blob) {
|
if !request_ref.downloading(ResponseType::Blob) {
|
||||||
// Try it again if possible.
|
// Try it again if possible.
|
||||||
return retry_request_after_failure(
|
return retry_request_after_failure(
|
||||||
blob_id_ref,
|
blob_id_ref,
|
||||||
|
|||||||
@@ -48,6 +48,15 @@ impl<const MAX_ATTEMPTS: u8, T: BeaconChainTypes> SingleBlockLookup<MAX_ATTEMPTS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn downloading(&mut self, response_type: ResponseType) -> bool {
|
||||||
|
match response_type {
|
||||||
|
ResponseType::Block => {
|
||||||
|
matches!(self.block_request_state.state, State::Downloading {..})
|
||||||
|
}
|
||||||
|
ResponseType::Blob => matches!(self.blob_request_state.state, State::Downloading { .. }),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn remove_peer_if_useless(&mut self, peer_id: &PeerId, response_type: ResponseType) {
|
pub(crate) fn remove_peer_if_useless(&mut self, peer_id: &PeerId, response_type: ResponseType) {
|
||||||
match response_type {
|
match response_type {
|
||||||
ResponseType::Block => self.block_request_state.remove_peer_if_useless(peer_id),
|
ResponseType::Block => self.block_request_state.remove_peer_if_useless(peer_id),
|
||||||
|
|||||||
@@ -1704,8 +1704,8 @@ mod deneb_only {
|
|||||||
.block_response_triggering_process()
|
.block_response_triggering_process()
|
||||||
.invalid_block_processed()
|
.invalid_block_processed()
|
||||||
.expect_penalty()
|
.expect_penalty()
|
||||||
.expect_blobs_request()
|
|
||||||
.expect_block_request()
|
.expect_block_request()
|
||||||
|
.expect_no_blobs_request()
|
||||||
.blobs_response()
|
.blobs_response()
|
||||||
.missing_components_from_blob_request()
|
.missing_components_from_blob_request()
|
||||||
.expect_no_penalty()
|
.expect_no_penalty()
|
||||||
@@ -1726,7 +1726,7 @@ mod deneb_only {
|
|||||||
.invalid_blob_processed()
|
.invalid_blob_processed()
|
||||||
.expect_penalty()
|
.expect_penalty()
|
||||||
.expect_blobs_request()
|
.expect_blobs_request()
|
||||||
.expect_block_request();
|
.expect_no_block_request();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -1881,8 +1881,8 @@ mod deneb_only {
|
|||||||
.block_response_triggering_process()
|
.block_response_triggering_process()
|
||||||
.invalid_block_processed()
|
.invalid_block_processed()
|
||||||
.expect_penalty()
|
.expect_penalty()
|
||||||
.expect_blobs_request()
|
|
||||||
.expect_block_request()
|
.expect_block_request()
|
||||||
|
.expect_no_blobs_request()
|
||||||
.blobs_response()
|
.blobs_response()
|
||||||
.missing_components_from_blob_request()
|
.missing_components_from_blob_request()
|
||||||
.expect_no_penalty()
|
.expect_no_penalty()
|
||||||
@@ -1903,7 +1903,7 @@ mod deneb_only {
|
|||||||
.invalid_blob_processed()
|
.invalid_blob_processed()
|
||||||
.expect_penalty()
|
.expect_penalty()
|
||||||
.expect_blobs_request()
|
.expect_blobs_request()
|
||||||
.expect_block_request();
|
.expect_no_block_request();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Reference in New Issue
Block a user