Merge pull request #844 from ethcore/sync-beta

Full sync restart on bad block
This commit is contained in:
Gav Wood 2016-03-28 15:49:39 +02:00
commit f60d74b231
1 changed files with 8 additions and 2 deletions

View File

@ -277,7 +277,6 @@ impl ChainSync {
self.peers.clear(); self.peers.clear();
} }
#[cfg_attr(feature="dev", allow(for_kv_map))] // Because it's not possible to get `values_mut()` #[cfg_attr(feature="dev", allow(for_kv_map))] // Because it's not possible to get `values_mut()`
/// Rest sync. Clear all downloaded data but keep the queue /// Rest sync. Clear all downloaded data but keep the queue
fn reset(&mut self) { fn reset(&mut self) {
@ -304,6 +303,13 @@ impl ChainSync {
self.state = SyncState::NotSynced; self.state = SyncState::NotSynced;
} }
/// Restart sync after bad block has been detected. May end up re-downloading up to QUEUE_SIZE blocks
pub fn restart_on_bad_block(&mut self, io: &mut SyncIo) {
self.restart(io);
// Do not assume that the block queue/chain still has our last_imported_block
self.last_imported_block = None;
self.last_imported_hash = None;
}
/// Called by peer to report status /// Called by peer to report status
fn on_peer_status(&mut self, io: &mut SyncIo, peer_id: PeerId, r: &UntrustedRlp) -> Result<(), PacketDecodeError> { fn on_peer_status(&mut self, io: &mut SyncIo, peer_id: PeerId, r: &UntrustedRlp) -> Result<(), PacketDecodeError> {
let peer = PeerInfo { let peer = PeerInfo {
@ -841,7 +847,7 @@ impl ChainSync {
} }
if restart { if restart {
self.restart(io); self.restart_on_bad_block(io);
return; return;
} }