1
0
mirror of https://github.com/taigrr/bitcask synced 2025-01-18 04:03:17 -08:00

Added WithMaxKeySize() and WithMaxValueSize() options

This commit is contained in:
James Mills 2019-03-14 21:31:23 +10:00
parent bc8f6c6718
commit d24a01797a
No known key found for this signature in database
GPG Key ID: AC4C014F1440EBD6
2 changed files with 58 additions and 1 deletions

View File

@ -13,7 +13,9 @@ import (
)
var (
ErrKeyNotFound = errors.New("error: key not found")
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")
)
@ -67,6 +69,13 @@ func (b *Bitcask) Get(key string) ([]byte, error) {
}
func (b *Bitcask) Put(key string, value []byte) error {
if len(key) > b.opts.MaxKeySize {
return ErrKeyTooLarge
}
if len(value) > b.opts.MaxValueSize {
return ErrValueTooLarge
}
index, err := b.put(key, value)
if err != nil {
return err

View File

@ -128,6 +128,54 @@ func TestDeletedKeys(t *testing.T) {
})
}
func TestMaxKeySize(t *testing.T) {
assert := assert.New(t)
testdir, err := ioutil.TempDir("", "bitcask")
assert.NoError(err)
var db *Bitcask
size := 16
t.Run("Open", func(t *testing.T) {
db, err = Open(testdir, WithMaxKeySize(size))
assert.NoError(err)
})
t.Run("Put", func(t *testing.T) {
key := strings.Repeat(" ", size+1)
value := []byte("foobar")
err = db.Put(key, value)
assert.Error(err)
assert.Equal("error: key too large", err.Error())
})
}
func TestMaxValueSize(t *testing.T) {
assert := assert.New(t)
testdir, err := ioutil.TempDir("", "bitcask")
assert.NoError(err)
var db *Bitcask
size := 16
t.Run("Open", func(t *testing.T) {
db, err = Open(testdir, WithMaxValueSize(size))
assert.NoError(err)
})
t.Run("Put", func(t *testing.T) {
key := "foo"
value := []byte(strings.Repeat(" ", size+1))
err = db.Put(key, value)
assert.Error(err)
assert.Equal("error: value too large", err.Error())
})
}
func TestMerge(t *testing.T) {
assert := assert.New(t)