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 个赞