-
Notifications
You must be signed in to change notification settings - Fork 29.8k
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
test: deflake http-server-request-timeout test #44169
test: deflake http-server-request-timeout test #44169
Conversation
723159d
to
86c0d69
Compare
parallel/http-server-request-timeouts-mixed test was sometimes failing due to insufficient tolerance between the connection timeout checking interval, and the expected timeout specified in the test. This change makes the checking interval more frequent, and decouples the timeout for the check from the checking interval. fixes: nodejs#43465
86c0d69
to
3c68bf1
Compare
Superseds #43470. |
Could I get a hand getting this merged please? |
@nicksia-vgw I see this has still failed on osx: https://ci.nodejs.org/job/node-test-commit-osx/46808/ |
Oh sorry - I missed that. Let me take a look. |
I think for timing sensitive tests like these, it might be more reliable when run as part of the sequential suite, to avoid issues caused by delays due to resource contention. Any concerns with merging this PR (it will reduce failure rate), then moving these failing tests to the sequential suite in a follow-up PR?
|
OK - I'm ready to merge. |
Landed in b84a633. |
parallel/test-http-server-request-timeouts-mixed.js test was sometimes failing due to insufficient tolerance between the connection timeout checking interval, and the expected timeout specified in the test. This change makes the checking interval more frequent, and decouples the timeout for the check from the checking interval. PR-URL: #44169 Reviewed-By: Luigi Pinca <[email protected]>
parallel/test-http-server-request-timeouts-mixed.js test was sometimes failing due to insufficient tolerance between the connection timeout checking interval, and the expected timeout specified in the test. This change makes the checking interval more frequent, and decouples the timeout for the check from the checking interval. PR-URL: #44169 Reviewed-By: Luigi Pinca <[email protected]>
parallel/test-http-server-request-timeouts-mixed.js test was sometimes failing due to insufficient tolerance between the connection timeout checking interval, and the expected timeout specified in the test. This change makes the checking interval more frequent, and decouples the timeout for the check from the checking interval. PR-URL: #44169 Reviewed-By: Luigi Pinca <[email protected]>
parallel/test-http-server-request-timeouts-mixed.js test was sometimes failing due to insufficient tolerance between the connection timeout checking interval, and the expected timeout specified in the test. This change makes the checking interval more frequent, and decouples the timeout for the check from the checking interval. PR-URL: nodejs#44169 Reviewed-By: Luigi Pinca <[email protected]>
This depends on #42893, which is marked as "dont-land-on-v16.x". |
parallel/http-server-request-timeouts-mixed test was sometimes failing due to insufficient tolerance between the connection timeout checking interval, and the expected timeout specified in the test.
The checking interval was 500ms, and the request was checked for timeout exactly 500ms after the request was expected to timeout. This led to a timing condition where the next check would occur slightly after the request was expected to timeout.
Detailed Explanation
Timings
headersTimeout: 2000ms
requestTimeout: 4000ms
connectionsCheckingInterval: 500ms
Request 2 is started at
headersTimeout * 0.2
, or400ms
.Headers time out 2000ms after that.
Completion of Request 2 is checked at at
headersTimeout * 1.2 + connectionsCheckingInterval
, or2900ms
.Timeline
@[400ms]: Request 2 client created and first write sent.
@[2400ms]: Headers are timed out.
@[2900ms]: Request 2 completion is checked (which is intended to depend on Request 2 expiring via headersTimeout, as seen in the comment -
assert(request2.response.startsWith(responseTimeout)); // It is expired due to headersTimeout
.The problem is that the connectionsCheckingInterval is slightly too high. The connection checking interval could tick just after 2400ms, and then just after 2900ms.
Example
The fix is to ensure connection checking interval is less than 500ms, and to decouple the check timeout from connection checking interval.