mirror of https://github.com/tikv/client-go.git
memdb: fix memdb snapshot get/iter is not actually snapshot (#1393)
* fix memdb snapshot get/iter is not actually snapshot Signed-off-by: you06 <you1474600@gmail.com> * rename test Signed-off-by: you06 <you1474600@gmail.com> --------- Signed-off-by: you06 <you1474600@gmail.com>
This commit is contained in:
parent
77526daca4
commit
75e3705e58
|
|
@ -343,7 +343,7 @@ func (l *memdbVlog) getSnapshotValue(addr memdbArenaAddr, snap *MemDBCheckpoint)
|
|||
if result.isNull() {
|
||||
return nil, false
|
||||
}
|
||||
return l.getValue(addr), true
|
||||
return l.getValue(result), true
|
||||
}
|
||||
|
||||
func (l *memdbVlog) selectValueHistory(addr memdbArenaAddr, predicate func(memdbArenaAddr) bool) memdbArenaAddr {
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
package unionstore
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
|
@ -860,3 +861,38 @@ func TestUnsetTemporaryFlag(t *testing.T) {
|
|||
require.Nil(err)
|
||||
require.False(flags.HasNeedConstraintCheckInPrewrite())
|
||||
}
|
||||
|
||||
func TestSnapshotGetIter(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
buffer := newMemDB()
|
||||
var getters []Getter
|
||||
var iters []Iterator
|
||||
for i := 0; i < 100; i++ {
|
||||
assert.Nil(buffer.Set([]byte{byte(0)}, []byte{byte(i)}))
|
||||
// getter
|
||||
getter := buffer.SnapshotGetter()
|
||||
val, err := getter.Get(context.Background(), []byte{byte(0)})
|
||||
assert.Nil(err)
|
||||
assert.Equal(val, []byte{byte(min(i, 50))})
|
||||
getters = append(getters, getter)
|
||||
// iter
|
||||
iter := buffer.SnapshotIter(nil, nil)
|
||||
assert.Nil(err)
|
||||
assert.Equal(iter.Key(), []byte{byte(0)})
|
||||
assert.Equal(iter.Value(), []byte{byte(min(i, 50))})
|
||||
iter.Close()
|
||||
iters = append(iters, buffer.SnapshotIter(nil, nil))
|
||||
if i == 50 {
|
||||
_ = buffer.Staging()
|
||||
}
|
||||
}
|
||||
for _, getter := range getters {
|
||||
val, err := getter.Get(context.Background(), []byte{byte(0)})
|
||||
assert.Nil(err)
|
||||
assert.Equal(val, []byte{byte(50)})
|
||||
}
|
||||
for _, iter := range iters {
|
||||
assert.Equal(iter.Key(), []byte{byte(0)})
|
||||
assert.Equal(iter.Value(), []byte{byte(50)})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue