Don't error when Snapshot is aborted (#9492)
* Don't error when Snapshot is aborted * PR Grumble * PR grumble
This commit is contained in:
parent
44531e3009
commit
f3aed42dd6
@ -29,7 +29,8 @@ use super::io::{SnapshotReader, LooseReader, SnapshotWriter, LooseWriter};
|
||||
use blockchain::{BlockChain, BlockChainDB, BlockChainDBHandler};
|
||||
use client::{Client, ChainInfo, ClientIoMessage};
|
||||
use engines::EthEngine;
|
||||
use error::Error;
|
||||
use error::{Error, ErrorKind as SnapshotErrorKind};
|
||||
use snapshot::{Error as SnapshotError};
|
||||
use hash::keccak;
|
||||
use ids::BlockId;
|
||||
|
||||
@ -583,11 +584,20 @@ impl Service {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Feed a chunk of either kind. no-op if no restoration or status is wrong.
|
||||
fn feed_chunk(&self, hash: H256, chunk: &[u8], is_state: bool) -> Result<(), Error> {
|
||||
/// Feed a chunk of either kind (block or state). no-op if no restoration or status is wrong.
|
||||
fn feed_chunk(&self, hash: H256, chunk: &[u8], is_state: bool) {
|
||||
// TODO: be able to process block chunks and state chunks at same time?
|
||||
let mut restoration = self.restoration.lock();
|
||||
self.feed_chunk_with_restoration(&mut restoration, hash, chunk, is_state)
|
||||
match self.feed_chunk_with_restoration(&mut restoration, hash, chunk, is_state) {
|
||||
Ok(()) |
|
||||
Err(Error(SnapshotErrorKind::Snapshot(SnapshotError::RestorationAborted), _)) => (),
|
||||
Err(e) => {
|
||||
warn!("Encountered error during snapshot restoration: {}", e);
|
||||
*self.restoration.lock() = None;
|
||||
*self.status.lock() = RestorationStatus::Failed;
|
||||
let _ = fs::remove_dir_all(self.restoration_dir());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Feed a chunk with the Restoration
|
||||
@ -641,28 +651,12 @@ impl Service {
|
||||
|
||||
/// Feed a state chunk to be processed synchronously.
|
||||
pub fn feed_state_chunk(&self, hash: H256, chunk: &[u8]) {
|
||||
match self.feed_chunk(hash, chunk, true) {
|
||||
Ok(()) => (),
|
||||
Err(e) => {
|
||||
warn!("Encountered error during state restoration: {}", e);
|
||||
*self.restoration.lock() = None;
|
||||
*self.status.lock() = RestorationStatus::Failed;
|
||||
let _ = fs::remove_dir_all(self.restoration_dir());
|
||||
}
|
||||
}
|
||||
self.feed_chunk(hash, chunk, true);
|
||||
}
|
||||
|
||||
/// Feed a block chunk to be processed synchronously.
|
||||
pub fn feed_block_chunk(&self, hash: H256, chunk: &[u8]) {
|
||||
match self.feed_chunk(hash, chunk, false) {
|
||||
Ok(()) => (),
|
||||
Err(e) => {
|
||||
warn!("Encountered error during block restoration: {}", e);
|
||||
*self.restoration.lock() = None;
|
||||
*self.status.lock() = RestorationStatus::Failed;
|
||||
let _ = fs::remove_dir_all(self.restoration_dir());
|
||||
}
|
||||
}
|
||||
self.feed_chunk(hash, chunk, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user