From a5e33c7a261468ffe2d5d310f5cc6cf9d9282f15 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Thu, 8 Dec 2016 22:14:32 +0300 Subject: [PATCH 1/2] support blocks import to existing db --- sync/src/blocks_writer.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sync/src/blocks_writer.rs b/sync/src/blocks_writer.rs index 0c885ace..b09dc6e8 100644 --- a/sync/src/blocks_writer.rs +++ b/sync/src/blocks_writer.rs @@ -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); From ef50b763d8290be0be0cd7bf1c0b27828180594c Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Thu, 8 Dec 2016 22:20:36 +0300 Subject: [PATCH 2/2] blocks_writer_append_to_existing_db --- sync/src/blocks_writer.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/sync/src/blocks_writer.rs b/sync/src/blocks_writer.rs index b09dc6e8..e3892c6c 100644 --- a/sync/src/blocks_writer.rs +++ b/sync/src/blocks_writer.rs @@ -146,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); + } }