Skip to content

Commit e0e630f

Browse files
committed
Ensure expired items do not load
See #112
1 parent 4ac2e32 commit e0e630f

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

buntdb.go

+7
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,10 @@ func (db *DB) readLoad(rd io.Reader, modTime time.Time) (n int64, err error) {
922922
exat: exat,
923923
},
924924
})
925+
} else {
926+
db.deleteFromDatabase(&dbItem{
927+
key: parts[1],
928+
})
925929
}
926930
} else {
927931
db.insertIntoDatabase(&dbItem{key: parts[1], val: parts[2]})
@@ -1637,6 +1641,9 @@ func (tx *Tx) scan(desc, gt, lt bool, index, start, stop string,
16371641
// wrap a btree specific iterator around the user-defined iterator.
16381642
iter := func(item interface{}) bool {
16391643
dbi := item.(*dbItem)
1644+
if dbi.expired() {
1645+
return true
1646+
}
16401647
return iterator(dbi.key, dbi.val)
16411648
}
16421649
var tr *btree.BTree

buntdb_test.go

+44-4
Original file line numberDiff line numberDiff line change
@@ -2499,10 +2499,10 @@ func Benchmark_Descend_10000(t *testing.B) {
24992499
}
25002500

25012501
/*
2502-
func Benchmark_Spatial_2D(t *testing.B) {
2503-
N := 100000
2504-
db, _, _ := benchOpenFillData(t, N, true, true, false, true, 100)
2505-
defer benchClose(t, false, db)
2502+
func Benchmark_Spatial_2D(t *testing.B) {
2503+
N := 100000
2504+
db, _, _ := benchOpenFillData(t, N, true, true, false, true, 100)
2505+
defer benchClose(t, false, db)
25062506
25072507
}
25082508
*/
@@ -2918,3 +2918,43 @@ func TestWrappedError(t *testing.T) {
29182918
}()
29192919
panicErr(errors.New("my fake error"))
29202920
}
2921+
2922+
func TestIssue112(t *testing.T) {
2923+
defer os.RemoveAll("data.db")
2924+
db, err := Open("data.db")
2925+
if err != nil {
2926+
panicErr(err)
2927+
}
2928+
err = db.Update(func(tx *Tx) error {
2929+
_, _, err := tx.Set("key:112", "value:112-old", nil)
2930+
return err
2931+
})
2932+
if err != nil {
2933+
panicErr(err)
2934+
}
2935+
err = db.Update(func(tx *Tx) error {
2936+
_, _, err := tx.Set("key:112", "value:112", &SetOptions{Expires: true, TTL: time.Second})
2937+
return err
2938+
})
2939+
if err != nil {
2940+
panicErr(err)
2941+
}
2942+
db.Close()
2943+
time.Sleep(time.Second)
2944+
db, err = Open("data.db")
2945+
if err != nil {
2946+
panicErr(err)
2947+
}
2948+
err = db.View(func(tx *Tx) error {
2949+
_, err := tx.Get("key:112")
2950+
return err
2951+
})
2952+
assert.Assert(err == ErrNotFound)
2953+
db.View(func(tx *Tx) error {
2954+
err := tx.Ascend("", func(key, value string) bool {
2955+
t.Fatalf("key: %s, value: %s\n", key, value)
2956+
return true
2957+
})
2958+
return err
2959+
})
2960+
}

0 commit comments

Comments
 (0)