请教一个问题,broker在5.0版本以上controller模式下,在dledgercontroller#appendToDLedgerAndWait方法下,根据注释[Append the request to DLedger, and wait for DLedger to commit the request]得出一个问题,就是write消息调用handleAppend之后dLedgerFuture.get(5, TimeUnit.SECONDS) 其根本不关心返回值,说明可能存在raft上主动返回错误码为同步超时(不是此处5秒的超时),导致其返回后appendToDLedgerAndWait返回成功。这就意味着leader状态机状态可能不是最新的,而后ControllerEventHandler 继续处理后续请求依赖的数据状态可能是旧数据。
假设controller服务器全部重启,假设选取leader后因为需要重放日志apply到状态机的时间很长很长。期间有请求过来,那么ControllerEventHandler 处理请求依赖的数据状态可能是非常旧的,更为严重的是有些meta数据接口是读取到的数据碰巧是旧数据(因为日志数据还在apply过程中)。
我可以理解为controller模式下选举数据是弱依赖状态机吗?
版权:言论仅代表个人观点,不代表官方立场。转载请注明出处:https://www.stntk.com/question/1467.html
还没有评论呢,快来抢沙发~