From 8c413ad0a9338f6e8288124ff9538fc07d0fdb54 Mon Sep 17 00:00:00 2001 From: Roman Krasiuk Date: Wed, 4 Jan 2023 20:55:59 +0200 Subject: [PATCH] trace(download): failed requests (#715) --- bin/reth/src/config.rs | 2 +- crates/net/downloaders/src/bodies/concurrent.rs | 15 ++++++++------- crates/net/downloaders/src/headers/linear.rs | 3 +++ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/bin/reth/src/config.rs b/bin/reth/src/config.rs index 0030f58f30..69607e1f5e 100644 --- a/bin/reth/src/config.rs +++ b/bin/reth/src/config.rs @@ -106,7 +106,7 @@ impl Default for BodiesConfig { fn default() -> Self { Self { commit_threshold: 5_000, - downloader_batch_size: 200, + downloader_batch_size: 100, downloader_retries: 5, downloader_concurrency: 10, } diff --git a/crates/net/downloaders/src/bodies/concurrent.rs b/crates/net/downloaders/src/bodies/concurrent.rs index e0034056a4..c60d74ba3b 100644 --- a/crates/net/downloaders/src/bodies/concurrent.rs +++ b/crates/net/downloaders/src/bodies/concurrent.rs @@ -124,17 +124,18 @@ where &self, headers: Vec<&SealedHeader>, ) -> DownloadResult> { - let headers_with_txs_and_ommers = + // Filter headers with transaction or ommers. These are the only ones + // we will request + let request = headers.iter().filter(|h| !h.is_empty()).map(|h| h.hash()).collect::>(); - if headers_with_txs_and_ommers.is_empty() { + if request.is_empty() { tracing::trace!(target: "downloaders::bodies", len = headers.len(), "Nothing to download"); return Ok(headers.into_iter().cloned().map(BlockResponse::Empty).collect()) } - let request_len = headers_with_txs_and_ommers.len(); + let request_len = request.len(); tracing::trace!(target: "downloaders::bodies", request_len, "Requesting bodies"); - let (peer_id, bodies) = - self.client.get_block_bodies(headers_with_txs_and_ommers).await?.split(); + let (peer_id, bodies) = self.client.get_block_bodies(request.clone()).await?.split(); tracing::trace!( target: "downloaders::bodies", request_len, response_len = bodies.len(), ?peer_id, "Received bodies" ); @@ -154,7 +155,7 @@ where Some(body) => body, None => { tracing::trace!( - target: "downloaders::bodies", ?peer_id, header = ?header.hash(), "Penalizing peer" + target: "downloaders::bodies", ?peer_id, header = ?header.hash(), ?request, "Penalizing peer" ); self.client.report_bad_message(peer_id); // TODO: We error always, this means that if we got no body from a peer @@ -177,7 +178,7 @@ where // ones calculated manually from the block body. self.consensus.pre_validate_block(&block).map_err(|error| { tracing::trace!( - target: "downloaders::bodies", ?peer_id, header = ?header.hash(), ?error, "Penalizing peer" + target: "downloaders::bodies", ?peer_id, header = ?header.hash(), ?error, ?request, "Penalizing peer" ); self.client.report_bad_message(peer_id); DownloadError::BlockValidation { hash: header.hash(), error } diff --git a/crates/net/downloaders/src/headers/linear.rs b/crates/net/downloaders/src/headers/linear.rs index 9ed0d8d0d2..136ac0e445 100644 --- a/crates/net/downloaders/src/headers/linear.rs +++ b/crates/net/downloaders/src/headers/linear.rs @@ -339,6 +339,9 @@ where } } Err(error) => { + tracing::error!( + target: "downloaders::headers", request = ?fut.request, ?error, "Error processing header response", + ); // Penalize the peer for bad response if let Some(peer_id) = peer_id { tracing::trace!(target: "downloaders::headers", ?peer_id, ?error, "Penalizing peer");