Allow old blocks from peers with lower difficulty (#9226)

Previously we only allow downloading of old blocks if the peer
difficulty was greater than our syncing difficulty. This change allows
downloading of blocks from peers where the difficulty is greater then
the last downloaded old block.
This commit is contained in:
Andrew Jones 2018-07-27 10:13:05 +01:00 committed by GitHub
parent bf7677ce69
commit fb503f523b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -761,14 +761,24 @@ impl ChainSync {
} }
} }
// Only ask for old blocks if the peer has a higher difficulty // Only ask for old blocks if the peer has a higher difficulty than the last imported old block
if force || higher_difficulty { let last_imported_old_block_difficulty = self.old_blocks.as_mut().and_then(|d| {
io.chain().block_total_difficulty(BlockId::Number(d.last_imported_block_number()))
});
if force || last_imported_old_block_difficulty.map_or(true, |ld| peer_difficulty.map_or(true, |pd| pd > ld)) {
if let Some(request) = self.old_blocks.as_mut().and_then(|d| d.request_blocks(io, num_active_peers)) { if let Some(request) = self.old_blocks.as_mut().and_then(|d| d.request_blocks(io, num_active_peers)) {
SyncRequester::request_blocks(self, io, peer_id, request, BlockSet::OldBlocks); SyncRequester::request_blocks(self, io, peer_id, request, BlockSet::OldBlocks);
return; return;
} }
} else { } else {
trace!(target: "sync", "peer {} is not suitable for asking old blocks", peer_id); trace!(
target: "sync",
"peer {:?} is not suitable for requesting old blocks, last_imported_old_block_difficulty={:?}, peer_difficulty={:?}",
peer_id,
last_imported_old_block_difficulty,
peer_difficulty
);
self.deactivate_peer(io, peer_id); self.deactivate_peer(io, peer_id);
} }
}, },