31275 Commits

Author SHA1 Message Date
Joyee Cheung
7a447bcd54
src: snapshot node
This runs `lib/internal/bootstrap/node.js` before creating
the builtin snapshot and deserialize the loaders from the
snapshot in deserialization mode.

PR-URL: https://github.com/nodejs/node/pull/32984
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-07-18 11:23:21 +08:00
Joyee Cheung
b1c3909bd7
lib: initialize instance members in class constructors
Since V8 snapshot does not currently support instance member
initialization, initialize them in ordianry class constructors
for now so that these classes can be included in the snapshot.
This may be reverted once
https://bugs.chromium.org/p/v8/issues/detail?id=10704
is fixed and backported.

PR-URL: https://github.com/nodejs/node/pull/32984
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-07-18 11:23:20 +08:00
Joyee Cheung
f8bde7ce06
bootstrap: build fast APIs in pre-execution
Fast APIs need to work with ArrayBuffers which we need
to rebuild connections to after deserializing them
from the snapshot. For now, postpone their creation
until pre-execution to simplify the process.

PR-URL: https://github.com/nodejs/node/pull/32984
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-07-18 11:23:18 +08:00
Joyee Cheung
c943cb4809
src: reset zero fill toggle at pre-execution
The connection between the JS land zero fill toggle and the
C++ one in the NodeArrayBufferAllocator gets lost if the toggle
is deserialized from the snapshot, because V8 owns the underlying
memory of this toggle. This resets the connection at pre-execution.

PR-URL: https://github.com/nodejs/node/pull/32984
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-07-18 11:23:16 +08:00
Joyee Cheung
0b8ae5f2cd
src: snapshot loaders
This runs `lib/internal/bootstrap/loaders.js` before creating
the builtin snapshot and deserialize the loaders from the
snapshot in deserialization mode.

PR-URL: https://github.com/nodejs/node/pull/32984
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-07-18 11:23:15 +08:00
Joyee Cheung
7ecb285842
src: make code cache test work with snapshots
Keep track of snapshotted modules in JS land, and move
bootstrap switches into StartExecution() so that
they are not included into part of the environment-independent
bootstrap process.

PR-URL: https://github.com/nodejs/node/pull/32984
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-07-18 11:23:13 +08:00
Joyee Cheung
1faf6f459f
src: snapshot Environment upon instantiation
This includes the initial Environment (without running bootstrap
scripts) into the builtin snapshot

PR-URL: https://github.com/nodejs/node/pull/32984
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-07-18 11:15:57 +08:00
Joyee Cheung
f04538761f
tools: enable Node.js command line flags in node_mksnapshot
Pass the flags down to node_mksnapshot so that we can use them
when generating the snapshot (e.g. to debug or enable V8 flags)

PR-URL: https://github.com/nodejs/node/pull/32984
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-07-18 11:03:00 +08:00
Joyee Cheung
ef9964f4c1
src: add an ExternalReferenceRegistry class
Add an ExternalReferenceRegistry class for registering static
external references.

To register the external JS to C++ references created in a binding
(e.g. when a FunctionTemplate is created):

- Add the binding name (same as the id used for `internalBinding()`
  and `NODE_MODULE_CONTEXT_AWARE_INTERNAL`) to
  `EXTERNAL_REFERENCE_BINDING_LIST` in `src/node_external_reference.h`.
- In the file where the binding is implemented, create a registration
  function to register the static C++ references (e.g. the C++
  functions in `v8::FunctionCallback` associated with the function
  templates), like this:

  ```c++
  void RegisterExternalReferences(
          ExternalReferenceRegistry* registry) {
    registry->Register(cpp_func_1);
  }
  ```
- At the end of the file where `NODE_MODULE_CONTEXT_AWARE_INTERNAL` is
  also usually called, register the registration function with

  ```
  NODE_MODULE_EXTERNAL_REFERENCE(binding_name,
                                 RegisterExternalReferences);
  ```

PR-URL: https://github.com/nodejs/node/pull/32984
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-07-18 11:02:58 +08:00
Joyee Cheung
404302fff5
src: split the main context initialization from Environemnt ctor
So that it's possible to create an Environment not yet attached
to any V8 context. We'll use this to deserialize the V8 context
before attaching an Environment to it.

PR-URL: https://github.com/nodejs/node/pull/32984
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
2020-07-18 11:02:56 +08:00
Rich Trott
d379b00078 test: do not write to fixtures dir in test-watch-file
Switch to tmpDir rather than fixtures for file writing.

PR-URL: https://github.com/nodejs/node/pull/34376
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2020-07-17 08:43:14 -07:00
Rich Trott
d10c59fc60 benchmark,test: remove output from readable-async-iterator benchmark
Extra output makes test-benchmark-streams fail. Change console.log() to
console.assert().

Fixes: https://github.com/nodejs/node/issues/34409

PR-URL: https://github.com/nodejs/node/pull/34411
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
2020-07-17 08:41:15 -07:00
rickyes
5aeaff6499 stream: refactor lazyLoadPromises
PR-URL: https://github.com/nodejs/node/pull/34354
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
Reviewed-By: Zeyu Yang <himself65@outlook.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-17 12:58:38 +02:00
Robert Nagy
08e8997d54 stream: simpler and faster Readable async iterator
Reimplement as an async generator instead of a custom
iterator class.

PR-URL: https://github.com/nodejs/node/pull/34035
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2020-07-17 09:06:27 +02:00
Rich Trott
bf0d82c102 test: remove common.localhostIPv6
common.localhostIPv6 is almost entirely unused and is unnecessary.
Remove it.

PR-URL: https://github.com/nodejs/node/pull/34373
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2020-07-16 16:57:30 -07:00
Stewart Addison
9cb72930e5 net: allow wider regex in interface name
Zone IDs on Linux are network interface names. The regex we use to
determine valid IPs does not allow for non-alphanumeric characters
in the zone ID suffix. Some machines (including the RHEL Linux/s390x
machines from Marist) have zone IDs with a '.' character in them
which the regex in net.isIP rejects. This changes the regex.

Ref: https://github.com/nodejs/node/pull/14500

Signed-off-by: Stewart Addison <sxa@uk.ibm.com>

PR-URL: https://github.com/nodejs/node/pull/34364
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
2020-07-16 18:32:25 -04:00
Rich Trott
5487054225 test: fix test-net-pingpong pummel test for non-IPv6 hosts
Use `common.hasIPv6` instead of an OS check for more reliable
operation.

PR-URL: https://github.com/nodejs/node/pull/34359
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
2020-07-16 14:28:41 -07:00
Robert Nagy
a55b77d2d3 stream: finished on closed OutgoingMessage
finished should invoke callback on closed OutgoingMessage the
same way as for regular streams.

Fixes: https://github.com/nodejs/node/issues/34301

PR-URL: https://github.com/nodejs/node/pull/34313
Fixes: https://github.com/nodejs/node/issues/34274
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
2020-07-16 08:37:01 +02:00
Rich Trott
d46fc91be4 doc: strengthen wording about fs.access() misuse
PR-URL: https://github.com/nodejs/node/pull/34352
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2020-07-15 22:47:55 -07:00
James M Snell
89453cfc08 quic: fixup quic.md
PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:17:08 -07:00
James M Snell
4523d4a813 quic: fixup closing/draining period timing
When entering the closing or draining periods, servers should wait
three times the current probe timeout before releasing session
state.

PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:17:06 -07:00
James M Snell
ed4882241c quic: properly pass readable/writable constructor options
PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:17:04 -07:00
James M Snell
57c1129508 quic: implement QuicSession close as promise
PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:17:01 -07:00
James M Snell
8e5c5b16ab quic: cleanup QuicClientSession constructor
PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:59 -07:00
James M Snell
fe4e7e4598 quic: use promisified dns lookup
PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:57 -07:00
James M Snell
346aeaf874 quic: eliminate "ready"/"not ready" states for QuicSession
QuicClientSession and QuicServerSessions are now always immediately
ready for use when they are created, so no more need to track
ready state.

PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:55 -07:00
James M Snell
6665dda9f6 quic: implement QuicSocket Promise API, part 2
PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:52 -07:00
James M Snell
79c0e892dd quic: implement QuicSocket Promise API, part 1
PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:50 -07:00
James M Snell
53b12f0c7b quic: implement QuicEndpoint Promise API
This is the start of a conversion over to a fully Promise-centric API
for the QUIC implementation.

PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:48 -07:00
James M Snell
16b32eae3e quic: handle unhandled rejections on QuicSession
PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:45 -07:00
James M Snell
e5d963e24d quic: fixup kEndpointClose
Ensure that the QuicSocket is properly destroyed if the QuicEndpoint
is destroyed directly rather than through QuicSocket destroy

PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:43 -07:00
James M Snell
9f552df5b4 quic: fix endpointClose error handling, document
PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:41 -07:00
James M Snell
b80108c033 quic: restrict addEndpoint to before QuicSocket bind
Restricting this to pre-bind keeps things simple

PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:39 -07:00
James M Snell
81c01bbdba quic: use a getter for stream options
Doesn't need to be a function

PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:37 -07:00
James M Snell
b8945ba2ab quic: clarifying code comments
PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:35 -07:00
James M Snell
429ab1dce6 quic: minor reduction in code duplication
PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:32 -07:00
James M Snell
aafdc2fcad quic: replace ipv6Only option with 'udp6-only' type
Since the `ipv6Only` option was mutually exclusive with
using `'udp6'`, making it it's own type simplifies things
a bit.

PR-URL: https://github.com/nodejs/node/pull/34283
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 17:16:30 -07:00
rickyes
48404a179f
stream: rename opts to options
PR-URL: https://github.com/nodejs/node/pull/34339
Refs: https://nodejs.org/dist/latest-v14.x/docs/api/stream.html#stream_stream_finished_stream_options_callback
Reviewed-By: Robert Nagy <ronagy@icloud.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2020-07-16 00:28:13 +02:00
gengjiawen
fbc38ee134
quic: clear clang warning
PR-URL: https://github.com/nodejs/node/pull/34335
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
2020-07-16 00:27:24 +02:00
Ye-hyoung Kang
9fc877890f
doc: fix typo in assert.md
PR-URL: https://github.com/nodejs/node/pull/34316
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
2020-07-16 00:26:26 +02:00
Anna Henningsen
e876c0c308
http2: add support for sensitive headers
Add support for “sensitive”/“never-indexed” HTTP2 headers.

Fixes: https://github.com/nodejs/node/issues/34091

PR-URL: https://github.com/nodejs/node/pull/34145
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
2020-07-16 00:25:47 +02:00
ExE Boss
9ae8491204
vm: add tests for function declarations using [[DefineOwnProperty]]
Refs: https://github.com/nodejs/node/issues/31808

PR-URL: https://github.com/nodejs/node/pull/34032
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Gus Caplan <me@gus.host>
2020-07-16 00:24:36 +02:00
Francisco Ryan Tolmasky I
fa2e460d0c
doc,tools: syntax highlight api docs at compile-time
Prior to this commit, API docs would be highlighted after the page
loaded using `highlightjs`. This commit still uses `highlightjs`, but
runs the generation during the compilation of the documentation, making
it so no script needs to load on the client. This results in a faster
load, as well as allowing the pages to fully functional even when
JavaScript is turned off.

PR-URL: https://github.com/nodejs/node/pull/34148
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-16 00:22:35 +02:00
Robert Nagy
a65218f5e8 stream: try to wait for flush to complete before 'finish'
Due to compat reasons Transform streams don't always wait
for flush to complete before finishing the stream.

Try to wait when possible, i.e. when the user does not
override _final.

Fixes: https://github.com/nodejs/node/issues/34274

PR-URL: https://github.com/nodejs/node/pull/34314
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Zeyu Yang <himself65@outlook.com>
2020-07-15 21:23:10 +02:00
Rich Trott
e44855d317 test: fix flaky test-net-connect-econnrefused
Test is flaky in CI with `common.PORT` but not flaky if a port is
determined from createServer() first.

PR-URL: https://github.com/nodejs/node/pull/34330
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-07-15 10:17:40 -07:00
Beth Griggs
128ed10fc4
module: update expected module.parent DEP number
PR-URL: https://github.com/nodejs/node/pull/34368
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Myles Borins <myles.borins@gmail.com>
2020-07-15 11:37:39 -04:00
Beth Griggs
218381213b
doc: sync deprecation numbers with v14.x
Syncs master and v14.x for DEP0143 - `Transform._transformState`.
Bumps `module.parent` from DEP0143 to DEP0144 on master. Adds
missing DEP number and  metadata for DEP0145: `socket.bufferSize`.

PR-URL: https://github.com/nodejs/node/pull/34368
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Myles Borins <myles.borins@gmail.com>
2020-07-15 11:37:37 -04:00
Rich Trott
3b130327fa test: use mustCall() in pummel test
Replace 'exit' check with common.mustCall().

PR-URL: https://github.com/nodejs/node/pull/34327
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2020-07-14 19:29:11 -07:00
Bradley Farias
66810a0d47 policy: add startup benchmark and make SRI lazier
PR-URL: https://github.com/nodejs/node/pull/29527
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2020-07-14 13:03:04 -05:00
Guy Bedford
e212955e8a doc: clarify conditional exports guidance
PR-URL: https://github.com/nodejs/node/pull/34306
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Jan Krems <jan.krems@gmail.com>
2020-07-14 08:04:49 -07:00