X Tutup
The Wayback Machine - https://web.archive.org/web/20220528002131/https://github.com/nodejs/node/pull/12860
Skip to content
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

stream: remove useage of _readableState/_writableState.highWaterMark #12860

Closed

Conversation

calvinmetcalf
Copy link
Contributor

@calvinmetcalf calvinmetcalf commented May 5, 2017

Replace with .readHWM or .writeHWM getters, part of #445 mega
issue.

@nodejs/streams

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)

stream, net, http

@calvinmetcalf calvinmetcalf added http net stream labels May 5, 2017
@nodejs-github-bot nodejs-github-bot added the lib / src label May 5, 2017
@Fishrock123 Fishrock123 added this to Work In Progress / Has PR in Streams: _readableState and _writableState May 5, 2017
@Fishrock123
Copy link
Member

@Fishrock123 Fishrock123 commented May 5, 2017

Should duplex have both getters?

Also, the read / write prefixes may be confused with get / set... maybe use readableHWM and writableHWM?

In addition, should these be documented?

@mscdex
Copy link
Contributor

@mscdex mscdex commented May 5, 2017

What kind of impact does this have performance-wise?

@calvinmetcalf
Copy link
Contributor Author

@calvinmetcalf calvinmetcalf commented May 6, 2017

@mscdex
Copy link
Contributor

@mscdex mscdex commented May 6, 2017

@calvinmetcalf I'm guessing that was supposed to be directed at @Fishrock123 instead of me :-)

@calvinmetcalf
Copy link
Contributor Author

@calvinmetcalf calvinmetcalf commented May 8, 2017

@mscdex yes sorry, also yeah we'll have to bench mark them all, and if they are noticeably slower we can check if methods are faster

@@ -61,6 +61,12 @@ function Duplex(options) {
this.once('end', onend);
}

Object.defineProperty(Duplex.prototype, 'writeHWM', {
get: function() {
Copy link
Member

@jasnell jasnell Jun 13, 2017

Choose a reason for hiding this comment

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

nit: this could just be get() { ... }

@@ -61,6 +61,12 @@ function Duplex(options) {
this.once('end', onend);
}

Object.defineProperty(Duplex.prototype, 'writeHWM', {
Copy link
Member

@jasnell jasnell Jun 13, 2017

Choose a reason for hiding this comment

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

not really a fan of the abbreviation on this. Would prefer spelling it out e.g. writeHighWaterMark

@mcollina mcollina added this to the 9.0.0 milestone Jul 20, 2017
@mcollina mcollina added this to the 9.0.0 milestone Jul 20, 2017
@BridgeAR
Copy link
Member

@BridgeAR BridgeAR commented Sep 22, 2017

Is this something that should stay open / is still still pursued? @calvinmetcalf @mcollina

@mcollina
Copy link
Member

@mcollina mcollina commented Sep 23, 2017

@BridgeAR this is part of #445. Yes, it should stay open.

Copy link
Member

@BridgeAR BridgeAR left a comment

LGTM % comments.

Object.defineProperty(Duplex.prototype, 'writeHWM', {
get: function() {
return this._writableState.highWaterMark;
}
Copy link
Member

@BridgeAR BridgeAR Oct 2, 2017

Choose a reason for hiding this comment

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

Those should be enumerable.

@jasnell
Copy link
Member

@jasnell jasnell commented Oct 29, 2017

This is not going to make 9.0.0, removing from the milestone

@jasnell jasnell removed this from the 9.0.0 milestone Oct 29, 2017
@mcollina mcollina force-pushed the highwatermark-state-removal branch 2 times, most recently from 4bb31c0 to 7fdcbe0 Compare Nov 14, 2017
@mcollina
Copy link
Member

@mcollina mcollina commented Nov 14, 2017

Updated and added docs. @jasnell please check again.

CI: https://ci.nodejs.org/job/node-test-pull-request/11427/

@mcollina
Copy link
Member

@mcollina mcollina commented Nov 14, 2017

This is going to suffer from the same problems of #12857 (comment). We need to make the properties non-enumerable.

Copy link
Member

@jasnell jasnell left a comment

LGTM

Replace with .readableHighWaterMark or .writableHighWaterMark getters.

Ref: nodejs#445.
@mcollina mcollina force-pushed the highwatermark-state-removal branch from 7fdcbe0 to 4bed9d7 Compare Nov 15, 2017
@mcollina
Copy link
Member

@mcollina mcollina commented Nov 15, 2017

CI failures are unrelated, CITGM is ok.

@mcollina
Copy link
Member

@mcollina mcollina commented Nov 15, 2017

@mcollina
Copy link
Member

@mcollina mcollina commented Nov 15, 2017

Landed as 157df5a.

@mcollina mcollina closed this Nov 15, 2017
mcollina pushed a commit that referenced this issue Nov 15, 2017
Replaced _readableState.highWaterMark with a .readableHighWaterMark
getter and _writableState.highWaterMark with a .writableHighWaterMark
getter.
The getters are non-enumerable because they break some prototype
manipulation that happen in the ecosystem.

Ref: #445.

PR-URL: #12860
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
@@ -373,13 +373,13 @@ function connectionListener(socket) {
function updateOutgoingData(socket, state, delta) {
state.outgoingData += delta;
if (socket._paused &&
state.outgoingData < socket._writableState.highWaterMark) {
state.outgoingData < socket.writeHWM) {
Copy link
Contributor

@mscdex mscdex Nov 15, 2017

Choose a reason for hiding this comment

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

This isn't correct.

Copy link
Member

@mcollina mcollina Nov 15, 2017

Choose a reason for hiding this comment

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

interesting enough, our test suite passed.

Copy link
Member

@mcollina mcollina Nov 15, 2017

Choose a reason for hiding this comment

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

I'll get it updated.

return socketOnDrain(socket, state);
}
}

function socketOnDrain(socket, state) {
var needPause = state.outgoingData > socket._writableState.highWaterMark;
var needPause = state.outgoingData > socket.writeHWM;
Copy link
Contributor

@mscdex mscdex Nov 15, 2017

Choose a reason for hiding this comment

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

Ditto.

@mscdex
Copy link
Contributor

@mscdex mscdex commented Nov 15, 2017

I honestly think this should have waited until we came up with a general decision about _readableState and _writableState.

@mcollina
Copy link
Member

@mcollina mcollina commented Nov 15, 2017

@mscdex that happened: nodejs/TSC#355

mcollina added a commit to mcollina/node that referenced this issue Nov 15, 2017
mcollina added a commit that referenced this issue Nov 15, 2017
See: #12860 (review)

PR-URL: #17050
Reviewed-By: Calvin Metcalf <calvin.metcalf@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
MylesBorins pushed a commit that referenced this issue Dec 11, 2017
Replaced _readableState.highWaterMark with a .readableHighWaterMark
getter and _writableState.highWaterMark with a .writableHighWaterMark
getter.
The getters are non-enumerable because they break some prototype
manipulation that happen in the ecosystem.

Ref: #445.

PR-URL: #12860
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
MylesBorins pushed a commit that referenced this issue Dec 11, 2017
See: #12860 (review)

PR-URL: #17050
Reviewed-By: Calvin Metcalf <calvin.metcalf@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
MylesBorins added a commit that referenced this issue Dec 12, 2017
Notable changes:

* async\_hooks:
  - add trace events to async_hooks (Andreas Madsen)
    #15538
  - add provider types for net server (Andreas Madsen)
    #17157
* console:
  - console.debug can now be used outside of the inspector
    (Benjamin Zaslavsky) #17033
* deps:
  - upgrade libuv to 1.18.0 (cjihrig)
    #17282
  - patch V8 to 6.2.414.46 (Myles Borins)
    #17206
* module:
  - module.builtinModules will return a list of built in modules
    (Jon Moss) #16386
* n-api:
  - add helper for addons to get the event loop (Anna Henningsen)
    #17109
* process:
  - process.setUncaughtExceptionCaptureCallback can now be used to
    customize behavior for `--abort-on-uncaught-exception`
    (Anna Henningsen) #17159
  - A signal handler is now able to receive the signal code that
    triggered the handler. (Robert Rossmann)
    #15606
* src:
  - embedders can now use Node::CreatePlatform to create an instance of
    NodePlatform (Cheng Zhao)
    #16981
* stream:
  - writable.writableHighWaterMark and readable.readableHighWaterMark
    will return the values the stream object was instantiated with
    (Calvin Metcalf) #12860
* **Added new collaborators**
  * [maclover7](https://github.com/maclover7) Jon Moss
  * [guybedford](https://github.com/guybedford) Guy Bedford
  * [hashseed](https://github.com/hashseed) Yang Guo

PR-URL: Coming Soon
@MylesBorins MylesBorins mentioned this pull request Dec 12, 2017
MylesBorins added a commit that referenced this issue Dec 12, 2017
Notable changes:

* async\_hooks:
  - add trace events to async_hooks (Andreas Madsen)
    #15538
  - add provider types for net server (Andreas Madsen)
    #17157
* console:
  - console.debug can now be used outside of the inspector
    (Benjamin Zaslavsky) #17033
* deps:
  - upgrade libuv to 1.18.0 (cjihrig)
    #17282
  - patch V8 to 6.2.414.46 (Myles Borins)
    #17206
* module:
  - module.builtinModules will return a list of built in modules
    (Jon Moss) #16386
* n-api:
  - add helper for addons to get the event loop (Anna Henningsen)
    #17109
* process:
  - process.setUncaughtExceptionCaptureCallback can now be used to
    customize behavior for `--abort-on-uncaught-exception`
    (Anna Henningsen) #17159
  - A signal handler is now able to receive the signal code that
    triggered the handler. (Robert Rossmann)
    #15606
* src:
  - embedders can now use Node::CreatePlatform to create an instance of
    NodePlatform (Cheng Zhao)
    #16981
* stream:
  - writable.writableHighWaterMark and readable.readableHighWaterMark
    will return the values the stream object was instantiated with
    (Calvin Metcalf) #12860
* **Added new collaborators**
  * [maclover7](https://github.com/maclover7) Jon Moss
  * [guybedford](https://github.com/guybedford) Guy Bedford
  * [hashseed](https://github.com/hashseed) Yang Guo

PR-URL: #17631
MylesBorins added a commit that referenced this issue Dec 12, 2017
Notable changes:

* async\_hooks:
  - add trace events to async_hooks (Andreas Madsen)
    #15538
  - add provider types for net server (Andreas Madsen)
    #17157
* console:
  - console.debug can now be used outside of the inspector
    (Benjamin Zaslavsky) #17033
* deps:
  - upgrade libuv to 1.18.0 (cjihrig)
    #17282
  - patch V8 to 6.2.414.46 (Myles Borins)
    #17206
* module:
  - module.builtinModules will return a list of built in modules
    (Jon Moss) #16386
* n-api:
  - add helper for addons to get the event loop (Anna Henningsen)
    #17109
* process:
  - process.setUncaughtExceptionCaptureCallback can now be used to
    customize behavior for `--abort-on-uncaught-exception`
    (Anna Henningsen) #17159
  - A signal handler is now able to receive the signal code that
    triggered the handler. (Robert Rossmann)
    #15606
* src:
  - embedders can now use Node::CreatePlatform to create an instance of
    NodePlatform (Cheng Zhao)
    #16981
* stream:
  - writable.writableHighWaterMark and readable.readableHighWaterMark
    will return the values the stream object was instantiated with
    (Calvin Metcalf) #12860
* **Added new collaborators**
  * [maclover7](https://github.com/maclover7) Jon Moss
  * [guybedford](https://github.com/guybedford) Guy Bedford
  * [hashseed](https://github.com/hashseed) Yang Guo

PR-URL: #17631
@gibfahn
Copy link
Member

@gibfahn gibfahn commented Jan 15, 2018

Release team were +1 on backporting to v8.x.

MylesBorins pushed a commit that referenced this issue Jan 15, 2018
Replaced _readableState.highWaterMark with a .readableHighWaterMark
getter and _writableState.highWaterMark with a .writableHighWaterMark
getter.
The getters are non-enumerable because they break some prototype
manipulation that happen in the ecosystem.

Ref: #445.

PR-URL: #12860
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
gibfahn pushed a commit that referenced this issue Jan 27, 2018
See: #12860 (review)

PR-URL: #17050
Reviewed-By: Calvin Metcalf <calvin.metcalf@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
gibfahn added a commit that referenced this issue Mar 6, 2018
Notable changes:

* deps:
  * update V8 to 6.2.414.46 (Michaël Zasso) [#16413](#16413)
  * revert ABI breaking changes in V8 6.2 (Anna Henningsen) [#16413](#16413)
  * upgrade libuv to 1.19.1 (cjihrig) [#18260](#18260)
  * re land npm 5.6.0 (Myles Borins) [#18625](#18625)
  * ICU 60 bump (Steven R. Loomis) [#16876](#16876)
* crypto:
  * Support both OpenSSL 1.1.0 and 1.0.2 (David Benjamin) [#16130](#16130)
  * warn on invalid authentication tag length (Tobias Nießen) [#17566](#17566)
* async_hooks:
  * update defaultTriggerAsyncIdScope for perf (Anatoli Papirovski) [#18004](#18004)
  * use typed array stack as fast path (Anna Henningsen) [#17780](#17780)
  * use scope for defaultTriggerAsyncId (Andreas Madsen) [#17273](#17273)
  * separate missing from default context (Andreas Madsen) [#17273](#17273)
  * rename initTriggerId (Andreas Madsen) [#17273](#17273)
  * deprecate undocumented API (Andreas Madsen) [#16972](#16972)
  * add destroy event for gced AsyncResources (Sebastian Mayr) [#16998](#16998)
  * add trace events to async_hooks (Andreas Madsen) [#15538](#15538)
  * set HTTPParser trigger to socket (Andreas Madsen) [#18003](#18003)
  * add provider types for net server (Andreas Madsen) [#17157](#17157)
* n-api:
  * add helper for addons to get the event loop (Anna Henningsen) [#17109](#17109)
* cli:
  * add --stack-trace-limit to NODE_OPTIONS (Anna Henningsen) [#16495](#16495)
* console:
  * add support for console.debug (Benjamin Zaslavsky) [#17033](#17033)
* module:
  * add builtinModules (Jon Moss) [#16386](#16386)
  * replace default paths in require.resolve() (cjihrig) [#17113](#17113)
* src:
  * add helper for addons to get the event loop (Anna Henningsen) [#17109](#17109)
  * add process.ppid (cjihrig) [#16839](#16839)
* http:
  * support generic `Duplex` streams (Anna Henningsen) [#16267](#16267)
  * add rawPacket in err of `clientError` event (XadillaX) [#17672](#17672)
  * better support for IPv6 addresses (Mattias Holmlund) [#14772](#14772)
* net:
  * remove ADDRCONFIG DNS hint on Windows (Bartosz Sosnowski) [#17662](#17662)
* process:
  * fix reading zero-length env vars on win32 (Anna Henningsen) [#18463](#18463)
* tls:
  * unconsume stream on destroy (Anna Henningsen) [#17478](#17478)
* process:
  * improve unhandled rejection message (Madara Uchiha) [#17158](#17158)
* stream:
  * remove usage of *State.highWaterMark (Calvin Metcalf) [#12860](#12860)
* trace_events:
  * add executionAsyncId to init events (Andreas Madsen) [#17196](#17196)

PR-URL: #18336
gibfahn added a commit that referenced this issue Mar 7, 2018
Notable changes:

* deps:
  * update V8 to 6.2.414.46 (Michaël Zasso) [#16413](#16413)
  * revert ABI breaking changes in V8 6.2 (Anna Henningsen) [#16413](#16413)
  * upgrade libuv to 1.19.1 (cjihrig) [#18260](#18260)
  * re land npm 5.6.0 (Myles Borins) [#18625](#18625)
  * ICU 60 bump (Steven R. Loomis) [#16876](#16876)
* crypto:
  * Support both OpenSSL 1.1.0 and 1.0.2 (David Benjamin) [#16130](#16130)
  * warn on invalid authentication tag length (Tobias Nießen) [#17566](#17566)
* async_hooks:
  * update defaultTriggerAsyncIdScope for perf (Anatoli Papirovski) [#18004](#18004)
  * use typed array stack as fast path (Anna Henningsen) [#17780](#17780)
  * use scope for defaultTriggerAsyncId (Andreas Madsen) [#17273](#17273)
  * separate missing from default context (Andreas Madsen) [#17273](#17273)
  * rename initTriggerId (Andreas Madsen) [#17273](#17273)
  * deprecate undocumented API (Andreas Madsen) [#16972](#16972)
  * add destroy event for gced AsyncResources (Sebastian Mayr) [#16998](#16998)
  * add trace events to async_hooks (Andreas Madsen) [#15538](#15538)
  * set HTTPParser trigger to socket (Andreas Madsen) [#18003](#18003)
  * add provider types for net server (Andreas Madsen) [#17157](#17157)
* n-api:
  * add helper for addons to get the event loop (Anna Henningsen) [#17109](#17109)
* cli:
  * add --stack-trace-limit to NODE_OPTIONS (Anna Henningsen) [#16495](#16495)
* console:
  * add support for console.debug (Benjamin Zaslavsky) [#17033](#17033)
* module:
  * add builtinModules (Jon Moss) [#16386](#16386)
  * replace default paths in require.resolve() (cjihrig) [#17113](#17113)
* src:
  * add helper for addons to get the event loop (Anna Henningsen) [#17109](#17109)
  * add process.ppid (cjihrig) [#16839](#16839)
* http:
  * support generic `Duplex` streams (Anna Henningsen) [#16267](#16267)
  * add rawPacket in err of `clientError` event (XadillaX) [#17672](#17672)
  * better support for IPv6 addresses (Mattias Holmlund) [#14772](#14772)
* net:
  * remove ADDRCONFIG DNS hint on Windows (Bartosz Sosnowski) [#17662](#17662)
* process:
  * fix reading zero-length env vars on win32 (Anna Henningsen) [#18463](#18463)
* tls:
  * unconsume stream on destroy (Anna Henningsen) [#17478](#17478)
* process:
  * improve unhandled rejection message (Madara Uchiha) [#17158](#17158)
* stream:
  * remove usage of *State.highWaterMark (Calvin Metcalf) [#12860](#12860)
* trace_events:
  * add executionAsyncId to init events (Andreas Madsen) [#17196](#17196)

PR-URL: #18336
MayaLekova pushed a commit to MayaLekova/node that referenced this issue May 8, 2018
Notable changes:

* deps:
  * update V8 to 6.2.414.46 (Michaël Zasso) [nodejs#16413](nodejs#16413)
  * revert ABI breaking changes in V8 6.2 (Anna Henningsen) [nodejs#16413](nodejs#16413)
  * upgrade libuv to 1.19.1 (cjihrig) [nodejs#18260](nodejs#18260)
  * re land npm 5.6.0 (Myles Borins) [nodejs#18625](nodejs#18625)
  * ICU 60 bump (Steven R. Loomis) [nodejs#16876](nodejs#16876)
* crypto:
  * Support both OpenSSL 1.1.0 and 1.0.2 (David Benjamin) [nodejs#16130](nodejs#16130)
  * warn on invalid authentication tag length (Tobias Nießen) [nodejs#17566](nodejs#17566)
* async_hooks:
  * update defaultTriggerAsyncIdScope for perf (Anatoli Papirovski) [nodejs#18004](nodejs#18004)
  * use typed array stack as fast path (Anna Henningsen) [nodejs#17780](nodejs#17780)
  * use scope for defaultTriggerAsyncId (Andreas Madsen) [nodejs#17273](nodejs#17273)
  * separate missing from default context (Andreas Madsen) [nodejs#17273](nodejs#17273)
  * rename initTriggerId (Andreas Madsen) [nodejs#17273](nodejs#17273)
  * deprecate undocumented API (Andreas Madsen) [nodejs#16972](nodejs#16972)
  * add destroy event for gced AsyncResources (Sebastian Mayr) [nodejs#16998](nodejs#16998)
  * add trace events to async_hooks (Andreas Madsen) [nodejs#15538](nodejs#15538)
  * set HTTPParser trigger to socket (Andreas Madsen) [nodejs#18003](nodejs#18003)
  * add provider types for net server (Andreas Madsen) [nodejs#17157](nodejs#17157)
* n-api:
  * add helper for addons to get the event loop (Anna Henningsen) [nodejs#17109](nodejs#17109)
* cli:
  * add --stack-trace-limit to NODE_OPTIONS (Anna Henningsen) [nodejs#16495](nodejs#16495)
* console:
  * add support for console.debug (Benjamin Zaslavsky) [nodejs#17033](nodejs#17033)
* module:
  * add builtinModules (Jon Moss) [nodejs#16386](nodejs#16386)
  * replace default paths in require.resolve() (cjihrig) [nodejs#17113](nodejs#17113)
* src:
  * add helper for addons to get the event loop (Anna Henningsen) [nodejs#17109](nodejs#17109)
  * add process.ppid (cjihrig) [nodejs#16839](nodejs#16839)
* http:
  * support generic `Duplex` streams (Anna Henningsen) [nodejs#16267](nodejs#16267)
  * add rawPacket in err of `clientError` event (XadillaX) [nodejs#17672](nodejs#17672)
  * better support for IPv6 addresses (Mattias Holmlund) [nodejs#14772](nodejs#14772)
* net:
  * remove ADDRCONFIG DNS hint on Windows (Bartosz Sosnowski) [nodejs#17662](nodejs#17662)
* process:
  * fix reading zero-length env vars on win32 (Anna Henningsen) [nodejs#18463](nodejs#18463)
* tls:
  * unconsume stream on destroy (Anna Henningsen) [nodejs#17478](nodejs#17478)
* process:
  * improve unhandled rejection message (Madara Uchiha) [nodejs#17158](nodejs#17158)
* stream:
  * remove usage of *State.highWaterMark (Calvin Metcalf) [nodejs#12860](nodejs#12860)
* trace_events:
  * add executionAsyncId to init events (Andreas Madsen) [nodejs#17196](nodejs#17196)

PR-URL: nodejs#18336
@Trott Trott moved this from Work In Progress / Has PR to Done in Streams: _readableState and _writableState May 1, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
http lib / src net semver-minor stream
Development

Successfully merging this pull request may close these issues.

None yet

8 participants
X Tutup