Skip to content

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 в случае ошибки, однако в тесте это вызывает флак.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information