Skip to content

Fix flaky preferCallConnectionOverDeferredConnection test - #9539

Open
kamilkrzywanski wants to merge 2 commits into
lysine-dev:mainfrom
kamilkrzywanski:fix/fast-fallback-test-flake
Open

kamilkrzywanski wants to merge 2 commits into
lysine-dev:mainfrom
kamilkrzywanski:fix/fast-fallback-test-flake

Conversation

@kamilkrzywanski

@kamilkrzywanski kamilkrzywanski commented Jul 12, 2026 •

Copy link
Copy Markdown

Fixes #9369.

preferCallConnectionOverDeferredConnection tries to force IPv4 to win the Happy Eyeballs race by stalling the competing connect, so IPv6 becomes a deferred plan and a REFUSED_STREAM retry reuses the call connection. It did that by stalling the first createSocket() call.

That was racy. Fast fallback launches connect work on separate threads, so under load the IPv4 thread could claim the stall while IPv6 proceeded. The request then hit IPv6 and failed with:

expected: "this was the 2nd request on IPv4"
but was: "unexpected call to IPv6"

This stalls IPv6 specifically in EventListener.connectStart() when the destination is localhostIpv6, so the right address is delayed no matter which thread runs first. connectStart() runs on the connecting thread before the socket is created, so it works with any socket factory, including the fake network.

@kamilkrzywanski
kamilkrzywanski force-pushed the fix/fast-fallback-test-flake branch from 45b4e97 to 6bd8d26 Compare July 18, 2026 10:14
Stall IPv6 by destination address in EventListener.connectStart()
instead of the first createSocket() call, which raced under concurrent
connects. connectStart() runs on the connecting thread before the socket
is created, so this works with any socket factory.

Fixes lysine-dev#9369
@kamilkrzywanski
kamilkrzywanski force-pushed the fix/fast-fallback-test-flake branch from e7b5a2e to e3614ac Compare November 1, 2026 09:02
@kamilkrzywanski

Copy link
Copy Markdown
Author

Rebased on main. Since the tests now use the fake network (#9636), I moved the IPv6 stall from a custom Socket to EventListener.connectStart(), which runs on the connecting thread before the socket is created. FastFallbackTest passes 5/5 locally.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

FastFallbackTest.preferCallConnectionOverDeferredConnection flaky

2 participants