对于TiKV add peer出来的新peer在回放之前的分裂日志(BatchSplit)的时候(即分裂的peers里面不包含自己的store id), 这种场景下, 在exec_batch_split
的时候的这段代码里面
let mut new_split_regions: HashMap<u64, NewSplitPeer> = HashMap::default();
for req in split_reqs.get_requests() {
let mut new_region = Region::default();
new_region.set_id(req.get_new_region_id());
new_region.set_region_epoch(derived.get_region_epoch().to_owned());
new_region.set_start_key(keys.pop_front().unwrap());
new_region.set_end_key(keys.front().unwrap().to_vec());
new_region.set_peers(derived.get_peers().to_vec().into());
for (peer, peer_id) in new_region
.mut_peers()
.iter_mut()
.zip(req.get_new_peer_ids())
{
peer.set_id(*peer_id);
}
new_split_regions.insert(
new_region.get_id(),
NewSplitPeer {
peer_id: util::find_peer(&new_region, ctx.store_id).unwrap().get_id(),
result: None,
},
);
regions.push(new_region);
}
里面的find_peer应该找不到对应自己store id的peer, 然后在unwrap处panic.
如果是在添加peer的时候, 修改了peer的conf ver, 从而跳过分裂日志, 又是如何修改region meta中的start key和end key的呢
所以我想问一下, 我之前的想法是哪一步存在问题吗? 正确的流程应该是怎么样的?