diff --git a/db.go b/db.go index 514e7e903..1d7cd137f 100644 --- a/db.go +++ b/db.go @@ -1135,6 +1135,8 @@ func (db *DB) grow(sz int) error { // https://github.com/boltdb/bolt/issues/284 if !db.NoGrowSync && !db.readOnly { if runtime.GOOS != "windows" { + // gofail: var resizeFileError string + // return errors.New(resizeFileError) if err := db.file.Truncate(int64(sz)); err != nil { return fmt.Errorf("file resize error: %s", err) } diff --git a/tests/failpoint/db_failpoint_test.go b/tests/failpoint/db_failpoint_test.go index ef7d7ca63..b38b16ac1 100644 --- a/tests/failpoint/db_failpoint_test.go +++ b/tests/failpoint/db_failpoint_test.go @@ -94,3 +94,31 @@ func TestFailpoint_mLockFail_When_remap(t *testing.T) { require.NoError(t, err) } + +func TestFailpoint_ResizeFileFail(t *testing.T) { + db := btesting.MustCreateDB(t) + + err := gofail.Enable("resizeFileError", `return("resizeFile somehow failed")`) + require.NoError(t, err) + + err = db.Fill([]byte("data"), 1, 10000, + func(tx int, k int) []byte { return []byte(fmt.Sprintf("%04d", k)) }, + func(tx int, k int) []byte { return make([]byte, 100) }, + ) + + require.Error(t, err) + require.ErrorContains(t, err, "resizeFile somehow failed") + + // It should work after disabling the failpoint. + err = gofail.Disable("resizeFileError") + require.NoError(t, err) + db.MustClose() + db.MustReopen() + + err = db.Fill([]byte("data"), 1, 10000, + func(tx int, k int) []byte { return []byte(fmt.Sprintf("%04d", k)) }, + func(tx int, k int) []byte { return make([]byte, 100) }, + ) + + require.NoError(t, err) +}