forked from cerc-io/plugeth
common, ethdb: removed caching and LastTD
This commit is contained in:
parent
7595716816
commit
020006a8ed
@ -5,7 +5,6 @@ type Database interface {
|
||||
Put(key []byte, value []byte)
|
||||
Get(key []byte) ([]byte, error)
|
||||
Delete(key []byte) error
|
||||
LastKnownTD() []byte
|
||||
Close()
|
||||
Flush() error
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
package ethdb
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/ethereum/go-ethereum/compression/rle"
|
||||
"github.com/ethereum/go-ethereum/logger"
|
||||
"github.com/ethereum/go-ethereum/logger/glog"
|
||||
@ -15,14 +13,10 @@ import (
|
||||
var OpenFileLimit = 64
|
||||
|
||||
type LDBDatabase struct {
|
||||
// filename for reporting
|
||||
fn string
|
||||
|
||||
mu sync.Mutex
|
||||
// LevelDB instance
|
||||
db *leveldb.DB
|
||||
|
||||
queue map[string][]byte
|
||||
|
||||
quit chan struct{}
|
||||
}
|
||||
|
||||
// NewLDBDatabase returns a LevelDB wrapped object. LDBDatabase does not persist data by
|
||||
@ -42,83 +36,37 @@ func NewLDBDatabase(file string) (*LDBDatabase, error) {
|
||||
database := &LDBDatabase{
|
||||
fn: file,
|
||||
db: db,
|
||||
quit: make(chan struct{}),
|
||||
}
|
||||
database.makeQueue()
|
||||
|
||||
return database, nil
|
||||
}
|
||||
|
||||
func (self *LDBDatabase) makeQueue() {
|
||||
self.queue = make(map[string][]byte)
|
||||
}
|
||||
|
||||
// Put puts the given key / value to the queue
|
||||
func (self *LDBDatabase) Put(key []byte, value []byte) {
|
||||
self.mu.Lock()
|
||||
defer self.mu.Unlock()
|
||||
|
||||
self.queue[string(key)] = value
|
||||
self.db.Put(key, rle.Compress(value), nil)
|
||||
}
|
||||
|
||||
// Get returns the given key if it's present.
|
||||
func (self *LDBDatabase) Get(key []byte) ([]byte, error) {
|
||||
self.mu.Lock()
|
||||
defer self.mu.Unlock()
|
||||
|
||||
// Check queue first
|
||||
if dat, ok := self.queue[string(key)]; ok {
|
||||
return dat, nil
|
||||
}
|
||||
|
||||
dat, err := self.db.Get(key, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return rle.Decompress(dat)
|
||||
}
|
||||
|
||||
// Delete deletes the key from the queue and database
|
||||
func (self *LDBDatabase) Delete(key []byte) error {
|
||||
self.mu.Lock()
|
||||
defer self.mu.Unlock()
|
||||
|
||||
// make sure it's not in the queue
|
||||
delete(self.queue, string(key))
|
||||
|
||||
return self.db.Delete(key, nil)
|
||||
}
|
||||
|
||||
func (self *LDBDatabase) LastKnownTD() []byte {
|
||||
data, _ := self.Get([]byte("LTD"))
|
||||
|
||||
if len(data) == 0 {
|
||||
data = []byte{0x0}
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func (self *LDBDatabase) NewIterator() iterator.Iterator {
|
||||
return self.db.NewIterator(nil, nil)
|
||||
}
|
||||
|
||||
// Flush flushes out the queue to leveldb
|
||||
func (self *LDBDatabase) Flush() error {
|
||||
self.mu.Lock()
|
||||
defer self.mu.Unlock()
|
||||
|
||||
batch := new(leveldb.Batch)
|
||||
|
||||
for key, value := range self.queue {
|
||||
batch.Put([]byte(key), rle.Compress(value))
|
||||
}
|
||||
self.makeQueue() // reset the queue
|
||||
|
||||
glog.V(logger.Detail).Infoln("Flush database: ", self.fn)
|
||||
|
||||
return self.db.Write(batch, nil)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *LDBDatabase) Close() {
|
||||
|
Loading…
Reference in New Issue
Block a user