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() {
|
if result.isNull() {
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
return l.getValue(addr), true
|
return l.getValue(result), true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *memdbVlog) selectValueHistory(addr memdbArenaAddr, predicate func(memdbArenaAddr) bool) memdbArenaAddr {
|
func (l *memdbVlog) selectValueHistory(addr memdbArenaAddr, predicate func(memdbArenaAddr) bool) memdbArenaAddr {
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@
|
||||||
package unionstore
|
package unionstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
@ -860,3 +861,38 @@ func TestUnsetTemporaryFlag(t *testing.T) {
|
||||||
require.Nil(err)
|
require.Nil(err)
|
||||||
require.False(flags.HasNeedConstraintCheckInPrewrite())
|
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