From 4491a9fac56bf26c97b2a0bd781946253afb33ec Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky <svyatonik@gmail.com> Date: Fri, 27 Jul 2018 17:09:31 +0300 Subject: [PATCH] Do not queue empty blocks set for import (#431) * do not queue empty blocks set for import * fixed grumbles --- substrate/substrate/network/src/import_queue.rs | 14 ++++++++++++++ substrate/substrate/network/src/protocol.rs | 12 +++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/substrate/substrate/network/src/import_queue.rs b/substrate/substrate/network/src/import_queue.rs index 024ae627519..9e010c2bee8 100644 --- a/substrate/substrate/network/src/import_queue.rs +++ b/substrate/substrate/network/src/import_queue.rs @@ -133,6 +133,10 @@ impl<B: BlockT> ImportQueue<B> for AsyncImportQueue<B> { } fn import_blocks(&self, _sync: &mut ChainSync<B>, _protocol: &mut Context<B>, blocks: (BlockOrigin, Vec<BlockData<B>>)) { + 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; + 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 { let import_result = import_single_block(link.chain(), blocks_origin.clone(), block); diff --git a/substrate/substrate/network/src/protocol.rs b/substrate/substrate/network/src/protocol.rs index e798536c451..e8de0f218b5 100644 --- a/substrate/substrate/network/src/protocol.rs +++ b/substrate/substrate/network/src/protocol.rs @@ -353,7 +353,17 @@ impl<B: BlockT, S: Specialization<B>> Protocol<B, S> { fn on_block_response(&self, io: &mut SyncIo, peer: NodeIndex, request: message::BlockRequest<B>, response: message::BlockResponse<B>) { // TODO: validate response - trace!(target: "sync", "BlockResponse {} from {} with {} blocks", response.id, peer, response.blocks.len()); + 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); } -- GitLab