Skip to content

Commit

Permalink
leveldb: Fix incorrect logic on DB.get that cause recently deleted ke…
Browse files Browse the repository at this point in the history
…ys not being hidden

Should fix issue #42.
  • Loading branch information
syndtr committed Jan 13, 2014
1 parent 7942074 commit 92de35c
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 15 deletions.
30 changes: 15 additions & 15 deletions leveldb/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -421,23 +421,23 @@ func (d *DB) get(key []byte, seq uint64, ro *opt.ReadOptions) (value []byte, err
ucmp := s.cmp.cmp
ikey := newIKey(key, seq, tSeek)

memGet := func(m *memdb.DB) bool {
var rkey []byte
rkey, value, err = m.Find(ikey)
if err != nil {
return false
em, fm := d.getMems()
for _, m := range [...]*memdb.DB{em, fm} {
if m == nil {
continue
}
ukey, _, t, ok := parseIkey(rkey)
if !ok || ucmp.Compare(ukey, key) != 0 || t == tDel {
value = nil
err = ErrNotFound
return false
mk, mv, me := m.Find(ikey)
if me == nil {
ukey, _, t, ok := parseIkey(mk)
if ok && ucmp.Compare(ukey, key) == 0 {
if t == tDel {
return nil, ErrNotFound
}
return mv, nil
}
} else if me != ErrNotFound {
return nil, me
}
return true
}

if mem, frozenMem := d.getMems(); memGet(mem) || (frozenMem != nil && memGet(frozenMem)) {
return
}

v := s.version()
Expand Down
11 changes: 11 additions & 0 deletions leveldb/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1811,3 +1811,14 @@ func TestDb_CreateReopenDbOnFile2(t *testing.T) {
}
}
}

func TestDb_DeletionMarkersOnMemdb(t *testing.T) {
h := newDbHarness(t)
defer h.close()

h.put("foo", "v1")
h.compactMem()
h.delete("foo")
h.get("foo", false)
h.getKeyVal("")
}

0 comments on commit 92de35c

Please sign in to comment.