fix(iroh): Always update the best addr after changes #3422
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
There was a bug where in
NodeMap::add_node_addr
wouldn't cause an update to theNodeUdpState::best
addr, because we wouldn't callNodeUdpState::udpate_best_addr
after changes inNodeState::update_from_node_addr
.In an effort to fix this class of bugs once and for all, I've made
NodeUdpState::paths
private and added guarded access. The access guard has aDrop
implementation that callsupdate_best_addr
.We originally saw this bug as an error message in iroh-blobs tests:

While making
NodeUdpState
's fields private, I noticed thatNodeUdpState::best
was sometimes accessed instead ofNodeUdpState::send_addr
. This is now fixed, but required passing through thehave_ipv6
boolean quite a bit, so that's why the diff is slightly bigger.Feel free to look at commits in isolation instead.
Change checklist