mirror of
https://github.com/fluencelabs/tendermint
synced 2025-05-30 14:41:20 +00:00
fixes from @melekes
This commit is contained in:
parent
318982c0ba
commit
d4aeca8ce3
@ -3,7 +3,7 @@ package db
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
@ -12,7 +12,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func cleanupDBDir(dir, name string) {
|
func cleanupDBDir(dir, name string) {
|
||||||
os.RemoveAll(path.Join(dir, name) + ".db")
|
os.RemoveAll(filepath.Join(dir, name) + ".db")
|
||||||
}
|
}
|
||||||
|
|
||||||
func testBackendGetSetDelete(t *testing.T, backend string) {
|
func testBackendGetSetDelete(t *testing.T, backend string) {
|
||||||
@ -45,15 +45,6 @@ func TestBackendsGetSetDelete(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func assertPanics(t *testing.T, dbType, name string, fn func()) {
|
|
||||||
defer func() {
|
|
||||||
r := recover()
|
|
||||||
assert.NotNil(t, r, cmn.Fmt("expecting %s.%s to panic", dbType, name))
|
|
||||||
}()
|
|
||||||
|
|
||||||
fn()
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestBackendsNilKeys(t *testing.T) {
|
func TestBackendsNilKeys(t *testing.T) {
|
||||||
// test all backends
|
// test all backends
|
||||||
for dbType, creator := range backends {
|
for dbType, creator := range backends {
|
||||||
@ -62,12 +53,13 @@ func TestBackendsNilKeys(t *testing.T) {
|
|||||||
defer cleanupDBDir("", name)
|
defer cleanupDBDir("", name)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
assertPanics(t, dbType, "get", func() { db.Get(nil) })
|
panicMsg := "expecting %s.%s to panic"
|
||||||
assertPanics(t, dbType, "has", func() { db.Has(nil) })
|
assert.Panics(t, func() { db.Get(nil) }, panicMsg, dbType, "get")
|
||||||
assertPanics(t, dbType, "set", func() { db.Set(nil, []byte("abc")) })
|
assert.Panics(t, func() { db.Has(nil) }, panicMsg, dbType, "has")
|
||||||
assertPanics(t, dbType, "setsync", func() { db.SetSync(nil, []byte("abc")) })
|
assert.Panics(t, func() { db.Set(nil, []byte("abc")) }, panicMsg, dbType, "set")
|
||||||
assertPanics(t, dbType, "delete", func() { db.Delete(nil) })
|
assert.Panics(t, func() { db.SetSync(nil, []byte("abc")) }, panicMsg, dbType, "setsync")
|
||||||
assertPanics(t, dbType, "deletesync", func() { db.DeleteSync(nil) })
|
assert.Panics(t, func() { db.Delete(nil) }, panicMsg, dbType, "delete")
|
||||||
|
assert.Panics(t, func() { db.DeleteSync(nil) }, panicMsg, dbType, "deletesync")
|
||||||
|
|
||||||
db.Close()
|
db.Close()
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ package db
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"path"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/jmhodges/levigo"
|
"github.com/jmhodges/levigo"
|
||||||
)
|
)
|
||||||
@ -27,7 +27,7 @@ type CLevelDB struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewCLevelDB(name string, dir string) (*CLevelDB, error) {
|
func NewCLevelDB(name string, dir string) (*CLevelDB, error) {
|
||||||
dbPath := path.Join(dir, name+".db")
|
dbPath := filepath.Join(dir, name+".db")
|
||||||
|
|
||||||
opts := levigo.NewOptions()
|
opts := levigo.NewOptions()
|
||||||
opts.SetCache(levigo.NewLRUCache(1 << 30))
|
opts.SetCache(levigo.NewLRUCache(1 << 30))
|
||||||
|
13
db/fsdb.go
13
db/fsdb.go
@ -5,7 +5,6 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sort"
|
"sort"
|
||||||
"sync"
|
"sync"
|
||||||
@ -54,7 +53,7 @@ func (db *FSDB) Get(key []byte) []byte {
|
|||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
return nil
|
return nil
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
panic(errors.Wrap(err, fmt.Sprintf("Getting key %s (0x%X)", string(key), key)))
|
panic(errors.Wrapf(err, "Getting key %s (0x%X)", string(key), key))
|
||||||
}
|
}
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
@ -69,7 +68,7 @@ func (db *FSDB) Has(key []byte) bool {
|
|||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
return false
|
return false
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
panic(errors.Wrap(err, fmt.Sprintf("Getting key %s (0x%X)", string(key), key)))
|
panic(errors.Wrapf(err, "Getting key %s (0x%X)", string(key), key))
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@ -99,7 +98,7 @@ func (db *FSDB) SetNoLock(key []byte, value []byte) {
|
|||||||
path := db.nameToPath(key)
|
path := db.nameToPath(key)
|
||||||
err := write(path, value)
|
err := write(path, value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(errors.Wrap(err, fmt.Sprintf("Setting key %s (0x%X)", string(key), key)))
|
panic(errors.Wrapf(err, "Setting key %s (0x%X)", string(key), key))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,7 +126,7 @@ func (db *FSDB) DeleteNoLock(key []byte) {
|
|||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
return
|
return
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
panic(errors.Wrap(err, fmt.Sprintf("Removing key %s (0x%X)", string(key), key)))
|
panic(errors.Wrapf(err, "Removing key %s (0x%X)", string(key), key))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +171,7 @@ func (db *FSDB) Iterator(start, end []byte) Iterator {
|
|||||||
// Not the best, but probably not a bottleneck depending.
|
// Not the best, but probably not a bottleneck depending.
|
||||||
keys, err := list(db.dir, start, end)
|
keys, err := list(db.dir, start, end)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(errors.Wrap(err, fmt.Sprintf("Listing keys in %s", db.dir)))
|
panic(errors.Wrapf(err, "Listing keys in %s", db.dir))
|
||||||
}
|
}
|
||||||
sort.Strings(keys)
|
sort.Strings(keys)
|
||||||
it.keys = keys
|
it.keys = keys
|
||||||
@ -186,7 +185,7 @@ func (db *FSDB) ReverseIterator(start, end []byte) Iterator {
|
|||||||
|
|
||||||
func (db *FSDB) nameToPath(name []byte) string {
|
func (db *FSDB) nameToPath(name []byte) string {
|
||||||
n := url.PathEscape(string(name))
|
n := url.PathEscape(string(name))
|
||||||
return path.Join(db.dir, n)
|
return filepath.Join(db.dir, n)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read some bytes to a file.
|
// Read some bytes to a file.
|
||||||
|
@ -2,7 +2,7 @@ package db
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"path"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/syndtr/goleveldb/leveldb"
|
"github.com/syndtr/goleveldb/leveldb"
|
||||||
"github.com/syndtr/goleveldb/leveldb/errors"
|
"github.com/syndtr/goleveldb/leveldb/errors"
|
||||||
@ -27,7 +27,7 @@ type GoLevelDB struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewGoLevelDB(name string, dir string) (*GoLevelDB, error) {
|
func NewGoLevelDB(name string, dir string) (*GoLevelDB, error) {
|
||||||
dbPath := path.Join(dir, name+".db")
|
dbPath := filepath.Join(dir, name+".db")
|
||||||
db, err := leveldb.OpenFile(dbPath, nil)
|
db, err := leveldb.OpenFile(dbPath, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -170,13 +170,17 @@ func (mBatch *goLevelDBBatch) Write() {
|
|||||||
// Iterator
|
// Iterator
|
||||||
|
|
||||||
func (db *GoLevelDB) Iterator(start, end []byte) Iterator {
|
func (db *GoLevelDB) Iterator(start, end []byte) Iterator {
|
||||||
itr := &goLevelDBIterator{
|
itr := db.db.NewIterator(nil, nil)
|
||||||
source: db.db.NewIterator(nil, nil),
|
if len(start) > 0 {
|
||||||
|
itr.Seek(start)
|
||||||
|
} else {
|
||||||
|
itr.First()
|
||||||
|
}
|
||||||
|
return &goLevelDBIterator{
|
||||||
|
source: itr,
|
||||||
start: start,
|
start: start,
|
||||||
end: end,
|
end: end,
|
||||||
}
|
}
|
||||||
itr.source.Seek(start)
|
|
||||||
return itr
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *GoLevelDB) ReverseIterator(start, end []byte) Iterator {
|
func (db *GoLevelDB) ReverseIterator(start, end []byte) Iterator {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user