mirror of
https://github.com/taigrr/bitcask
synced 2025-01-18 04:03:17 -08:00
Improved error messages
This commit is contained in:
parent
d2f44d1513
commit
74563ced5d
17
bitcask.go
17
bitcask.go
@ -1,7 +1,7 @@
|
|||||||
package bitcask
|
package bitcask
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
@ -13,13 +13,6 @@ import (
|
|||||||
"github.com/prologic/trie"
|
"github.com/prologic/trie"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
ErrKeyNotFound = errors.New("error: key not found")
|
|
||||||
ErrKeyTooLarge = errors.New("error: key too large")
|
|
||||||
ErrValueTooLarge = errors.New("error: value too large")
|
|
||||||
ErrDatabaseLocked = errors.New("error: database locked")
|
|
||||||
)
|
|
||||||
|
|
||||||
type Bitcask struct {
|
type Bitcask struct {
|
||||||
*flock.Flock
|
*flock.Flock
|
||||||
|
|
||||||
@ -54,7 +47,7 @@ func (b *Bitcask) Get(key string) ([]byte, error) {
|
|||||||
|
|
||||||
item, ok := b.keydir.Get(key)
|
item, ok := b.keydir.Get(key)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, ErrKeyNotFound
|
return nil, fmt.Errorf("error: key not found %s", key)
|
||||||
}
|
}
|
||||||
|
|
||||||
if item.FileID == b.curr.id {
|
if item.FileID == b.curr.id {
|
||||||
@ -73,10 +66,10 @@ func (b *Bitcask) Get(key string) ([]byte, error) {
|
|||||||
|
|
||||||
func (b *Bitcask) Put(key string, value []byte) error {
|
func (b *Bitcask) Put(key string, value []byte) error {
|
||||||
if len(key) > b.opts.MaxKeySize {
|
if len(key) > b.opts.MaxKeySize {
|
||||||
return ErrKeyTooLarge
|
return fmt.Errorf("error: key too large %d > %d", len(key), b.opts.MaxKeySize)
|
||||||
}
|
}
|
||||||
if len(value) > b.opts.MaxValueSize {
|
if len(value) > b.opts.MaxValueSize {
|
||||||
return ErrValueTooLarge
|
return fmt.Errorf("error: value too large %d > %d", len(value), b.opts.MaxValueSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
index, err := b.put(key, value)
|
index, err := b.put(key, value)
|
||||||
@ -365,7 +358,7 @@ func Open(path string, options ...func(*Bitcask) error) (*Bitcask, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !locked {
|
if !locked {
|
||||||
return nil, ErrDatabaseLocked
|
return nil, fmt.Errorf("error: database locked %s", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
return bitcask, nil
|
return bitcask, nil
|
||||||
|
@ -45,7 +45,7 @@ func TestAll(t *testing.T) {
|
|||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
_, err = db.Get("foo")
|
_, err = db.Get("foo")
|
||||||
assert.Error(err)
|
assert.Error(err)
|
||||||
assert.Equal(err.Error(), "error: key not found")
|
assert.Equal("error: key not found foo", err.Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Sync", func(t *testing.T) {
|
t.Run("Sync", func(t *testing.T) {
|
||||||
@ -92,7 +92,7 @@ func TestDeletedKeys(t *testing.T) {
|
|||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
_, err = db.Get("foo")
|
_, err = db.Get("foo")
|
||||||
assert.Error(err)
|
assert.Error(err)
|
||||||
assert.Equal("error: key not found", err.Error())
|
assert.Equal("error: key not found foo", err.Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Sync", func(t *testing.T) {
|
t.Run("Sync", func(t *testing.T) {
|
||||||
@ -120,7 +120,7 @@ func TestDeletedKeys(t *testing.T) {
|
|||||||
t.Run("Get", func(t *testing.T) {
|
t.Run("Get", func(t *testing.T) {
|
||||||
_, err = db.Get("foo")
|
_, err = db.Get("foo")
|
||||||
assert.Error(err)
|
assert.Error(err)
|
||||||
assert.Equal("error: key not found", err.Error())
|
assert.Equal("error: key not found foo", err.Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Close", func(t *testing.T) {
|
t.Run("Close", func(t *testing.T) {
|
||||||
@ -138,19 +138,17 @@ func TestMaxKeySize(t *testing.T) {
|
|||||||
|
|
||||||
var db *Bitcask
|
var db *Bitcask
|
||||||
|
|
||||||
size := 16
|
|
||||||
|
|
||||||
t.Run("Open", func(t *testing.T) {
|
t.Run("Open", func(t *testing.T) {
|
||||||
db, err = Open(testdir, WithMaxKeySize(size))
|
db, err = Open(testdir, WithMaxKeySize(16))
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Put", func(t *testing.T) {
|
t.Run("Put", func(t *testing.T) {
|
||||||
key := strings.Repeat(" ", size+1)
|
key := strings.Repeat(" ", 17)
|
||||||
value := []byte("foobar")
|
value := []byte("foobar")
|
||||||
err = db.Put(key, value)
|
err = db.Put(key, value)
|
||||||
assert.Error(err)
|
assert.Error(err)
|
||||||
assert.Equal("error: key too large", err.Error())
|
assert.Equal("error: key too large 17 > 16", err.Error())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,19 +160,17 @@ func TestMaxValueSize(t *testing.T) {
|
|||||||
|
|
||||||
var db *Bitcask
|
var db *Bitcask
|
||||||
|
|
||||||
size := 16
|
|
||||||
|
|
||||||
t.Run("Open", func(t *testing.T) {
|
t.Run("Open", func(t *testing.T) {
|
||||||
db, err = Open(testdir, WithMaxValueSize(size))
|
db, err = Open(testdir, WithMaxValueSize(16))
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Put", func(t *testing.T) {
|
t.Run("Put", func(t *testing.T) {
|
||||||
key := "foo"
|
key := "foo"
|
||||||
value := []byte(strings.Repeat(" ", size+1))
|
value := []byte(strings.Repeat(" ", 17))
|
||||||
err = db.Put(key, value)
|
err = db.Put(key, value)
|
||||||
assert.Error(err)
|
assert.Error(err)
|
||||||
assert.Equal("error: value too large", err.Error())
|
assert.Equal("error: value too large 17 > 16", err.Error())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -393,7 +389,7 @@ func TestLocking(t *testing.T) {
|
|||||||
|
|
||||||
_, err = Open(testdir)
|
_, err = Open(testdir)
|
||||||
assert.Error(err)
|
assert.Error(err)
|
||||||
assert.Equal("error: database locked", err.Error())
|
assert.Equal(fmt.Sprintf("error: database locked %s", testdir), err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
type benchmarkTestCase struct {
|
type benchmarkTestCase struct {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user