Merge pull request #269 from ethcore/continuous_import
Support blocks import to existing db
This commit is contained in:
commit
8d16766574
|
@ -37,6 +37,10 @@ impl BlocksWriter {
|
||||||
|
|
||||||
pub fn append_block(&mut self, block: chain::Block) -> Result<(), Error> {
|
pub fn append_block(&mut self, block: chain::Block) -> Result<(), Error> {
|
||||||
let indexed_block: db::IndexedBlock = block.into();
|
let indexed_block: db::IndexedBlock = block.into();
|
||||||
|
// do not append block if it is already there
|
||||||
|
if self.storage.contains_block(db::BlockRef::Hash(indexed_block.hash().clone())) {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
// verify && insert only if parent block is already in the storage
|
// verify && insert only if parent block is already in the storage
|
||||||
if !self.storage.contains_block(db::BlockRef::Hash(indexed_block.header().previous_header_hash.clone())) {
|
if !self.storage.contains_block(db::BlockRef::Hash(indexed_block.header().previous_header_hash.clone())) {
|
||||||
self.orphaned_blocks_pool.insert_orphaned_block(indexed_block.hash().clone(), indexed_block);
|
self.orphaned_blocks_pool.insert_orphaned_block(indexed_block.hash().clone(), indexed_block);
|
||||||
|
@ -142,4 +146,16 @@ mod tests {
|
||||||
};
|
};
|
||||||
assert_eq!(db.best_block().expect("Block is inserted").number, 0);
|
assert_eq!(db.best_block().expect("Block is inserted").number, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn blocks_writer_append_to_existing_db() {
|
||||||
|
let db = Arc::new(db::TestStorage::with_genesis_block());
|
||||||
|
let mut blocks_target = BlocksWriter::new(db.clone(), Magic::Testnet);
|
||||||
|
|
||||||
|
assert!(blocks_target.append_block(test_data::genesis()).is_ok());
|
||||||
|
assert_eq!(db.best_block().expect("Block is inserted").number, 0);
|
||||||
|
|
||||||
|
assert!(blocks_target.append_block(test_data::block_h1()).is_ok());
|
||||||
|
assert_eq!(db.best_block().expect("Block is inserted").number, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue