[经验贴&疑问贴]关于TestOneSplit的经验和疑问

关于第一个bug,我之前没碰到过这个问题,我理解

  1. 如果脑裂的话,PD侧会交替更新原先region的信息(一会儿leader是5,一会儿是1-4的leader)
  2. 但当split完成之后,5的RegionHeartBeat就会被一直忽略了(比较RegionEpoch会发现5是stale的)
  3. 而即便split完成之前,CallCommandOnLeader侧也会一直重试,如果当前leader超时,那么其实会尝试random一个别的peer进行Call,这时候再返回NotLeader Error,就能从中知道当前正确的leader是什么(而整个CallCommandOnLeader直到没有结果前,只要不超过5秒或者不够10次都会继续调用,按理说一直找不到leader不太可能?)

关于第二个bug,分裂完成后,我理解这次Request会正常到达leader并且走完Raft Entry的replicate流程,这块儿不知道是不是在Apply Entry的时候没有判断Epoch / Key in region(有时候Propose的时候认为该Entry还是valid的,但是apply过程中,apply它之前更改了RegionEpoch / StartKey和EndKey,就得返回了)(如果这个reply没有error的话,那它会返回值么?能返回的话说明这块儿的逻辑是不是还是有问题,明明在split之后的region上查询一个不在这个region范围内的key,但是还是返回了相应的value)