-
-
Notifications
You must be signed in to change notification settings - Fork 417
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
bug(quinn): making a connection that never gets to a full Connection
causes excessive delays in Endpoint::wait_idle
#2147
Comments
What leads you to believe that this behavior is incorrect? My guess would be that this is exactly the draining period of the attempted connection. Waiting for that to complete is exactly the role of |
I think the suggestion/surprise is that |
I assume what happens is that on dropping the This makes sense from a protocol point of view. From a user point of view I understand that it is a little surprising that the timeout happens at all in this case. So @djc's question is fair: would it be allowed to shorten the draining period? Would it be desirable? |
Yes, thank you, this is what is surprising for me. We have the "knowledge" that we don't have a |
You don't have to; |
But if the goal is to help the peer dispose of any state, arguably we might be able to use a shorter timeout? Like, I think you mean we should allow the |
Why would we be able to use a shorter timeout? As far as I can go, a client connection with a handshake in progress isn't in any way special as far as lifetime/connection-level resource concerns go. |
I would appreciate any help.
The bug is illustrated in the
endpoint_wait_idle
test in draft PR #2146, but I will also copy the permalink:quinn/quinn/src/tests.rs
Lines 154 to 177 in dd14b01
To summarize, if you have an
Endpoint
that attempts a connection, and for whatever reason, that connection does not make it past theConnecting
stage, it causes theEndpoint::wait_idle
call (when attempting to gracefully close the endpoint) to always take ~3s. I'm assuming something happens like theConnectionHandler
that is created whenConnecting
never gets cleaned up and sowait_idle
only returns after a timeout.I'm only familiar enough with
quinn
to know something is wrong, but not what to do to fix it.The text was updated successfully, but these errors were encountered: