fix: when rewrite complex type, use overlay rather than append or merge (#932)
This commit is contained in:
parent
0a7aad7459
commit
a340c31510
|
@ -24,6 +24,7 @@ func (o *HashObject) LoadFromBuffer(rd io.Reader, key string, typeByte byte) {
|
||||||
func (o *HashObject) Rewrite() <-chan RedisCmd {
|
func (o *HashObject) Rewrite() <-chan RedisCmd {
|
||||||
go func() {
|
go func() {
|
||||||
defer close(o.cmdC)
|
defer close(o.cmdC)
|
||||||
|
o.cmdC <- RedisCmd{"del", o.key}
|
||||||
switch o.typeByte {
|
switch o.typeByte {
|
||||||
case rdbTypeHash:
|
case rdbTypeHash:
|
||||||
o.readHash()
|
o.readHash()
|
||||||
|
|
|
@ -30,6 +30,7 @@ func (o *ListObject) LoadFromBuffer(rd io.Reader, key string, typeByte byte) {
|
||||||
func (o *ListObject) Rewrite() <-chan RedisCmd {
|
func (o *ListObject) Rewrite() <-chan RedisCmd {
|
||||||
go func() {
|
go func() {
|
||||||
defer close(o.cmdC)
|
defer close(o.cmdC)
|
||||||
|
o.cmdC <- RedisCmd{"del", o.key}
|
||||||
switch o.typeByte {
|
switch o.typeByte {
|
||||||
case rdbTypeList:
|
case rdbTypeList:
|
||||||
o.readList()
|
o.readList()
|
||||||
|
|
|
@ -140,6 +140,7 @@ func (o *BloomObject) Rewrite() <-chan RedisCmd {
|
||||||
} else {
|
} else {
|
||||||
h = getEncodedHeader(&o.sb, true, true)
|
h = getEncodedHeader(&o.sb, true, true)
|
||||||
}
|
}
|
||||||
|
cmdC <- RedisCmd{"del", o.key}
|
||||||
cmd := RedisCmd{"BF.LOADCHUNK", o.key, "1", h}
|
cmd := RedisCmd{"BF.LOADCHUNK", o.key, "1", h}
|
||||||
cmdC <- cmd
|
cmdC <- cmd
|
||||||
curIter := uint64(1)
|
curIter := uint64(1)
|
||||||
|
|
|
@ -24,6 +24,7 @@ func (o *SetObject) LoadFromBuffer(rd io.Reader, key string, typeByte byte) {
|
||||||
func (o *SetObject) Rewrite() <-chan RedisCmd {
|
func (o *SetObject) Rewrite() <-chan RedisCmd {
|
||||||
go func() {
|
go func() {
|
||||||
defer close(o.cmdC)
|
defer close(o.cmdC)
|
||||||
|
o.cmdC <- RedisCmd{"del", o.key}
|
||||||
switch o.typeByte {
|
switch o.typeByte {
|
||||||
case rdbTypeSet:
|
case rdbTypeSet:
|
||||||
o.readSet()
|
o.readSet()
|
||||||
|
|
|
@ -19,6 +19,9 @@ func testOne(t *testing.T, typeByte byte, setData string, values []string) {
|
||||||
cmdC := o.Rewrite()
|
cmdC := o.Rewrite()
|
||||||
var elements []string
|
var elements []string
|
||||||
for cmd := range cmdC {
|
for cmd := range cmdC {
|
||||||
|
if cmd[0] == "del" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
elements = append(elements, cmd[2])
|
elements = append(elements, cmd[2])
|
||||||
}
|
}
|
||||||
if len(elements) != len(values) {
|
if len(elements) != len(values) {
|
||||||
|
|
|
@ -57,6 +57,7 @@ func (o *StreamObject) LoadFromBuffer(rd io.Reader, key string, typeByte byte) {
|
||||||
func (o *StreamObject) Rewrite() <-chan RedisCmd {
|
func (o *StreamObject) Rewrite() <-chan RedisCmd {
|
||||||
go func() {
|
go func() {
|
||||||
defer close(o.cmdC)
|
defer close(o.cmdC)
|
||||||
|
o.cmdC <- RedisCmd{"del", o.key}
|
||||||
switch o.typeByte {
|
switch o.typeByte {
|
||||||
case rdbTypeStreamListpacks:
|
case rdbTypeStreamListpacks:
|
||||||
o.readStream()
|
o.readStream()
|
||||||
|
|
|
@ -26,6 +26,7 @@ func (o *TairHashObject) Rewrite() <-chan RedisCmd {
|
||||||
dictSizeStr := structure.ReadModuleUnsigned(rd)
|
dictSizeStr := structure.ReadModuleUnsigned(rd)
|
||||||
key := structure.ReadModuleString(rd)
|
key := structure.ReadModuleString(rd)
|
||||||
size, _ := strconv.Atoi(dictSizeStr)
|
size, _ := strconv.Atoi(dictSizeStr)
|
||||||
|
cmdC <- RedisCmd{"del", key}
|
||||||
for i := 0; i < size; i++ {
|
for i := 0; i < size; i++ {
|
||||||
skey := structure.ReadModuleString(rd)
|
skey := structure.ReadModuleString(rd)
|
||||||
version := structure.ReadModuleUnsigned(rd)
|
version := structure.ReadModuleUnsigned(rd)
|
||||||
|
|
|
@ -25,6 +25,7 @@ func (o *TairZsetObject) Rewrite() <-chan RedisCmd {
|
||||||
cmdC := o.cmdC
|
cmdC := o.cmdC
|
||||||
go func() {
|
go func() {
|
||||||
defer close(cmdC)
|
defer close(cmdC)
|
||||||
|
cmdC <- RedisCmd{"del", o.key}
|
||||||
length, _ := strconv.Atoi(structure.ReadModuleUnsigned(rd))
|
length, _ := strconv.Atoi(structure.ReadModuleUnsigned(rd))
|
||||||
scoreNum, _ := strconv.Atoi(structure.ReadModuleUnsigned(rd))
|
scoreNum, _ := strconv.Atoi(structure.ReadModuleUnsigned(rd))
|
||||||
for i := 0; i < length; i++ {
|
for i := 0; i < length; i++ {
|
||||||
|
|
|
@ -25,6 +25,7 @@ func (o *ZsetObject) LoadFromBuffer(rd io.Reader, key string, typeByte byte) {
|
||||||
func (o *ZsetObject) Rewrite() <-chan RedisCmd {
|
func (o *ZsetObject) Rewrite() <-chan RedisCmd {
|
||||||
go func() {
|
go func() {
|
||||||
defer close(o.cmdC)
|
defer close(o.cmdC)
|
||||||
|
o.cmdC <- RedisCmd{"del", o.key}
|
||||||
switch o.typeByte {
|
switch o.typeByte {
|
||||||
case rdbTypeZSet:
|
case rdbTypeZSet:
|
||||||
o.readZset()
|
o.readZset()
|
||||||
|
|
Loading…
Reference in New Issue