handle queue import errors a bit more gracefully (#8385)
This commit is contained in:
parent
bc2f5586ee
commit
869fa6fda8
@ -427,6 +427,8 @@ impl<L: AsLightClient> LightSync<L> {
|
|||||||
|
|
||||||
// handles request dispatch, block import, state machine transitions, and timeouts.
|
// handles request dispatch, block import, state machine transitions, and timeouts.
|
||||||
fn maintain_sync(&self, ctx: &BasicContext) {
|
fn maintain_sync(&self, ctx: &BasicContext) {
|
||||||
|
use ethcore::error::{BlockImportError, ImportError};
|
||||||
|
|
||||||
const DRAIN_AMOUNT: usize = 128;
|
const DRAIN_AMOUNT: usize = 128;
|
||||||
|
|
||||||
let client = self.client.as_light_client();
|
let client = self.client.as_light_client();
|
||||||
@ -453,11 +455,20 @@ impl<L: AsLightClient> LightSync<L> {
|
|||||||
trace!(target: "sync", "Drained {} headers to import", sink.len());
|
trace!(target: "sync", "Drained {} headers to import", sink.len());
|
||||||
|
|
||||||
for header in sink.drain(..) {
|
for header in sink.drain(..) {
|
||||||
if let Err(e) = client.queue_header(header) {
|
match client.queue_header(header) {
|
||||||
debug!(target: "sync", "Found bad header ({:?}). Reset to search state.", e);
|
Ok(_) => {}
|
||||||
|
Err(BlockImportError::Import(ImportError::AlreadyInChain)) => {
|
||||||
|
trace!(target: "sync", "Block already in chain. Continuing.");
|
||||||
|
},
|
||||||
|
Err(BlockImportError::Import(ImportError::AlreadyQueued)) => {
|
||||||
|
trace!(target: "sync", "Block already queued. Continuing.");
|
||||||
|
},
|
||||||
|
Err(e) => {
|
||||||
|
debug!(target: "sync", "Found bad header ({:?}). Reset to search state.", e);
|
||||||
|
|
||||||
self.begin_search(&mut state);
|
self.begin_search(&mut state);
|
||||||
break 'a;
|
break 'a;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user