Browse Source

fixes from @melekes

pull/1842/head
Ethan Buchman 7 years ago
parent
commit
d4aeca8ce3
4 changed files with 27 additions and 32 deletions
  1. +9
    -17
      db/backend_test.go
  2. +2
    -2
      db/c_level_db.go
  3. +6
    -7
      db/fsdb.go
  4. +10
    -6
      db/go_level_db.go

+ 9
- 17
db/backend_test.go View File

@ -3,7 +3,7 @@ package db
import (
"fmt"
"os"
"path"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
@ -12,7 +12,7 @@ import (
)
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) {
@ -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) {
// test all backends
for dbType, creator := range backends {
@ -62,12 +53,13 @@ func TestBackendsNilKeys(t *testing.T) {
defer cleanupDBDir("", name)
assert.Nil(t, err)
assertPanics(t, dbType, "get", func() { db.Get(nil) })
assertPanics(t, dbType, "has", func() { db.Has(nil) })
assertPanics(t, dbType, "set", func() { db.Set(nil, []byte("abc")) })
assertPanics(t, dbType, "setsync", func() { db.SetSync(nil, []byte("abc")) })
assertPanics(t, dbType, "delete", func() { db.Delete(nil) })
assertPanics(t, dbType, "deletesync", func() { db.DeleteSync(nil) })
panicMsg := "expecting %s.%s to panic"
assert.Panics(t, func() { db.Get(nil) }, panicMsg, dbType, "get")
assert.Panics(t, func() { db.Has(nil) }, panicMsg, dbType, "has")
assert.Panics(t, func() { db.Set(nil, []byte("abc")) }, panicMsg, dbType, "set")
assert.Panics(t, func() { db.SetSync(nil, []byte("abc")) }, panicMsg, dbType, "setsync")
assert.Panics(t, func() { db.Delete(nil) }, panicMsg, dbType, "delete")
assert.Panics(t, func() { db.DeleteSync(nil) }, panicMsg, dbType, "deletesync")
db.Close()
}


+ 2
- 2
db/c_level_db.go View File

@ -4,7 +4,7 @@ package db
import (
"fmt"
"path"
"path/filepath"
"github.com/jmhodges/levigo"
)
@ -27,7 +27,7 @@ type CLevelDB struct {
}
func NewCLevelDB(name string, dir string) (*CLevelDB, error) {
dbPath := path.Join(dir, name+".db")
dbPath := filepath.Join(dir, name+".db")
opts := levigo.NewOptions()
opts.SetCache(levigo.NewLRUCache(1 << 30))


+ 6
- 7
db/fsdb.go View File

@ -5,7 +5,6 @@ import (
"io/ioutil"
"net/url"
"os"
"path"
"path/filepath"
"sort"
"sync"
@ -54,7 +53,7 @@ func (db *FSDB) Get(key []byte) []byte {
if os.IsNotExist(err) {
return 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
}
@ -69,7 +68,7 @@ func (db *FSDB) Has(key []byte) bool {
if os.IsNotExist(err) {
return false
} 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
}
@ -99,7 +98,7 @@ func (db *FSDB) SetNoLock(key []byte, value []byte) {
path := db.nameToPath(key)
err := write(path, value)
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) {
return
} 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.
keys, err := list(db.dir, start, end)
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)
it.keys = keys
@ -186,7 +185,7 @@ func (db *FSDB) ReverseIterator(start, end []byte) Iterator {
func (db *FSDB) nameToPath(name []byte) string {
n := url.PathEscape(string(name))
return path.Join(db.dir, n)
return filepath.Join(db.dir, n)
}
// Read some bytes to a file.


+ 10
- 6
db/go_level_db.go View File

@ -2,7 +2,7 @@ package db
import (
"fmt"
"path"
"path/filepath"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/errors"
@ -27,7 +27,7 @@ type GoLevelDB struct {
}
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)
if err != nil {
return nil, err
@ -170,13 +170,17 @@ func (mBatch *goLevelDBBatch) Write() {
// Iterator
func (db *GoLevelDB) Iterator(start, end []byte) Iterator {
itr := &goLevelDBIterator{
source: db.db.NewIterator(nil, nil),
itr := db.db.NewIterator(nil, nil)
if len(start) > 0 {
itr.Seek(start)
} else {
itr.First()
}
return &goLevelDBIterator{
source: itr,
start: start,
end: end,
}
itr.source.Seek(start)
return itr
}
func (db *GoLevelDB) ReverseIterator(start, end []byte) Iterator {


Loading…
Cancel
Save