单独使用TIKV时,scan某个range时出现KeyPadding错误

【 TiKV 使用环境】生产环境
【 TiKV 版本】v7.4.0
【复现路径】不知道从什么时候开始有的问题,怀疑可能跟之前操作过扩容有关。
【遇到的问题:问题现象及影响】
使用的是go的client(v2.0.7), 偶然发现一个txnkv scan请求会返回错误(tikv aborts txn: Error(Txn(Error(Codec(KeyPadding)))))。

经过追查对应服务端的日志是
[ERROR] [errors.rs:467] [“txn aborts”] [err_code=KV:Codec:BadPadding] [err=Error(Txn(Error(Codec(KeyPadding))))]

经过仔细调试后发现,只有当scan的startKey和endKey在某个region的特定区间时,才会触发这个报错。
例如: region id = 10000 region的 start_key是 1a2a… end_key是 1a2f…。当scan指定的【1a2b… 到 1a2c…】或者【1a2e到1a2f】时,一切正常,但当指定【1a2d… 到1a2e…】时就会触发上述错误。也就是只要scan range 覆盖了【1a2d…到1a2e…】之间,就会报错,很像是这块数据错误了。

附带一点golang的使用伪代码

startKey := "xxx"
endKey := "yyy"

client, _ := txnkv.NewClient([]string{"addr:2379"})
txn, _ := client.Begin()
it, err := txn.Iter(startKey, endKey)

if err != nil {
	log.Printf("tx.Iter err:%v", err) // 出现问题时会报:tikv aborts txn: Error(Txn(Error(Codec(KeyPadding))))
	return
}
log.Println("ok")

左合又开,你试试右边减少一个数字试试

RemoteStopped 错误表示远程节点已停止。可能由于网络问题、节点故障或其他原因导致无法与远程节点建立连接或通信失败。你手动将如下链接复制到浏览器看下能否访问https://github.com/tikv/tikv/blob/v7.4.0/src/server/service/kv.rs#L883C1-L884C1,估计是github访问不同造成的

@随缘天空 这个链接可以访问。RemoteStopped蛮奇怪的,因为本身这个region所在的node是启动的,而且这个range前后都可以访问(前后也都在这个region上)。所以怀疑是数据损坏了。我再继续看下源码

有坏块了

嗯,有没有人为删除服务器上某些存储目录或文件,你再排查看看。