Merge pull request #1305 from obscuren/database-error-check
core, ethdb, trie: validate database errors
This commit is contained in:
commit
7633dfdc08
|
@ -2,7 +2,7 @@ package common
|
||||||
|
|
||||||
// Database interface
|
// Database interface
|
||||||
type Database interface {
|
type Database interface {
|
||||||
Put(key []byte, value []byte)
|
Put(key []byte, value []byte) error
|
||||||
Get(key []byte) ([]byte, error)
|
Get(key []byte) ([]byte, error)
|
||||||
Delete(key []byte) error
|
Delete(key []byte) error
|
||||||
Close()
|
Close()
|
||||||
|
|
|
@ -377,8 +377,14 @@ func (self *ChainManager) ExportN(w io.Writer, first uint64, last uint64) error
|
||||||
// assumes that the `mu` mutex is held!
|
// assumes that the `mu` mutex is held!
|
||||||
func (bc *ChainManager) insert(block *types.Block) {
|
func (bc *ChainManager) insert(block *types.Block) {
|
||||||
key := append(blockNumPre, block.Number().Bytes()...)
|
key := append(blockNumPre, block.Number().Bytes()...)
|
||||||
bc.blockDb.Put(key, block.Hash().Bytes())
|
err := bc.blockDb.Put(key, block.Hash().Bytes())
|
||||||
bc.blockDb.Put([]byte("LastBlock"), block.Hash().Bytes())
|
if err != nil {
|
||||||
|
glog.Fatal("db write fail:", err)
|
||||||
|
}
|
||||||
|
err = bc.blockDb.Put([]byte("LastBlock"), block.Hash().Bytes())
|
||||||
|
if err != nil {
|
||||||
|
glog.Fatal("db write fail:", err)
|
||||||
|
}
|
||||||
|
|
||||||
bc.currentBlock = block
|
bc.currentBlock = block
|
||||||
bc.lastBlockHash = block.Hash()
|
bc.lastBlockHash = block.Hash()
|
||||||
|
@ -387,7 +393,11 @@ func (bc *ChainManager) insert(block *types.Block) {
|
||||||
func (bc *ChainManager) write(block *types.Block) {
|
func (bc *ChainManager) write(block *types.Block) {
|
||||||
enc, _ := rlp.EncodeToBytes((*types.StorageBlock)(block))
|
enc, _ := rlp.EncodeToBytes((*types.StorageBlock)(block))
|
||||||
key := append(blockHashPre, block.Hash().Bytes()...)
|
key := append(blockHashPre, block.Hash().Bytes()...)
|
||||||
bc.blockDb.Put(key, enc)
|
err := bc.blockDb.Put(key, enc)
|
||||||
|
if err != nil {
|
||||||
|
glog.Fatal("db write fail:", err)
|
||||||
|
}
|
||||||
|
|
||||||
// Push block to cache
|
// Push block to cache
|
||||||
bc.cache.Push(block)
|
bc.cache.Push(block)
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,8 +42,8 @@ func NewLDBDatabase(file string) (*LDBDatabase, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put puts the given key / value to the queue
|
// Put puts the given key / value to the queue
|
||||||
func (self *LDBDatabase) Put(key []byte, value []byte) {
|
func (self *LDBDatabase) Put(key []byte, value []byte) error {
|
||||||
self.db.Put(key, rle.Compress(value), nil)
|
return self.db.Put(key, rle.Compress(value), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get returns the given key if it's present.
|
// Get returns the given key if it's present.
|
||||||
|
|
|
@ -19,8 +19,10 @@ func NewMemDatabase() (*MemDatabase, error) {
|
||||||
return db, nil
|
return db, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *MemDatabase) Put(key []byte, value []byte) {
|
func (db *MemDatabase) Put(key []byte, value []byte) error {
|
||||||
db.db[string(key)] = value
|
db.db[string(key)] = value
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *MemDatabase) Set(key []byte, value []byte) {
|
func (db *MemDatabase) Set(key []byte, value []byte) {
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package trie
|
package trie
|
||||||
|
|
||||||
|
import "github.com/ethereum/go-ethereum/logger/glog"
|
||||||
|
|
||||||
type Backend interface {
|
type Backend interface {
|
||||||
Get([]byte) ([]byte, error)
|
Get([]byte) ([]byte, error)
|
||||||
Put([]byte, []byte)
|
Put([]byte, []byte) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type Cache struct {
|
type Cache struct {
|
||||||
|
@ -29,7 +31,9 @@ func (self *Cache) Put(key []byte, data []byte) {
|
||||||
|
|
||||||
func (self *Cache) Flush() {
|
func (self *Cache) Flush() {
|
||||||
for k, v := range self.store {
|
for k, v := range self.store {
|
||||||
self.backend.Put([]byte(k), v)
|
if err := self.backend.Put([]byte(k), v); err != nil {
|
||||||
|
glog.Fatal("db write err:", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This will eventually grow too large. We'd could
|
// This will eventually grow too large. We'd could
|
||||||
|
|
|
@ -12,7 +12,7 @@ import (
|
||||||
type Db map[string][]byte
|
type Db map[string][]byte
|
||||||
|
|
||||||
func (self Db) Get(k []byte) ([]byte, error) { return self[string(k)], nil }
|
func (self Db) Get(k []byte) ([]byte, error) { return self[string(k)], nil }
|
||||||
func (self Db) Put(k, v []byte) { self[string(k)] = v }
|
func (self Db) Put(k, v []byte) error { self[string(k)] = v; return nil }
|
||||||
|
|
||||||
// Used for testing
|
// Used for testing
|
||||||
func NewEmpty() *Trie {
|
func NewEmpty() *Trie {
|
||||||
|
|
Loading…
Reference in New Issue