【 TiKV 使用环境】生产环境
【 TiKV 版本】5.3.2
【复现路径】
偶现,无法复现
【遇到的问题:问题现象及影响】
使用client-go txn-client直接打开事务后执行get,直接返回错误,错误信息为:
tikv aborts txn: Error(Txn(Error(Mvcc(Error(Kv(Error(Other("[components/tikv_kv/src/raftstore_impls.rs:35]: \"[components/raftstore/src/store/region_snapshot.rs:216]: Key XXXX is out of [region YYY]
【资源配置】
【附件:截图/日志/监控】
根据错误提示的代码位置https://github.com/tikv/tikv/blob/8e6e348505e7f1f7b5e023c00b30f90e8d1b4084/components/raftstore/src/store/region_snapshot.rs#L210
check_key_in_range(
key,
self.region.get_id(),
self.region.get_start_key(),
self.region.get_end_key(),
)
.map_err(|e| EngineError::Other(box_err!(e)))?;
这里把KeyOutOfRegion这个错误映射成了Other error.
请问:
- 这个错误是在拿到regionsnapshot后检查keyrange时抛出,请问这个问题在raftstore中是否符合预期?
代码中之前位置其实已经检查过keyrange并通过了,而最后一步使用snapshot读取时再次检查keyrange却失败了,这个问题是符合预期的吗? 我想知道如果符合预期,这个错误是由什么原因导致? 是RegionSplit吗?如果是,这个错误那么不应该转成Other类型,按我的理解理应转换成RegionErr? 让client-go进行重试?