Improve error handling

This commit is contained in:
Emilia Hane 2023-01-20 21:16:34 +01:00
parent 8e57eef0ed
commit f7eb89ddd9
No known key found for this signature in database
GPG Key ID: E73394F9C09206FA
3 changed files with 39 additions and 7 deletions

View File

@ -1070,7 +1070,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
let expected_kzg_commitments =
match block.message().body().blob_kzg_commitments() {
Ok(kzg_commitments) => kzg_commitments,
Err(_) => return Err(Error::BlobsUnavailable),
Err(_) => return Err(Error::NoKzgCommitmentsFieldOnBlock),
};
if expected_kzg_commitments.is_empty() {
Ok(Some(BlobsSidecar::empty_from_parts(
@ -1079,12 +1079,12 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
)))
} else {
if let Some(boundary) = self.data_availability_boundary() {
// We should have blobs for all blocks after the boundary.
// We should have blobs for all blocks younger than the boundary.
if boundary <= block.epoch() {
return Err(Error::BlobsUnavailable);
}
}
Ok(None)
Err(Error::BlobsOlderThanDataAvailabilityBoundary)
}
})
.transpose()

View File

@ -210,6 +210,8 @@ pub enum BeaconChainError {
InconsistentFork(InconsistentFork),
ProposerHeadForkChoiceError(fork_choice::Error<proto_array::Error>),
BlobsUnavailable,
NoKzgCommitmentsFieldOnBlock,
BlobsOlderThanDataAvailabilityBoundary,
}
easy_from_to!(SlotProcessingError, BeaconChainError);

View File

@ -251,7 +251,7 @@ impl<T: BeaconChainTypes> Worker<T> {
let block_epoch = block.epoch();
if Some(block_epoch) >= finalized_data_availability_boundary {
debug!(
error!(
self.log,
"Peer requested block and blob that should be available, but no blob found";
"peer" => %peer_id,
@ -270,7 +270,7 @@ impl<T: BeaconChainTypes> Worker<T> {
}
}
Ok((None, Some(_))) => {
debug!(
error!(
self.log,
"Peer requested block and blob, but no block found";
"peer" => %peer_id,
@ -754,17 +754,47 @@ impl<T: BeaconChainTypes> Worker<T> {
send_response = false;
break;
}
Err(BeaconChainError::NoKzgCommitmentsFieldOnBlock) => {
error!(
self.log,
"No kzg_commitments field in block";
"block_root" => ?root,
);
self.send_error_response(
peer_id,
RPCResponseErrorCode::ResourceUnavailable,
"Failed reading field kzg_commitments from block".into(),
request_id,
);
send_response = false;
break;
}
Err(BeaconChainError::BlobsOlderThanDataAvailabilityBoundary) => {
error!(
self.log,
"Failed loading blobs older than data availability boundary";
"block_root" => ?root,
);
self.send_error_response(
peer_id,
RPCResponseErrorCode::ResourceUnavailable,
"Blobs older than data availability boundary".into(),
request_id,
);
send_response = false;
break;
}
Err(e) => {
error!(
self.log,
"Error fetching blob for peer";
"Error fetching blinded block for block root";
"block_root" => ?root,
"error" => ?e
);
self.send_error_response(
peer_id,
RPCResponseErrorCode::ServerError,
"Failed fetching blobs".into(),
"No blobs and failed fetching corresponding block".into(),
request_id,
);
send_response = false;