storage节点failover后,local state达到UPTODATE后,会通过mgmtd广播public state(Serving)。
当前的upToDate实现如下所示:
`
bool upToDate() const {
return localState == flat::LocalTargetState::UPTODATE && publicState == flat::PublicTargetState::SERVING;
}
`
查询请求到达已经是LocalTargetState::UPTODATE的storage时,会因为该storage节点还没收到mgmtd的广播,而拒绝请求,导致client侧延迟抖动。
由于client和storage获取routing info是有时间差的,所以upToDate中是否没必要再判断public state:
- client先收到的场景,代表待访问的storage节点已经是ready的
- client晚收到的场景,在选取routing target时,就不会选这个节点,因此也不会有问题