Flaky test test_discovery
Смотри test_discovery падение в этом джобе: https://git.picodata.io/picodata/picodata/picodata/-/jobs/203171
Проблема на этой строчке https://git.picodata.io/picodata/picodata/picodata/-/blob/6b99aac158d7ea090db1d2c61b079badf9ef4b32/src/discovery.rs#L216
#[proc]
fn proc_discover<'a>(request: Request, request_to: Address) -> Result<Response, Box<dyn StdError>> {
let ready_ids = traft::node::global().ok().and_then(|node| {
let status = node.status();
status
.leader_id // <------ PROBLEM
.map(|leader_id| (&node.storage.peer_addresses, leader_id, status.id))
});
if let Some((peers_addresses, leader_id, id)) = ready_ids {
let leader_address = peers_addresses.try_get(leader_id)?;
Ok(Response::Done(Role::new(leader_address, leader_id == id)))
} else {
let mut discovery = discovery();
let discovery = discovery.as_mut().ok_or("discovery uninitialized")?;
Ok(discovery.handle_request(request, request_to).clone())
}
}
Если node::global().status().leader_id == None мы вернём ошибку discovery uninitialized,
но проблема в том, что leader_id может быть None, если начались выборы нового лидера.
В реальной жизни это не проблема, так как на этапе discovery инстанс будет ретраить запрос на proc_discover в случае ошибки, однако в тесте это вызывает флак.