Added wrapped error

This commit wraps the errors that could, under rare a occasion,
cause a panic. Allowing for a graceful recover by select
conditions.

Please see #82 for more info
This commit is contained in:
tidwall 2022-04-27 17:05:38 -07:00
parent 5627a11dd1
commit a54244d6db
2 changed files with 24 additions and 10 deletions

View File

@ -7,6 +7,7 @@ package buntdb
import ( import (
"bufio" "bufio"
"errors" "errors"
"fmt"
"io" "io"
"os" "os"
"sort" "sort"
@ -749,13 +750,13 @@ func (db *DB) Shrink() error {
if err := db.file.Close(); err != nil { if err := db.file.Close(); err != nil {
return err return err
} }
// Any failures below here is really bad. So just panic. // Any failures below here are really bad. So just panic.
if err := os.Rename(tmpname, fname); err != nil { if err := os.Rename(tmpname, fname); err != nil {
panic(err) panicErr(err)
} }
db.file, err = os.OpenFile(fname, os.O_CREATE|os.O_RDWR, 0666) db.file, err = os.OpenFile(fname, os.O_CREATE|os.O_RDWR, 0666)
if err != nil { if err != nil {
panic(err) panicErr(err)
} }
pos, err := db.file.Seek(0, 2) pos, err := db.file.Seek(0, 2)
if err != nil { if err != nil {
@ -766,6 +767,10 @@ func (db *DB) Shrink() error {
}() }()
} }
func panicErr(err error) error {
panic(fmt.Errorf("buntdb: %w", err))
}
// readLoad reads from the reader and loads commands into the database. // readLoad reads from the reader and loads commands into the database.
// modTime is the modified time of the reader, should be no greater than // modTime is the modified time of the reader, should be no greater than
// the current time.Now(). // the current time.Now().
@ -1209,10 +1214,10 @@ func (tx *Tx) Commit() error {
// should be killed to avoid corrupting the file. // should be killed to avoid corrupting the file.
pos, err := tx.db.file.Seek(-int64(n), 1) pos, err := tx.db.file.Seek(-int64(n), 1)
if err != nil { if err != nil {
panic(err) panicErr(err)
} }
if err := tx.db.file.Truncate(pos); err != nil { if err := tx.db.file.Truncate(pos); err != nil {
panic(err) panicErr(err)
} }
} }
tx.rollbackInner() tx.rollbackInner()

View File

@ -2903,9 +2903,18 @@ func TestEstSize(t *testing.T) {
assert.Assert(estIntSize(-12) == 3) assert.Assert(estIntSize(-12) == 3)
assert.Assert(estIntSize(-124) == 4) assert.Assert(estIntSize(-124) == 4)
}) })
// t.Run("estI }
// // dbi := dbItem{
// // key: "hello", func TestWrappedError(t *testing.T) {
// // value: " defer func() {
// // } if err, ok := recover().(error); ok {
if strings.HasPrefix(err.Error(), "buntdb: ") {
err := errors.Unwrap(err)
if err.Error() != "my fake error" {
t.Fatal("!")
}
}
}
}()
panicErr(errors.New("my fake error"))
} }