-
-
Notifications
You must be signed in to change notification settings - Fork 31.4k
http2: fix issues with aborted respondWithFile()
s
#21561
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
New CI: https://ci.nodejs.org/job/node-test-pull-request/15651/ @ariran5 Can you download the source for v10.5.0, apply https://patch-diff.githubusercontent.com/raw/nodejs/node/pull/21561.diff and build Node.js yourself? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code SGTM but I couldn't reproduce on my Mac so I can't confirm the fix.
b41d6f6
to
9d7dbb9
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@addaleax cool, could not reproduce crashes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@addaleax I'll check if the test I wrote still crashes (highly unlikely), but code-wise LGTM.
Thanks for the reviews – I’m labelling this as |
@addaleax I think you're right that a no-op error handler on the client side should help with the flakiness. |
I can reproduce the failure reliably but don't know how to fix. The test as is doesn't seem to work on MacOS since the destroy causes the error. |
Yes! Its work for me, fast reload not crush node |
Could somebody from e.g. @nodejs/platform-macos help me figure out the test here? I don’t have easy access to any of the systems on which is is failing… |
Maybe ping @nodejs/http2 ? I guess alternatively I’ll ask for access to a build machine … |
FWIW I tried adding the following handler to the server in the test case. On macOS High Sierra (10.13.6) it fails to emit the stream.on('error', common.mustCall((error) => {
const expected = 'ECONNRESET'
assert.strictEqual(error.errno, expected);
assert.strictEqual(error.code, expected);
})); |
New CI to see on which hosts exactly it’s failing (?): https://ci.nodejs.org/job/node-test-pull-request/15809/ |
The socket destroy is what causes the (The test might need to be rewritten to work on macOS from what I can tell.) |
9d7dbb9
to
bb4e94a
Compare
I’ve pushed a change that might help get this back on track, even if it’s just a workaround. If this is approved & lands with the hack in the test, I’ll open a new issue, since I think this is an API defect in the HTTP/2 API. (@apapirovski I still really appreciate you taking the time to do this – I’d assign that issue to you, if that’s okay, at least as long as I can’t really debug it myself. :/) |
CI is green. Can somebody take a look at the added changes (only 6a04dbe)? I think it’s okay to do this because it addresses the most important issue, which is that this should not hard-crash the process. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Landed in d94950e |
Fixes: #20824
Fixes: #21560
@budarin @DaAitch @ariran5 Are you in a position to try this patch and see whether it fully resolves the issues you were experiencing?
Checklist
make -j4 test
(UNIX), orvcbuild test
(Windows) passes