【 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")