-
Notifications
You must be signed in to change notification settings - Fork 318
tests(multipath): add failing test #3689
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: feat-multipath
Are you sure you want to change the base?
Conversation
|
Documentation for this PR has been generated and is available at: https://n0-computer.github.io/iroh/pr/3689/docs/iroh/ Last updated: 2025-11-25T13:44:56Z |
|
initial investigation for and .. that's it? I get some further logs for a connection that is can be identified as the older (closed!) connection from the first client. I don't see any quinn_proto recv lines for this datagram received from the second client, which is weird - it seems these initial packets are received by the server, get up to the point where "generated new addr" is logged, but don't make its way into the quinn endpoint. |
|
Interestingly, CI fails only for ubuntu-stable features |
|
Some findings. Looking at the logs of the test with the public relay.
Comparing to the first successfull flow, in the first client attempt we have this flow:
So in the working case the second packet over IP also has a different dst_cid than the first packet, whereas in the second (broken) client the second packet over IP has the same dst_cid than the first client. Attaching logs here (with additional debug log statements inserted by me in iroh_quinn). |
|
Ooh I think I found the reason!
So this step 5) seems wrong - it should discard the second Initial instead of initiating a new connection. |
Is the original connection closed before it receives the second initial, or are there two simultaneous connections? |
not sure yet, rerunning with more logs now. |
The original connection is already closed at the server when the server receives the second, duplicate initial. So maybe there's not much we can do about this apart from advising to always, even in tests, spawn new tasks for awaiting incomings, and not care about them timing out. It's still a bit unfortunate, because the server will keep sending its initial until the 30s timeout hits on this bogus connection. |
1652829 to
11edf1b
Compare
Description
This adds a simple test: one server that accepts connections, and then 3 clients that are created consecutively and each connect to the server, exchange data, close connection, close endpoint. After a client is finished the next client is created (new endpoint, new secret key).
The test comes in three variations that share their impl:
test_one_server_two_clients_local_relay: uses a local relaytest_one_server_two_clients_public_relay: uses the public relaytest_one_server_two_clients_no_relay: doesn't use relays at allThe no relay and local relay versions pass for me. However the public relay one times out but only for the second client. The first one succeeds, the second connect attempt times out at the client.
Breaking Changes
Notes & open questions
Change checklist
quic-rpciroh-gossipiroh-blobsdumbpipesendme