FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

async_wrap: add `asyncReset` to `TLSWrap` by refack · Pull Request #13092 · nodejs/node · GitHub

/ node Public

async_wrap: add asyncReset to TLSWrap - #13092

Merged
refack merged 0 commit into
nodejs:masterfrom
refack:async-wrap-13045
May 20, 2017
Merged

async_wrap: add asyncReset to TLSWrap#13092
refack merged 0 commit into
nodejs:masterfrom
refack:async-wrap-13045

Conversation

refack commented May 18, 2017
edited
Loading

Copy link
Copy Markdown
Contributor

When using an Agent for HTTPS, TLSSockets are reused and need to
have the ability to asyncReset from JS.

Fixes: #13045
(Not a complete solution. Does not solve custom Agent use case)

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • commit message follows commit guidelines
Affected core subsystem(s)

async_wrap

nodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. tls Issues and PRs related to the tls subsystem. labels May 18, 2017
refack self-assigned this May 18, 2017

refack commented May 18, 2017

Copy link
Copy Markdown
Contributor Author

CI: https://ci.nodejs.org/job/node-test-commit/9967/
(just cause my computer takes so long to build...)

mscdex added the wip Issues and PRs that are still a work in progress. label May 18, 2017
refack force-pushed the async-wrap-13045 branch from 077f403 to dcdc104 Compare May 18, 2017 10:13
refack changed the title [WIP] test-balloon: investigate #13045 async_wrap: add asyncReset to TLSWrap May 18, 2017
refack removed the wip Issues and PRs that are still a work in progress. label May 18, 2017

refack commented May 18, 2017

Copy link
Copy Markdown
Contributor Author

refack requested a review from trevnorris May 18, 2017 10:18

refack commented May 18, 2017

Copy link
Copy Markdown
Contributor Author

AndreasMadsen May 18, 2017
edited
Loading

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Is there a reason to add this listener? If there is an error in the future I think it would be better to see that error than an AssertionError('must not throw') message.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

🤔 and put assert.ifError?
Ok.

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

It will just throw by default, which will cause the test to fail.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

But then you don't get which line... And since there are two almost identical calls it's a PITA (just been there while writing this test)

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

I see. I think the ifError approach is fine then.

refack commented May 18, 2017

Copy link
Copy Markdown
Contributor Author

AndreasMadsen 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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

LGTM

cjihrig 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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

A couple of nits with the test, but mostly LGTM

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

checks for the issue in -> Refs:

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Ack

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Can you replace the uses of assert.ifError() with common.mustNotCall(). You can provide a custom message with the latter if you'd like.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

See #13092 (comment)
@AndreasMadsen suggested that we might want to see the actual error.
(Maybe we need mustNotErr like assert.doesNotThrow)

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

OK, you might want to use assert.fail() instead. ifError() implies that there might not be an error, but in this case, we know that there is one.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Added a factory method mustNotErr that calls assert.fail so the fail point will appear in the stack

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Isn't this redundant?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

In a sense yes, I just wanted to be explicit about the pain point.
I could replace this with 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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Couldn't you drop the try...catch completely, and if it happens to throw, it will fail the test.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Ack. Replaced with 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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Sorry if my previous comment was unclear. I just meant to write this as:

Refs: #13045

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Ack

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

I don't understand why you need this. You can just pass assert.fail (without the parens) as the handler, everywhere you use mustNotErr().

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Tried it, then there is no frame for the line with the failing assert (Actually the factory is not a solution I need explicit (err) => assert.fail(err))

Generated error by setting port: port + 1
with (err) => assert.fail(err)

assert.js:92
  throw new AssertionError({
  ^

AssertionError [ERR_ASSERTION]: Error: write EPROTO 101057795:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:794:

    at ClientRequest.req.on (D:\code\node-cur\test\parallel\test-async-wrap-GH13045.js:63:35)
    at emitOne (events.js:115:13)
    at ClientRequest.emit (events.js:210:7)
    at TLSSocket.socketErrorListener (_http_client.js:397:9)
    at emitOne (events.js:115:13)
    at TLSSocket.emit (events.js:210:7)
    at onwriteError (_stream_writable.js:359:10)
    at onwrite (_stream_writable.js:377:5)
    at fireErrorCallbacks (net.js:522:13)
    at TLSSocket.Socket._destroy (net.js:563:3)

with just assert.fail

assert.js:92
  throw new AssertionError({
  ^

AssertionError [ERR_ASSERTION]: Error: write EPROTO 101057795:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:794:

    at emitOne (events.js:115:13)
    at ClientRequest.emit (events.js:210:7)
    at TLSSocket.socketErrorListener (_http_client.js:397:9)
    at emitOne (events.js:115:13)
    at TLSSocket.emit (events.js:210:7)
    at onwriteError (_stream_writable.js:359:10)
    at onwrite (_stream_writable.js:377:5)
    at fireErrorCallbacks (net.js:522:13)
    at TLSSocket.Socket._destroy (net.js:563:3)
    at WriteWrap.afterWrite [as oncomplete] (net.js:857:10)

Fishrock123 commented May 18, 2017
edited
Loading

Copy link
Copy Markdown
Contributor

Sounds correct to me.

Copy link
Copy Markdown
Member

Can we get a CITGM run? that has been the main blocker for me.

Copy link
Copy Markdown
Member

mscdex May 18, 2017
edited
Loading

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Isn't this more or less equivalent to just not adding an 'error' listener? Similarly with the 'error' handlers above.

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

In that case, I'm -0 on it.

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Add the response handler as a second argument here for consistency?

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Ditto about switching to https.get().

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

ack, ack.

mscdex May 18, 2017
edited
Loading

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

common.mustCall((req, res) => { ... }, 2) ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

ack.

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Are these last two options necessary?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Just last one: AssertionError [ERR_ASSERTION]: Error: self signed certificate in certificate chain

mscdex May 18, 2017
edited
Loading

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

I think method: 'GET' could be dropped and .request() changed to .get() to avoid the need to req.end().

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

ack

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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

This isn't needed, it's even the default.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

ack

mcollina 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.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

LGTM

refack commented May 19, 2017

Copy link
Copy Markdown
Contributor Author

refack commented May 19, 2017
edited
Loading

Copy link
Copy Markdown
Contributor Author

Pre land CI:https://ci.nodejs.org/job/node-test-commit/10006/

Ping @trevnorris any comments? I would like to land this in a few hours.

refack force-pushed the async-wrap-13045 branch from ce6215e to 834e4cd Compare May 19, 2017 16:22
refack closed this May 20, 2017
refack force-pushed the async-wrap-13045 branch from 834e4cd to 6bfdeed Compare May 20, 2017 03:28

refack commented May 20, 2017

Copy link
Copy Markdown
Contributor Author

Landed in 6bfdeed

refack merged commit 6bfdeed into nodejs:master May 20, 2017

refack commented May 20, 2017

Copy link
Copy Markdown
Contributor Author

refack deleted the async-wrap-13045 branch May 20, 2017 03:33

Copy link
Copy Markdown
Member

@refack Thanks for taking care of this.

Copy link
Copy Markdown
Member

Thank you @refack. 🎉

Copy link
Copy Markdown
Contributor

This should likely be included in a larger async_wrap backport if it were to happen

MylesBorins added the baking-for-lts PRs that need to wait before landing in a LTS release. label Aug 14, 2017
MylesBorins removed the baking-for-lts PRs that need to wait before landing in a LTS release. label Aug 17, 2018
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to 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++. tls Issues and PRs related to the tls subsystem.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

test-npm failing on master after introduction of initial async hooks implementation

9 participants


Back | FazBrowse Home | New Git URL