HDT3213/rdb

stream 类型某种情况下会解析失败

Closed this issue · 2 comments

复现流程:

  1. 启动一个 redis 实例:docker run -it --rm --name redistest -v $PWD/tempdata/:/data/ -p 6379:6379 redis:7.0 redis-server --save 10 1
  2. 运行下面go程序 写入数据:
package main

import (
	"context"
	"fmt"

	redis "github.com/redis/go-redis/v9"
)

func main() {
	c := redis.NewClient(&redis.Options{
		Addr: "127.0.0.1:6379",
		DB:   0,
	})

	n := 9999
	for i := 0; i < n*2; i++ {
		err := c.XAdd(context.Background(), &redis.XAddArgs{
			Stream: "mytest",
			Values: []string{"info", `abcd`},
			MaxLen: int64(n),
			Approx: true,
		}).Err()
		if err != nil {
			panic(err)
		}
		fmt.Println(i)
	}
}
  1. 进入上面的 tempdata 目录开始分析,rdb -c memory -o memory.csv dump.rdb,有报错
error: read stream item id seq failed: -1 is not a uint

ok, 有空看一下

修复了,消息的 sequence 字段可能是负数,加上 master entry 的 sequence 之后才能保证为正数