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