ensure meta is actually in the right column and sanity check on iterator (#820)

This commit is contained in:
Robert Habermeier
2018-09-27 16:05:24 +01:00
committed by Gav Wood
parent e5b48030b5
commit a3285e43f6
3 changed files with 6 additions and 5 deletions
+3 -3
View File
@@ -151,8 +151,8 @@ pub struct BlockchainDb<Block: BlockT> {
impl<Block: BlockT> BlockchainDb<Block> {
fn new(db: Arc<KeyValueDB>) -> Result<Self, client::error::Error> {
let meta = read_meta::<Block>(&*db, columns::HEADER)?;
let leaves = LeafSet::read_from_db(&*db, columns::HEADER, meta_keys::LEAF_PREFIX)?;
let meta = read_meta::<Block>(&*db, columns::META)?;
let leaves = LeafSet::read_from_db(&*db, columns::META, meta_keys::LEAF_PREFIX)?;
Ok(BlockchainDb {
db,
leaves: RwLock::new(leaves),
@@ -638,7 +638,7 @@ impl<Block> client::backend::Backend<Block, Blake2Hasher> for Backend<Block> whe
{
let mut leaves = self.blockchain.leaves.write();
let displaced_leaf = leaves.import(hash, number, parent_hash);
leaves.prepare_transaction(&mut transaction, columns::HEADER, meta_keys::LEAF_PREFIX);
leaves.prepare_transaction(&mut transaction, columns::META, meta_keys::LEAF_PREFIX);
let write_result = self.storage.db.write(transaction).map_err(db_err);
if let Err(e) = write_result {
+2 -2
View File
@@ -92,8 +92,8 @@ impl<Block> LightStorage<Block>
columns::HEADER,
columns::AUTHORITIES
)?;
let meta = RwLock::new(read_meta::<Block>(&*db, columns::HEADER)?);
let leaves = RwLock::new(LeafSet::read_from_db(&*db, columns::HEADER, meta_keys::LEAF_PREFIX)?);
let meta = RwLock::new(read_meta::<Block>(&*db, columns::META)?);
let leaves = RwLock::new(LeafSet::read_from_db(&*db, columns::META, meta_keys::LEAF_PREFIX)?);
Ok(LightStorage {
db,
+1
View File
@@ -82,6 +82,7 @@ impl<H, N> LeafSet<H, N> where
let mut storage = BTreeSet::new();
for (key, value) in db.iter_from_prefix(column, prefix) {
if !key.starts_with(prefix) { break }
let raw_hash = &mut &key[prefix.len()..];
let hash = match Decode::decode(raw_hash) {
Some(hash) => hash,