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 blockchain::{BlockChain, BlockChainDB, BlockChainDBHandler};
|
||||||
use client::{Client, ChainInfo, ClientIoMessage};
|
use client::{Client, ChainInfo, ClientIoMessage};
|
||||||
use engines::EthEngine;
|
use engines::EthEngine;
|
||||||
use error::Error;
|
use error::{Error, ErrorKind as SnapshotErrorKind};
|
||||||
|
use snapshot::{Error as SnapshotError};
|
||||||
use hash::keccak;
|
use hash::keccak;
|
||||||
use ids::BlockId;
|
use ids::BlockId;
|
||||||
|
|
||||||
@ -583,11 +584,20 @@ impl Service {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Feed a chunk of either kind. no-op if no restoration or status is wrong.
|
/// 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) -> Result<(), Error> {
|
fn feed_chunk(&self, hash: H256, chunk: &[u8], is_state: bool) {
|
||||||
// TODO: be able to process block chunks and state chunks at same time?
|
// TODO: be able to process block chunks and state chunks at same time?
|
||||||
let mut restoration = self.restoration.lock();
|
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
|
/// Feed a chunk with the Restoration
|
||||||
@ -641,28 +651,12 @@ impl Service {
|
|||||||
|
|
||||||
/// Feed a state chunk to be processed synchronously.
|
/// Feed a state chunk to be processed synchronously.
|
||||||
pub fn feed_state_chunk(&self, hash: H256, chunk: &[u8]) {
|
pub fn feed_state_chunk(&self, hash: H256, chunk: &[u8]) {
|
||||||
match self.feed_chunk(hash, chunk, true) {
|
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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Feed a block chunk to be processed synchronously.
|
/// Feed a block chunk to be processed synchronously.
|
||||||
pub fn feed_block_chunk(&self, hash: H256, chunk: &[u8]) {
|
pub fn feed_block_chunk(&self, hash: H256, chunk: &[u8]) {
|
||||||
match self.feed_chunk(hash, chunk, false) {
|
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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user