From e6e9ad1b38196fed99cbdf1e7e5cfa49c70a4dfc Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Fri, 27 Jul 2018 11:07:18 +0300 Subject: [PATCH 1/2] do not queue empty blocks set for import --- substrate/network/src/import_queue.rs | 14 ++++++++++++++ substrate/network/src/protocol.rs | 12 +++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/substrate/network/src/import_queue.rs b/substrate/network/src/import_queue.rs index 78cf7c2a28497..17ca58c5c2bc7 100644 --- a/substrate/network/src/import_queue.rs +++ b/substrate/network/src/import_queue.rs @@ -133,6 +133,10 @@ impl ImportQueue for AsyncImportQueue { } fn import_blocks(&self, _sync: &mut ChainSync, _protocol: &mut Context, blocks: (BlockOrigin, Vec>)) { + if blocks.1.is_empty() { + return; + } + trace!(target:"sync", "Scheduling {} blocks for import", blocks.1.len()); let mut queue = self.data.queue.lock(); @@ -249,6 +253,16 @@ fn import_many_blocks<'a, B: BlockT>( let count = blocks.len(); let mut imported = 0; + trace!(target:"sync", "Starting import of {} blocks{}", count, + match ( + blocks.first().and_then(|b| b.block.header.as_ref().map(|h| h.number())), + blocks.last().and_then(|b| b.block.header.as_ref().map(|h| h.number())), + ) { + (Some(first), Some(last)) if first != last => format!(" ({}..{})", first, last), + (Some(first), Some(_)) => format!(" ({})", first), + _ => Default::default(), + }); + // Blocks in the response/drain should be in ascending order. for block in blocks { let import_result = import_single_block(link.chain(), blocks_origin.clone(), block); diff --git a/substrate/network/src/protocol.rs b/substrate/network/src/protocol.rs index e798536c451a9..ccee99577b5ed 100644 --- a/substrate/network/src/protocol.rs +++ b/substrate/network/src/protocol.rs @@ -353,7 +353,17 @@ impl> Protocol { fn on_block_response(&self, io: &mut SyncIo, peer: NodeIndex, request: message::BlockRequest, response: message::BlockResponse) { // TODO: validate response - trace!(target: "sync", "BlockResponse {} from {} with {} blocks", response.id, peer, response.blocks.len()); + trace!(target: "sync", "BlockResponse {} from {} with {} blocks{}", + response.id, peer, response.blocks.len(), + match ( + response.blocks.first().and_then(|b| b.header.as_ref().map(|h| h.number())), + response.blocks.last().and_then(|b| b.header.as_ref().map(|h| h.number())), + ) { + (Some(first), Some(last)) if first != last => format!(" ({}..{})", first, last), + (Some(first), Some(_)) => format!(" ({})", first), + _ => Default::default(), + }); + self.sync.write().on_block_data(&mut ProtocolContext::new(&self.context_data, io), peer, request, response); } From df014b1c7627e555caf501cefde0271fd6e4865c Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Fri, 27 Jul 2018 14:27:07 +0300 Subject: [PATCH 2/2] fixed grumbles --- substrate/network/src/import_queue.rs | 6 +++--- substrate/network/src/protocol.rs | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/substrate/network/src/import_queue.rs b/substrate/network/src/import_queue.rs index 17ca58c5c2bc7..d67ba4538ce3c 100644 --- a/substrate/network/src/import_queue.rs +++ b/substrate/network/src/import_queue.rs @@ -253,15 +253,15 @@ fn import_many_blocks<'a, B: BlockT>( let count = blocks.len(); let mut imported = 0; - trace!(target:"sync", "Starting import of {} blocks{}", count, - match ( + let blocks_range = match ( blocks.first().and_then(|b| b.block.header.as_ref().map(|h| h.number())), blocks.last().and_then(|b| b.block.header.as_ref().map(|h| h.number())), ) { (Some(first), Some(last)) if first != last => format!(" ({}..{})", first, last), (Some(first), Some(_)) => format!(" ({})", first), _ => Default::default(), - }); + }; + trace!(target:"sync", "Starting import of {} blocks{}", count, blocks_range); // Blocks in the response/drain should be in ascending order. for block in blocks { diff --git a/substrate/network/src/protocol.rs b/substrate/network/src/protocol.rs index ccee99577b5ed..e8de0f218b580 100644 --- a/substrate/network/src/protocol.rs +++ b/substrate/network/src/protocol.rs @@ -353,16 +353,16 @@ impl> Protocol { fn on_block_response(&self, io: &mut SyncIo, peer: NodeIndex, request: message::BlockRequest, response: message::BlockResponse) { // TODO: validate response - trace!(target: "sync", "BlockResponse {} from {} with {} blocks{}", - response.id, peer, response.blocks.len(), - match ( + let blocks_range = match ( response.blocks.first().and_then(|b| b.header.as_ref().map(|h| h.number())), response.blocks.last().and_then(|b| b.header.as_ref().map(|h| h.number())), ) { (Some(first), Some(last)) if first != last => format!(" ({}..{})", first, last), (Some(first), Some(_)) => format!(" ({})", first), _ => Default::default(), - }); + }; + trace!(target: "sync", "BlockResponse {} from {} with {} blocks{}", + response.id, peer, response.blocks.len(), blocks_range); self.sync.write().on_block_data(&mut ProtocolContext::new(&self.context_data, io), peer, request, response); }