aboutsummaryrefslogtreecommitdiffstats
path: root/ethdb/database.go
diff options
context:
space:
mode:
Diffstat (limited to 'ethdb/database.go')
-rw-r--r--ethdb/database.go64
1 files changed, 6 insertions, 58 deletions
diff --git a/ethdb/database.go b/ethdb/database.go
index 9bf09467b..019645ced 100644
--- a/ethdb/database.go
+++ b/ethdb/database.go
@@ -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
@@ -40,85 +34,39 @@ func NewLDBDatabase(file string) (*LDBDatabase, error) {
return nil, err
}
database := &LDBDatabase{
- fn: file,
- db: db,
- quit: make(chan struct{}),
+ fn: file,
+ db: db,
}
- 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() {