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:
parent
bf7677ce69
commit
fb503f523b
@ -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);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user