fixes from @melekes

This commit is contained in:
Ethan Buchman 2017-12-13 20:11:11 -05:00
parent 318982c0ba
commit d4aeca8ce3
4 changed files with 27 additions and 32 deletions

View File

@ -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()
} }

View File

@ -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))

View File

@ -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.

View 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 {