db: fixes to fsdb and clevledb

This commit is contained in:
Ethan Buchman
2017-12-12 19:22:08 -05:00
parent c547caf04f
commit ba8c5045b5
3 changed files with 19 additions and 16 deletions

View File

@ -15,30 +15,26 @@ func testBackendGetSetDelete(t *testing.T, backend string) {
dir, dirname := cmn.Tempdir(fmt.Sprintf("test_backend_%s_", backend)) dir, dirname := cmn.Tempdir(fmt.Sprintf("test_backend_%s_", backend))
defer dir.Close() defer dir.Close()
db := NewDB("testdb", backend, dirname) db := NewDB("testdb", backend, dirname)
require.Nil(t, db.Get([]byte(""))) key := []byte("abc")
require.Nil(t, db.Get(key))
// Set empty ("") // Set empty ("")
db.Set([]byte(""), []byte("")) db.Set(key, []byte(""))
require.NotNil(t, db.Get([]byte(""))) require.NotNil(t, db.Get(key))
require.Empty(t, db.Get([]byte(""))) require.Empty(t, db.Get(key))
// Set empty (nil) // Set empty (nil)
db.Set([]byte(""), nil) db.Set(key, nil)
require.NotNil(t, db.Get([]byte(""))) require.NotNil(t, db.Get(key))
require.Empty(t, db.Get([]byte(""))) require.Empty(t, db.Get(key))
// Delete // Delete
db.Delete([]byte("")) db.Delete(key)
require.Nil(t, db.Get([]byte(""))) require.Nil(t, db.Get(key))
} }
func TestBackendsGetSetDelete(t *testing.T) { func TestBackendsGetSetDelete(t *testing.T) {
for dbType, _ := range backends { for dbType, _ := range backends {
if dbType == "fsdb" {
// TODO: handle
// fsdb cant deal with length 0 keys
continue
}
testBackendGetSetDelete(t, dbType) testBackendGetSetDelete(t, dbType)
} }
} }

View File

@ -48,6 +48,7 @@ func NewCLevelDB(name string, dir string) (*CLevelDB, error) {
} }
func (db *CLevelDB) Get(key []byte) []byte { func (db *CLevelDB) Get(key []byte) []byte {
panicNilKey(key)
res, err := db.db.Get(db.ro, key) res, err := db.db.Get(db.ro, key)
if err != nil { if err != nil {
panic(err) panic(err)
@ -56,10 +57,12 @@ func (db *CLevelDB) Get(key []byte) []byte {
} }
func (db *CLevelDB) Has(key []byte) bool { func (db *CLevelDB) Has(key []byte) bool {
panicNilKey(key)
panic("not implemented yet") panic("not implemented yet")
} }
func (db *CLevelDB) Set(key []byte, value []byte) { func (db *CLevelDB) Set(key []byte, value []byte) {
panicNilKey(key)
err := db.db.Put(db.wo, key, value) err := db.db.Put(db.wo, key, value)
if err != nil { if err != nil {
panic(err) panic(err)
@ -67,6 +70,7 @@ func (db *CLevelDB) Set(key []byte, value []byte) {
} }
func (db *CLevelDB) SetSync(key []byte, value []byte) { func (db *CLevelDB) SetSync(key []byte, value []byte) {
panicNilKey(key)
err := db.db.Put(db.woSync, key, value) err := db.db.Put(db.woSync, key, value)
if err != nil { if err != nil {
panic(err) panic(err)
@ -74,6 +78,7 @@ func (db *CLevelDB) SetSync(key []byte, value []byte) {
} }
func (db *CLevelDB) Delete(key []byte) { func (db *CLevelDB) Delete(key []byte) {
panicNilKey(key)
err := db.db.Delete(db.wo, key) err := db.db.Delete(db.wo, key)
if err != nil { if err != nil {
panic(err) panic(err)
@ -81,6 +86,7 @@ func (db *CLevelDB) Delete(key []byte) {
} }
func (db *CLevelDB) DeleteSync(key []byte) { func (db *CLevelDB) DeleteSync(key []byte) {
panicNilKey(key)
err := db.db.Delete(db.woSync, key) err := db.db.Delete(db.woSync, key)
if err != nil { if err != nil {
panic(err) panic(err)

View File

@ -119,7 +119,8 @@ func (db *FSDB) DeleteSync(key []byte) {
// NOTE: Implements atomicSetDeleter. // NOTE: Implements atomicSetDeleter.
func (db *FSDB) DeleteNoLock(key []byte) { func (db *FSDB) DeleteNoLock(key []byte) {
panicNilKey(key) panicNilKey(key)
err := remove(string(key)) path := db.nameToPath(key)
err := remove(path)
if os.IsNotExist(err) { if os.IsNotExist(err) {
return return
} else if err != nil { } else if err != nil {
@ -210,7 +211,7 @@ func read(path string) ([]byte, error) {
// Write some bytes from a file. // Write some bytes from a file.
// CONTRACT: returns os errors directly without wrapping. // CONTRACT: returns os errors directly without wrapping.
func write(path string, d []byte) error { func write(path string, d []byte) error {
f, err := os.OpenFile(path, os.O_CREATE|os.O_EXCL|os.O_WRONLY, keyPerm) f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, keyPerm)
if err != nil { if err != nil {
return err return err
} }