Skip to content

src: deprecate global COUNTER_* functions - #22485

Closed
jasnell wants to merge 1 commit into
nodejs:masterfrom
jasnell:deprecate_global_counters
Closed

src: deprecate global COUNTER_* functions#22485
jasnell wants to merge 1 commit into
nodejs:masterfrom
jasnell:deprecate_global_counters

Conversation

@jasnell

@jasnelljasnell commented Aug 23, 2018

Copy link
Copy Markdown
Member

To support Performance Counters on Windows, a number of
global COUNTER_ methods were added that are undocumented
and really only intended to be used internally by Node.js.

~~This replaces those with an internalBinding that is only
enabled when the --with-perfctr configuration option is
used and adds a runtime deprecation for the existing global
functions.

Intent is to remove the globals after one major release
cycle with the runtime deprecations.~~

Update: This removes the perfctr support given that it's apparently been non-functional for a while now and no one noticed. The global js functions are replaced with deprecated non-ops that can be removed in the next major release cycle.

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • documentation is changed or added
  • commit message follows commit guidelines

@jasnelljasnell added the semver-major PRs that contain breaking changes and should be released in the next major version. label Aug 23, 2018
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@nodejs-github-botnodejs-github-bot added the lib / src Issues and PRs related to general changes in the lib or src directory. label Aug 23, 2018
@jasnell

Copy link
Copy Markdown
MemberAuthor

@jasnell

jasnell commented Aug 23, 2018

Copy link
Copy Markdown
MemberAuthor

@jasnell

Copy link
Copy Markdown
MemberAuthor

Relevant failures in CI. Looking into it.

@jasnell
jasnellforce-pushed the deprecate_global_counters branch 2 times, most recently from 93a47ec to 9cd812dCompareAugust 23, 2018 21:55
@jasnell

Copy link
Copy Markdown
MemberAuthor

Ok, should be a working CI now: https://ci.nodejs.org/job/node-test-pull-request/16703/

@jasnelljasnell added the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Aug 23, 2018
@jasnell

Copy link
Copy Markdown
MemberAuthor

CI is good.

@jasnell

Copy link
Copy Markdown
MemberAuthor

@jasnell
jasnell requested a review from a teamAugust 27, 2018 21:00
@jasnell
jasnellforce-pushed the deprecate_global_counters branch from 9cd812d to 6615cd1CompareAugust 27, 2018 21:10
@jasnell

Copy link
Copy Markdown
MemberAuthor

@joaocgreisjoaocgreis 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.

Rubber-stamp LGTM. Removing the global functions LGTM. However, I'm not sure this should land, given the reasons detailed in nodejs/diagnostics#223 (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.

Can you just increase this by 1?

@addaleaxaddaleax removed the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Sep 2, 2018
@addaleax

Copy link
Copy Markdown
Member

This would need at least a rebase (but it sounds like it might not happen at all?)

@jasnell

Copy link
Copy Markdown
MemberAuthor

I will be refactoring this to:

  1. Remove the counter support entirely
  2. Temporarily leave in the globals as deprecated non-ops that can be removed in 12.

@BridgeARBridgeAR added the wip Issues and PRs that are still a work in progress. label Sep 5, 2018
@jasnell
jasnellforce-pushed the deprecate_global_counters branch 2 times, most recently from d4c0b90 to 5cd1ce4CompareSeptember 6, 2018 15:38
@jasnelljasnell removed the wip Issues and PRs that are still a work in progress. label Sep 6, 2018
@jasnell
jasnellforce-pushed the deprecate_global_counters branch from 5cd1ce4 to 5574a5eCompareSeptember 6, 2018 15:42
@jasnell

Copy link
Copy Markdown
MemberAuthor

@joaocgreis@cjihrig@BridgeAR ... this PR has been significantly updated to just remove the perfctr support entirely and replace the global js functions with deprecated, non-enumerable non-ops. Given that the three of you signed off on the prior version, please take another look.

@jasnell
jasnellforce-pushed the deprecate_global_counters branch from 5574a5e to ac71e30CompareSeptember 6, 2018 15:43
@joaocgreis

Copy link
Copy Markdown
Member

There was an issue with git-rebase, resumed: https://ci.nodejs.org/view/All/job/node-test-pull-request/17109/

@jasnell

Copy link
Copy Markdown
MemberAuthor

Flaky failure on Windows... resuming: https://ci.nodejs.org/view/All/job/node-test-pull-request/17110/

To support Performance Counters on Windows, a number of
global `COUNTER_` methods were added that are undocumented
and really only intended to be used internally by Node.js.
Unfortunately, the perfctr support apparently hasn't even
worked for quite a while and no one has even complained.
This removes the perfctr support and replaces the global
functions with deprecated non-ops for now, with the intent
of removing those outright in the next major release cycle.
@jasnell
jasnellforce-pushed the deprecate_global_counters branch from 2d67d1f to 4e6ef4dCompareSeptember 12, 2018 14:23
@jasnell

Copy link
Copy Markdown
MemberAuthor

Unrelated failure in windows again... running a full new CI after rebase... https://ci.nodejs.org/job/node-test-pull-request/17143/

@jasnelljasnell added the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Sep 12, 2018
@addaleax

Copy link
Copy Markdown
Member

@Trott

Copy link
Copy Markdown
Member

@danbev

Copy link
Copy Markdown
Contributor

Landed in 9d71e6a.

@danbevdanbev closed this Sep 19, 2018
danbev pushed a commit that referenced this pull request Sep 19, 2018
To support Performance Counters on Windows, a number of
global `COUNTER_` methods were added that are undocumented
and really only intended to be used internally by Node.js.
Unfortunately, the perfctr support apparently hasn't even
worked for quite a while and no one has even complained.
This removes the perfctr support and replaces the global
functions with deprecated non-ops for now, with the intent
of removing those outright in the next major release cycle.
PR-URL: #22485
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: João Reis <reis@janeasystems.com>
@jasnell

Copy link
Copy Markdown
MemberAuthor

Thank you @danbev ...

It's frustrating that it took 5 re-runs of the ci to get this landed.

jasnell added a commit that referenced this pull request Oct 2, 2018
Notable changes:
* Build
* FreeBSD 10 is no longer supported. [#22617](#22617)
* `child_process`
* The default value of the `windowsHide` option has been changed to `true`. [#21316](#21316)
* `console`
* `console.countReset()` will emit a warning if the timer being reset does not exist. [#21649](#21649)
* `console.time()` will no longer reset a timer if it already exists. [#20442](#20442)
* `crypto`
* PEM-level encryption is now supported. [#23151](#23151)
* An API for key pair generation has been added. [#22660](#22660)
* Dependencies
* V8 has been updated to 7.0. [#22754](#22754)
* `fs`
* The `fs.read()` method now requires a callback. [#22146](#22146)
* The previously deprecated `fs.SyncWriteStream` utility has been removed.[#20735](#20735)
* `http`
* The `http`, `https`, and `tls` modules now use the WHATWG URL parser by default. [#20270](#20270)
* `http2`
* An event will be emitted when a `PING` frame is received. [#23009](#23009)
* Support for the `ORIGIN` frame has been added. [#22956](#22956)
* General
* Use of `process.binding()` has been deprecated. Userland code using `process.binding()` should re-evaluate that use and begin migrating.
* An experimental implementation of `queueMicrotask()` has been added. [#22951](#22951)
* Internal
* Windows performance-counter support has been removed. [#22485](#22485)
* The `--expose-http2` command-line option has been removed. [#20887](#20887)
* Promises
* A new `multipleResolves` event will be emitted when a Promise is resolved (or rejected) more than once. [#22218](#22218)
* Timers
* Interval timers will be rescheduled even if previous interval threw an error. [#20002](#20002)
* `util`
* The WHATWG `TextEncoder` and `TextDecoder` are now globals. [#22281](#22281)
* `util.inspect()` output size is limited to 128 MB by default. [#22756](#22756)
* A runtime warning will be emitted when `NODE_DEBUG` is set for either `http` or `http2`. [#21914](#21914)
@jasnelljasnell mentioned this pull request Oct 2, 2018
4 tasks
jasnell added a commit that referenced this pull request Oct 17, 2018
Notable changes:
* Build
* FreeBSD 10 is no longer supported.[#22617](#22617)
* `child_process`
* The default value of the `windowsHide` option has been changed
to `true`. [#21316](#21316)
* `console`
* `console.countReset()` will emit a warning if the timer
being reset does not exist. [#21649](#21649)
* `console.time()` will no longer reset a timer if it already
exists. [#20442](#20442)
* Dependencies
* V8 has been updated to 7.0.
[#22754](#22754)
* `fs`
* The `fs.read()` method now requires a callback.
[#22146](#22146)
* The previously deprecated `fs.SyncWriteStream` utility has been
removed.[#20735](#20735)
* `http`
* The `http`, `https`, and `tls` modules now use the WHATWG URL parser
by default. [#20270](#20270)
* General
* Use of `process.binding()` has been deprecated. Userland code using
`process.binding()` should re-evaluate that use and begin migrating. If
there are no supported API alternatives, please open an issue in the
Node.js GitHub repository so that a suitable alternative may be discussed.
* An experimental implementation of `queueMicrotask()` has been added.
[#22951](#22951)
* Internal
* Windows performance-counter support has been removed.
[#22485](#22485)
* The `--expose-http2` command-line option has been removed.
[#20887](#20887)
* Timers
* Interval timers will be rescheduled even if previous interval threw
an error. [#20002](#20002)
* `util`
* The WHATWG `TextEncoder` and `TextDecoder` are now globals.
[#22281](#22281)
* `util.inspect()` output size is limited to 128 MB by default.
[#22756](#22756)
* A runtime warning will be emitted when `NODE_DEBUG` is set for
either `http` or `http2`. [#21914](#21914)
jasnell added a commit that referenced this pull request Oct 17, 2018
Notable changes:
* Build
* FreeBSD 10 is no longer supported.[#22617](#22617)
* `child_process`
* The default value of the `windowsHide` option has been changed
to `true`. [#21316](#21316)
* `console`
* `console.countReset()` will emit a warning if the timer
being reset does not exist. [#21649](#21649)
* `console.time()` will no longer reset a timer if it already
exists. [#20442](#20442)
* Dependencies
* V8 has been updated to 7.0.
[#22754](#22754)
* `fs`
* The `fs.read()` method now requires a callback.
[#22146](#22146)
* The previously deprecated `fs.SyncWriteStream` utility has been
removed.[#20735](#20735)
* `http`
* The `http`, `https`, and `tls` modules now use the WHATWG URL parser
by default. [#20270](#20270)
* General
* Use of `process.binding()` has been deprecated. Userland code using
`process.binding()` should re-evaluate that use and begin migrating. If
there are no supported API alternatives, please open an issue in the
Node.js GitHub repository so that a suitable alternative may be discussed.
* An experimental implementation of `queueMicrotask()` has been added.
[#22951](#22951)
* Internal
* Windows performance-counter support has been removed.
[#22485](#22485)
* The `--expose-http2` command-line option has been removed.
[#20887](#20887)
* Timers
* Interval timers will be rescheduled even if previous interval threw
an error. [#20002](#20002)
* `util`
* The WHATWG `TextEncoder` and `TextDecoder` are now globals.
[#22281](#22281)
* `util.inspect()` output size is limited to 128 MB by default.
[#22756](#22756)
* A runtime warning will be emitted when `NODE_DEBUG` is set for
either `http` or `http2`. [#21914](#21914)
jasnell added a commit that referenced this pull request Oct 21, 2018
Notable changes:
* Build
* FreeBSD 10 is no longer supported.[#22617](#22617)
* `child_process`
* The default value of the `windowsHide` option has been changed
to `true`. [#21316](#21316)
* `console`
* `console.countReset()` will emit a warning if the timer
being reset does not exist. [#21649](#21649)
* `console.time()` will no longer reset a timer if it already
exists. [#20442](#20442)
* Dependencies
* V8 has been updated to 7.0.
[#22754](#22754)
* `fs`
* The `fs.read()` method now requires a callback.
[#22146](#22146)
* The previously deprecated `fs.SyncWriteStream` utility has been
removed.[#20735](#20735)
* `http`
* The `http`, `https`, and `tls` modules now use the WHATWG URL parser
by default. [#20270](#20270)
* General
* Use of `process.binding()` has been deprecated. Userland code using
`process.binding()` should re-evaluate that use and begin migrating. If
there are no supported API alternatives, please open an issue in the
Node.js GitHub repository so that a suitable alternative may be discussed.
* An experimental implementation of `queueMicrotask()` has been added.
[#22951](#22951)
* Internal
* Windows performance-counter support has been removed.
[#22485](#22485)
* The `--expose-http2` command-line option has been removed.
[#20887](#20887)
* Timers
* Interval timers will be rescheduled even if previous interval threw
an error. [#20002](#20002)
* `util`
* The WHATWG `TextEncoder` and `TextDecoder` are now globals.
[#22281](#22281)
* `util.inspect()` output size is limited to 128 MB by default.
[#22756](#22756)
* A runtime warning will be emitted when `NODE_DEBUG` is set for
either `http` or `http2`. [#21914](#21914)
jasnell added a commit that referenced this pull request Oct 22, 2018
Notable changes:
* Build
* FreeBSD 10 is no longer supported.[#22617](#22617)
* `child_process`
* The default value of the `windowsHide` option has been changed
to `true`. [#21316](#21316)
* `console`
* `console.countReset()` will emit a warning if the timer
being reset does not exist. [#21649](#21649)
* `console.time()` will no longer reset a timer if it already
exists. [#20442](#20442)
* Dependencies
* V8 has been updated to 7.0.
[#22754](#22754)
* `fs`
* The `fs.read()` method now requires a callback.
[#22146](#22146)
* The previously deprecated `fs.SyncWriteStream` utility has been
removed.[#20735](#20735)
* `http`
* The `http`, `https`, and `tls` modules now use the WHATWG URL parser
by default. [#20270](#20270)
* General
* Use of `process.binding()` has been deprecated. Userland code using
`process.binding()` should re-evaluate that use and begin migrating. If
there are no supported API alternatives, please open an issue in the
Node.js GitHub repository so that a suitable alternative may be discussed.
* An experimental implementation of `queueMicrotask()` has been added.
[#22951](#22951)
* Internal
* Windows performance-counter support has been removed.
[#22485](#22485)
* The `--expose-http2` command-line option has been removed.
[#20887](#20887)
* Timers
* Interval timers will be rescheduled even if previous interval threw
an error. [#20002](#20002)
* `util`
* The WHATWG `TextEncoder` and `TextDecoder` are now globals.
[#22281](#22281)
* `util.inspect()` output size is limited to 128 MB by default.
[#22756](#22756)
* A runtime warning will be emitted when `NODE_DEBUG` is set for
either `http` or `http2`. [#21914](#21914)
devsnek pushed a commit to devsnek/node that referenced this pull request Oct 23, 2018
Notable changes:
* Build
* FreeBSD 10 is no longer supported.[nodejs#22617](nodejs#22617)
* `child_process`
* The default value of the `windowsHide` option has been changed
to `true`. [nodejs#21316](nodejs#21316)
* `console`
* `console.countReset()` will emit a warning if the timer
being reset does not exist. [nodejs#21649](nodejs#21649)
* `console.time()` will no longer reset a timer if it already
exists. [nodejs#20442](nodejs#20442)
* Dependencies
* V8 has been updated to 7.0.
[nodejs#22754](nodejs#22754)
* `fs`
* The `fs.read()` method now requires a callback.
[nodejs#22146](nodejs#22146)
* The previously deprecated `fs.SyncWriteStream` utility has been
removed.[nodejs#20735](nodejs#20735)
* `http`
* The `http`, `https`, and `tls` modules now use the WHATWG URL parser
by default. [nodejs#20270](nodejs#20270)
* General
* Use of `process.binding()` has been deprecated. Userland code using
`process.binding()` should re-evaluate that use and begin migrating. If
there are no supported API alternatives, please open an issue in the
Node.js GitHub repository so that a suitable alternative may be discussed.
* An experimental implementation of `queueMicrotask()` has been added.
[nodejs#22951](nodejs#22951)
* Internal
* Windows performance-counter support has been removed.
[nodejs#22485](nodejs#22485)
* The `--expose-http2` command-line option has been removed.
[nodejs#20887](nodejs#20887)
* Timers
* Interval timers will be rescheduled even if previous interval threw
an error. [nodejs#20002](nodejs#20002)
* `util`
* The WHATWG `TextEncoder` and `TextDecoder` are now globals.
[nodejs#22281](nodejs#22281)
* `util.inspect()` output size is limited to 128 MB by default.
[nodejs#22756](nodejs#22756)
* A runtime warning will be emitted when `NODE_DEBUG` is set for
either `http` or `http2`. [nodejs#21914](nodejs#21914)
deepak1556 added a commit to electron/node that referenced this pull request Oct 25, 2018
MarshallOfSound pushed a commit to electron/node that referenced this pull request Oct 25, 2018
deepak1556 pushed a commit to electron/node that referenced this pull request Dec 10, 2018
Notable changes:
* Build
* FreeBSD 10 is no longer supported.[#22617](nodejs/node#22617)
* `child_process`
* The default value of the `windowsHide` option has been changed
to `true`. [#21316](nodejs/node#21316)
* `console`
* `console.countReset()` will emit a warning if the timer
being reset does not exist. [#21649](nodejs/node#21649)
* `console.time()` will no longer reset a timer if it already
exists. [#20442](nodejs/node#20442)
* Dependencies
* V8 has been updated to 7.0.
[#22754](nodejs/node#22754)
* `fs`
* The `fs.read()` method now requires a callback.
[#22146](nodejs/node#22146)
* The previously deprecated `fs.SyncWriteStream` utility has been
removed.[#20735](nodejs/node#20735)
* `http`
* The `http`, `https`, and `tls` modules now use the WHATWG URL parser
by default. [#20270](nodejs/node#20270)
* General
* Use of `process.binding()` has been deprecated. Userland code using
`process.binding()` should re-evaluate that use and begin migrating. If
there are no supported API alternatives, please open an issue in the
Node.js GitHub repository so that a suitable alternative may be discussed.
* An experimental implementation of `queueMicrotask()` has been added.
[#22951](nodejs/node#22951)
* Internal
* Windows performance-counter support has been removed.
[#22485](nodejs/node#22485)
* The `--expose-http2` command-line option has been removed.
[#20887](nodejs/node#20887)
* Timers
* Interval timers will be rescheduled even if previous interval threw
an error. [#20002](nodejs/node#20002)
* `util`
* The WHATWG `TextEncoder` and `TextDecoder` are now globals.
[#22281](nodejs/node#22281)
* `util.inspect()` output size is limited to 128 MB by default.
[#22756](nodejs/node#22756)
* A runtime warning will be emitted when `NODE_DEBUG` is set for
either `http` or `http2`. [#21914](nodejs/node#21914)
deepak1556 added a commit to electron/node that referenced this pull request Dec 10, 2018
deepak1556 pushed a commit to electron/node that referenced this pull request Dec 19, 2018
Notable changes:
* Build
* FreeBSD 10 is no longer supported.[#22617](nodejs/node#22617)
* `child_process`
* The default value of the `windowsHide` option has been changed
to `true`. [#21316](nodejs/node#21316)
* `console`
* `console.countReset()` will emit a warning if the timer
being reset does not exist. [#21649](nodejs/node#21649)
* `console.time()` will no longer reset a timer if it already
exists. [#20442](nodejs/node#20442)
* Dependencies
* V8 has been updated to 7.0.
[#22754](nodejs/node#22754)
* `fs`
* The `fs.read()` method now requires a callback.
[#22146](nodejs/node#22146)
* The previously deprecated `fs.SyncWriteStream` utility has been
removed.[#20735](nodejs/node#20735)
* `http`
* The `http`, `https`, and `tls` modules now use the WHATWG URL parser
by default. [#20270](nodejs/node#20270)
* General
* Use of `process.binding()` has been deprecated. Userland code using
`process.binding()` should re-evaluate that use and begin migrating. If
there are no supported API alternatives, please open an issue in the
Node.js GitHub repository so that a suitable alternative may be discussed.
* An experimental implementation of `queueMicrotask()` has been added.
[#22951](nodejs/node#22951)
* Internal
* Windows performance-counter support has been removed.
[#22485](nodejs/node#22485)
* The `--expose-http2` command-line option has been removed.
[#20887](nodejs/node#20887)
* Timers
* Interval timers will be rescheduled even if previous interval threw
an error. [#20002](nodejs/node#20002)
* `util`
* The WHATWG `TextEncoder` and `TextDecoder` are now globals.
[#22281](nodejs/node#22281)
* `util.inspect()` output size is limited to 128 MB by default.
[#22756](nodejs/node#22756)
* A runtime warning will be emitted when `NODE_DEBUG` is set for
either `http` or `http2`. [#21914](nodejs/node#21914)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author readyPRs that have at least one approval, no pending requests for changes, and a CI started.lib / srcIssues and PRs related to general changes in the lib or src directory.semver-majorPRs that contain breaking changes and should be released in the next major version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@jasnell@nodejs-github-bot@addaleax@joaocgreis@Trott@danbev@mcollina@cjihrig@BridgeAR