关于tinykv3B中no region问题的排查分析

tinykv进行到3B后,很多同学应该都会遇到no region的报错,查看调用链一般这个报错会出现再cluster.getRegion()方法中。下面是解决这一问题的一些经验分享(这里的经验主要针对排查3B中的split,其余部分出现这一问题基本上属于其他原因):
首先我们要明确no region发生的原因:cluter向PD请求region消息的时候,得不到相应的相应。然后实际去查看调用链(这里可以看worker中的一系列方法)可以得知,PD更新region消息是要收到集群的心跳之后才会根据传递过来的心跳信息更新region。然而只有Leader才会对PD发送心跳信息,因此在新的集群选出Leader前,PD并不会拥有它的region信息。这种地方出现no region基本上就是新集群达成一致过慢。(如果确认在split部分没有写出其他的问题,导致region之间不连续),目前我们组的情况是getRegion()方法的延时在20ms时出错率大概为5%,改成20ms后降低到1%以下(3B最后一个测试)。

1 个赞

我也遇到相同的问题,后面我是通过 split 完以后触发一个 hearbeat task 解决的

fix 前

fix 后