EpochNotMatch current epoch of region

【 TiDB 使用环境`】生产环境
【 TiDB 版本】tidb:v5.1.1 ,tispark :v2.5.0 , spark: 3.0.1
【遇到的问题】tispark读取tikv报错
【问题现象及影响】

tispark日志:

22/07/06 15:12:14 ERROR DAGIterator: Process region tasks failed, remain 0 tasks not executed due to
com.pingcap.tikv.exception.GrpcException: retry is exhausted.
at com.pingcap.tikv.util.ConcreteBackOffer.doBackOffWithMaxSleep(ConcreteBackOffer.java:148)
at com.pingcap.tikv.util.ConcreteBackOffer.doBackOff(ConcreteBackOffer.java:119)
at com.pingcap.tikv.region.RegionStoreClient.handleCopResponse(RegionStoreClient.java:703)
at com.pingcap.tikv.region.RegionStoreClient.coprocess(RegionStoreClient.java:675)
at com.pingcap.tikv.operation.iterator.DAGIterator.process(DAGIterator.java:219)
at com.pingcap.tikv.operation.iterator.DAGIterator.lambda$submitTasks$1(DAGIterator.java:90)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.pingcap.tikv.exception.GrpcException: message: “EpochNotMatch current epoch of region 275292521 is conf_ver: 437 version: 2285, but you sent conf_ver: 437 version: 2282”
epoch_not_match {
current_regions {
id: 275292521
start_key: “t\200\000\000\000\000\000\000\377\027_r\200\000\000\000\000\377\025\271o\000\000\000\000\000\372”
end_key: “t\200\000\000\000\000\000\000\377\031_i\200\000\000\000\000\377\000\000\001\003\200\000\000\000\377\000\000\025!\003\200\000\000\377\000\000\000\000\000\003\200\000\377\000\000\000\000\000\006\003\200\377\000\000\000\000\000\000N\000\376”
region_epoch {
conf_ver: 437
version: 2285
}
peers {
id: 275292522
store_id: 274433474
}
peers {
id: 275292524
store_id: 16
}
peers {
id: 275293104
store_id: 1
}
}
current_regions {
id: 275294317
end_key: “t\200\000\000\000\000\000\000\377\027_r\200\000\000\000\000\377\025\271o\000\000\000\000\000\372”
region_epoch {
conf_ver: 437
version: 2285
}
peers {
id: 275294318
store_id: 274433474
}
peers {
id: 275294319
store_id: 16
}
peers {
id: 275294320
store_id: 1
}
}
}
at com.pingcap.tikv.region.RegionStoreClient.handleCopResponse(RegionStoreClient.java:704)
… 9 more

tikv日志:

[endpoint.rs:632] [error-response] [err=“Region error (will back off and retry) message: “EpochNotMatch current epoch of region 275292521 is conf_ver: 437 version: 2285, but you sent conf_ver: 437 version: 2282” epoch_not_match { current_regions { id: 275292521 start_key: 7480000000000000FF175F728000000000FF15B96F0000000000FA end_key: 7480000000000000FF195F698000000000FF0000010380000000FF0000152103800000FF0000000000038000FF0000000000060380FF0000000000004E00FE region_epoch { conf_ver: 437 version: 2285 } peers { id: 275292522 store_id: 274433474 } peers { id: 275292524 store_id: 16 } peers { id: 275293104 store_id: 1 } } current_regions { id: 275294317 end_key: 7480000000000000FF175F728000000000FF15B96F0000000000FA region_epoch { conf_ver: 437 version: 2285 } peers { id: 275294318 store_id: 274433474 } peers { id: 275294319 store_id: 16 } peers { id: 275294320 store_id: 1 } } }”]

通过pd的dashboard的热力图, 看看是否有热点情况,有热点,导致raft log apply跟不上。

并没有,查询tidb_hot_regions表也没有热点region

https://github.com/pingcap/tispark/issues/558
看看这个issue,看似一样的问题。

不一样啊

这个报错是偶发的吧?看起来这些错误是预期内的,需要 client 端主动重试。应用如果有重试机制 影响可忽略。
这块的话后续 tispark 读数据的时候会自动重试,而不是报错。

你好,我根据报错的region id查到了对应的表

tidb 的查询请求到达 tikv 后,region 分裂了,导致用旧的 region 元信息访问不到数据,就会报这个错误。通过 tidb 访问 tikv 很少见到这个报错是因为 tidb 实现了 backoff 机制,可以在 region leader 调度、region 分裂、region 合并等元信息发生变化后拉取 pd 中的最新元信息,并使用原本的 startTS 再次访问 tikv,可以一定程度上避免客户端报错,客户端感受到的只是延迟升高。

2 个赞

你好我用tispark 3 指定spark.tispark.stale_read读取,仍然会报这个错误。

对于楼主的问题,补充一些监控信息:
wf-resource-PD_2022-07-27T08_48_20.905Z.json (4.0 MB)
wf-resource-TiKV-Details_2022-07-27T08_44_26.176Z.json (17.5 MB)

tidb版本升到v5.4.2问题没了