node: relax converge criteria

Some test flakes would occur due to the `converge` function looping
forever. It was noticed that in these cases the log output would look
like:

    test: Node z6MkqTKLVnFdVF24PQiDoQffbTPT7U5igghS3XWuFJLfah1P has
    {(Id(rad:z39WuDs9hrqmCr9shjoz6dn2Abqyz),
    PublicKey(z6MkemMxfWhRQFKy4UPX7FsN8GjLAZ9T65rbmDsUn7fchioP)),
    (Id(rad:z39WuDs9hrqmCr9shjoz6dn2Abqyz),
    PublicKey(z6MkpdPJp7naAurUjCpwef1BDD5jfPhAvwfinaGd7pVh227j)),
    (Id(rad:z39WuDs9hrqmCr9shjoz6dn2Abqyz),
    PublicKey(z6MkqTKLVnFdVF24PQiDoQffbTPT7U5igghS3XWuFJLfah1P))}

with further investigation, the variable `all_routes` was found to be
smaller than the calculated routes.

Instead of checking `==`, instead check that
`routes.is_superset(&all_routes)`, which means that `routes` must be
equal to `all_routes`, but allows it have extra entries.

Signed-off-by: Fintan Halpenny <Fintan Halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
This commit is contained in:
Fintan Halpenny 2023-12-08 15:47:30 +00:00 committed by cloudhead
parent 070e912b3e
commit 76c969c755
No known key found for this signature in database
1 changed files with 2 additions and 1 deletions

View File

@ -511,11 +511,12 @@ pub fn converge<'a, G: Signer + cyphernet::Ecdh + 'static>(
let routing = node.routing(); let routing = node.routing();
let routes = BTreeSet::from_iter(routing); let routes = BTreeSet::from_iter(routing);
if routes == all_routes { if routes.is_superset(&all_routes) {
log::debug!(target: "test", "Node {} has converged", node.id); log::debug!(target: "test", "Node {} has converged", node.id);
return false; return false;
} else { } else {
log::debug!(target: "test", "Node {} has {:?}", node.id, routes); log::debug!(target: "test", "Node {} has {:?}", node.id, routes);
log::debug!(target: "test", "All routes {:?}", all_routes);
} }
true true
}); });