mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-11 15:21:02 +00:00
Add test for RBF failures
This test case triggers a failure in RBF, it's a separate patch to make it easier to see the failure.
This commit is contained in:
parent
db99b83bb2
commit
a38c219cf3
1 changed files with 90 additions and 0 deletions
|
|
@ -219,6 +219,96 @@ func TestTx_DeleteBitmap(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// deallocateTree had a bug which caused a page to be marked neither free
|
||||
// nor in-use.
|
||||
func TestTx_DeallocateTree(t *testing.T) {
|
||||
db := MustOpenDB(t)
|
||||
defer MustCloseDB(t, db)
|
||||
tx := MustBegin(t, db, true)
|
||||
defer tx.Rollback()
|
||||
var err error
|
||||
|
||||
// Create bitmap & add value.
|
||||
if err = tx.CreateBitmap("x"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
const N = 315
|
||||
slots := make([]uint64, N)
|
||||
for i := range slots {
|
||||
slots[i] = uint64(i) << 20
|
||||
}
|
||||
if _, err = tx.Add("x", slots...); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err = tx.Check(); err != nil {
|
||||
t.Fatalf("check: %v", err)
|
||||
}
|
||||
if err = tx.DeleteBitmap("x"); err != nil {
|
||||
t.Fatal(err)
|
||||
} else {
|
||||
if ok, err := tx.Contains("x", 0); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if ok {
|
||||
t.Fatal("expected no value in recreated bitmap")
|
||||
}
|
||||
}
|
||||
if err = tx.Check(); err != nil {
|
||||
t.Fatalf("check: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTx_RecreateBitmap(t *testing.T) {
|
||||
db := MustOpenDB(t)
|
||||
defer MustCloseDB(t, db)
|
||||
tx := MustBegin(t, db, true)
|
||||
defer tx.Rollback()
|
||||
|
||||
// Create bitmap & add value.
|
||||
if err := tx.CreateBitmap("x"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
const N = 825000
|
||||
slots := make([]uint64, N)
|
||||
for i := range slots {
|
||||
slots[i] = uint64(i) << 20
|
||||
}
|
||||
if _, err := tx.Add("x", slots...); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err := tx.Commit()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
tx = MustBegin(t, db, true)
|
||||
defer tx.Rollback()
|
||||
// Delete bitmap, verifying that it's gone.
|
||||
if err := tx.DeleteBitmap("x"); err != nil {
|
||||
t.Fatal(err)
|
||||
} else {
|
||||
if ok, err := tx.Contains("x", 0); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if ok {
|
||||
t.Fatal("expected no value in recreated bitmap")
|
||||
}
|
||||
}
|
||||
err = tx.Commit()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
tx = MustBegin(t, db, true)
|
||||
defer tx.Rollback()
|
||||
if err := tx.CreateBitmap("x"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := tx.Add("x", slots...); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = tx.Commit()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTx_RenameBitmap(t *testing.T) {
|
||||
db := MustOpenDB(t)
|
||||
defer MustCloseDB(t, db)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue