Skip to content

http2: fix issues with aborted respondWithFile()s - #21561

Closed
addaleax wants to merge 2 commits into
nodejs:masterfrom
addaleax:http2-stream-pipe
Closed

http2: fix issues with aborted respondWithFile()s#21561
addaleax wants to merge 2 commits into
nodejs:masterfrom
addaleax:http2-stream-pipe

Conversation

@addaleax

Copy link
Copy Markdown
Member

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), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • commit message follows commit guidelines

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@nodejs-github-botnodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. lib / src Issues and PRs related to general changes in the lib or src directory. labels Jun 27, 2018
@addaleaxaddaleax added the http2 Issues or PRs related to the http2 subsystem. label Jun 27, 2018
@addaleax

Copy link
Copy Markdown
MemberAuthor

@addaleax

Copy link
Copy Markdown
MemberAuthor

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?

@apapirovskiapapirovski left a comment

Copy link
Copy Markdown
Contributor

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.

@DaAitchDaAitch left a comment

Copy link
Copy Markdown
Contributor

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.

@ryzokukenryzokuken left a comment

Copy link
Copy Markdown
Contributor

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.

@addaleaxaddaleax added the wip Issues and PRs that are still a work in progress. label Jun 29, 2018
@addaleax

Copy link
Copy Markdown
MemberAuthor

Thanks for the reviews – I’m labelling this as in progress to make sure we don’t land it until somebody has had time to look into why the test is flaky/how to fix it … We probably need to just attach a no-op error handler somewhere, but I couldn’t reproduce the issue on Linux

@jasnell

Copy link
Copy Markdown
Member

@addaleax I think you're right that a no-op error handler on the client side should help with the flakiness.

@apapirovski

Copy link
Copy Markdown
Contributor

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.

@ariran5

Copy link
Copy Markdown

Yes! Its work for me, fast reload not crush node

@addaleax

Copy link
Copy Markdown
MemberAuthor

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…

@addaleax

Copy link
Copy Markdown
MemberAuthor

Maybe ping @nodejs/http2 ?

I guess alternatively I’ll ask for access to a build machine …

@sebdeckers

Copy link
Copy Markdown
Contributor

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 error event about half the time, so this test fails the other half of the time. Not sure why.

stream.on('error',common.mustCall((error)=>{constexpected='ECONNRESET'assert.strictEqual(error.errno,expected);assert.strictEqual(error.code,expected);}));

@addaleax

Copy link
Copy Markdown
MemberAuthor

New CI to see on which hosts exactly it’s failing (?): https://ci.nodejs.org/job/node-test-pull-request/15809/

@apapirovski

apapirovski commented Jul 15, 2018

Copy link
Copy Markdown
Contributor

The socket destroy is what causes the ECONNRESET. I don't really see a good way to get around it but I'll try to dig in today & tomorrow.

(The test might need to be rewritten to work on macOS from what I can tell.)

@addaleax

Copy link
Copy Markdown
MemberAuthor

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: https://ci.nodejs.org/job/node-test-pull-request/15888/

@addaleaxaddaleax removed the wip Issues and PRs that are still a work in progress. label Jul 15, 2018
@addaleax

Copy link
Copy Markdown
MemberAuthor

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.

@mcollinamcollina left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@addaleax

Copy link
Copy Markdown
MemberAuthor

Landed in d94950e

@addaleax
addaleax deleted the http2-stream-pipe branch July 16, 2018 18:27
addaleax added a commit that referenced this pull request Jul 16, 2018
PR-URL: #21561Fixes: #20824Fixes: #21560
Reviewed-By: Anatoli Papirovski <apapirovski@mac.com>
Reviewed-By: Ujjwal Sharma <usharma1998@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
targos pushed a commit that referenced this pull request Jul 16, 2018
PR-URL: #21561Fixes: #20824Fixes: #21560
Reviewed-By: Anatoli Papirovski <apapirovski@mac.com>
Reviewed-By: Ujjwal Sharma <usharma1998@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
@targostargos mentioned this pull request Jul 17, 2018
addaleax added a commit to addaleax/node that referenced this pull request Jul 17, 2018
addaleax added a commit that referenced this pull request Jul 23, 2018
Refs: #21836
Refs: #21561
PR-URL: #21861
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Minwoo Jung <minwoo@nodesource.com>
targos pushed a commit that referenced this pull request Jul 24, 2018
Refs: #21836
Refs: #21561
PR-URL: #21861
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Minwoo Jung <minwoo@nodesource.com>
@kjinkjin mentioned this pull request Sep 19, 2018
4 tasks
@addaleaxaddaleax mentioned this pull request Oct 20, 2018
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++Issues and PRs that require attention from people who are familiar with C++.http2Issues or PRs related to the http2 subsystem.lib / srcIssues and PRs related to general changes in the lib or src directory.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

http2 server + fast reload page the Stream is closed if app pushes unused assets

9 participants

@addaleax@nodejs-github-bot@jasnell@apapirovski@ariran5@sebdeckers@mcollina@DaAitch@ryzokuken