Merge pull request #1538 from ethcore/bc-restore
Attempt to fix blochchain/extras DBs sync
This commit is contained in:
commit
bbf20c3637
@ -30,7 +30,7 @@ use blockchain::best_block::BestBlock;
|
|||||||
use types::tree_route::TreeRoute;
|
use types::tree_route::TreeRoute;
|
||||||
use blockchain::update::ExtrasUpdate;
|
use blockchain::update::ExtrasUpdate;
|
||||||
use blockchain::{CacheSize, ImportRoute, Config};
|
use blockchain::{CacheSize, ImportRoute, Config};
|
||||||
use db::{Writable, Readable, CacheUpdatePolicy};
|
use db::{Writable, Readable, CacheUpdatePolicy, Key};
|
||||||
|
|
||||||
const LOG_BLOOMS_LEVELS: usize = 3;
|
const LOG_BLOOMS_LEVELS: usize = 3;
|
||||||
const LOG_BLOOMS_ELEMENTS_PER_INDEX: usize = 16;
|
const LOG_BLOOMS_ELEMENTS_PER_INDEX: usize = 16;
|
||||||
@ -295,7 +295,22 @@ impl BlockChain {
|
|||||||
|
|
||||||
// load best block
|
// load best block
|
||||||
let best_block_hash = match bc.extras_db.get(b"best").unwrap() {
|
let best_block_hash = match bc.extras_db.get(b"best").unwrap() {
|
||||||
Some(best) => H256::from_slice(&best),
|
Some(best) => {
|
||||||
|
let best = H256::from_slice(&best);
|
||||||
|
let mut b = best.clone();
|
||||||
|
while !bc.blocks_db.get(&b).unwrap().is_some() {
|
||||||
|
// track back to the best block we have in the blocks database
|
||||||
|
let extras: BlockDetails = bc.extras_db.read(&b).unwrap();
|
||||||
|
type DetailsKey = Key<BlockDetails, Target=H264>;
|
||||||
|
bc.extras_db.delete(&(DetailsKey::key(&b))).unwrap();
|
||||||
|
b = extras.parent;
|
||||||
|
}
|
||||||
|
if b != best {
|
||||||
|
info!("Restored mismatched best block. Was: {}, new: {}", best.hex(), b.hex());
|
||||||
|
bc.extras_db.put(b"best", &b).unwrap();
|
||||||
|
}
|
||||||
|
b
|
||||||
|
}
|
||||||
None => {
|
None => {
|
||||||
// best block does not exist
|
// best block does not exist
|
||||||
// we need to insert genesis into the cache
|
// we need to insert genesis into the cache
|
||||||
|
Loading…
Reference in New Issue
Block a user