进入大量插入操作时,graph出现No leader exists. 提示,导致插入失败

如果发生了leader切换,那需要通过心跳机制来更新,不是即时更新的

那不是应该有可以找到map里的key吗,不应该找不到啊,不更新也是找到的不对吧

没有找不到,找到了,但是不是leader,所以请求返回失败

代码里的逻辑不是找到了就返回,找不到就随机选一个打印日志么

是的

这样不就是存在找不到leader吗 不是leader不对啊。

不是随机找了一个么

是随机找了一个,但是不应该出现随机找的情况。因为在map里每个partition都有leader才对,map的leader信息可能不是最新的,但是不应该没有leader吧

还有为什么会存在leader缺失的情况,storage都会同步leader信息给meta,storageclient从meta同步后根据每次的查询、插入去更新leader信息。出现随机找的情况,就是少了partition信息

如果发生了leader切换,那需要通过心跳机制来更新,不是即时更新的

没有即时更新的话,不是缓存旧的leader吗,有旧的leader信息,不就不需要随机找leader吗

旧的已经不是leader了

旧的不是leader也可以在以下代码里的leaders_找到有值,而不是走下面随机寻找吧。

旧的不是leader了,所以要在所有的节点里重新找一个,找到leader,或者请求返回新的leader

这里的逻辑不是判断是不是最新的leader吧,前后逻辑是leaders信息不存在吧,这个代码的调用是在进行增删改查之前的

没找到就是leader已经失效了

失效了,meta就不会缓存这个partition的leader信息吗?storage心跳同步逾期会导致整个情况?

例如meta本来缓存的leader信息为
{(partition1,leader1),(partition2,leader2),(partition3,leader3)}

假设leader1所在的storage节点负载高,心跳同步逾期,meta就会把partition1的记录失效?

我的集群没有发生leader切换,只是leader所在节点 IO很忙

现在逻辑应该是请求leader异常会认为leader失效,leader节点很忙导致请求异常也是

storage client的leader信息不是从meta获取的么?