Merge pull request #269 from ethcore/continuous_import

Support blocks import to existing db
This commit is contained in:
Marek Kotewicz 2016-12-08 21:18:49 +01:00 committed by GitHub
commit 8d16766574
1 changed files with 16 additions and 0 deletions

View File

@ -37,6 +37,10 @@ impl BlocksWriter {
pub fn append_block(&mut self, block: chain::Block) -> Result<(), Error> {
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
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);
@ -142,4 +146,16 @@ mod tests {
};
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);
}
}