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

Return error if invalid range

This commit is contained in:
James Mills 2020-12-23 18:38:49 +10:00
parent 20983b6713
commit 877b6a175c
No known key found for this signature in database
GPG Key ID: AC4C014F1440EBD6
3 changed files with 15 additions and 3 deletions

View File

@ -57,6 +57,7 @@ var (
// (typically opened by another process)
ErrDatabaseLocked = errors.New("error: database locked")
ErrInvalidRange = errors.New("error: invalid range")
ErrInvalidVersion = errors.New("error: invalid db version")
// ErrMergeInProgress is the error returned if merge is called when already a merge
@ -276,15 +277,18 @@ func (b *Bitcask) Scan(prefix []byte, f func(key []byte) error) (err error) {
// If the function returns an error no further keys are processed and the
// first error returned.
func (b *Bitcask) Range(start, end []byte, f func(key []byte) error) (err error) {
if bytes.Compare(start, end) == 1 {
return ErrInvalidRange
}
b.trie.ForEach(func(node art.Node) bool {
if bytes.Compare(node.Key(), start) >= 0 && bytes.Compare(node.Key(), end) <= 0 {
if err = f(node.Key()); err != nil {
return false
}
return true
} else {
return false
}
return false
})
return
}

View File

@ -1679,6 +1679,14 @@ func TestRange(t *testing.T) {
assert.Error(err)
assert.Equal(ErrMockError, err)
})
t.Run("InvalidRange", func(t *testing.T) {
err = db.Range([]byte("foo_3"), []byte("foo_1"), func(key []byte) error {
return nil
})
assert.Error(err)
assert.Equal(ErrInvalidRange, err)
})
}
func TestLocking(t *testing.T) {

View File

@ -53,7 +53,7 @@ func _range(path, start, end string) int {
return nil
})
if err != nil {
log.WithError(err).Error("error rangening keys")
log.WithError(err).Error("error ranging over keys")
return 1
}