Skip to content

Commit d116fa1

Browse files
ShogunPandamarco-ippolito
authored andcommitted
net: add CLI option for autoSelectFamilyAttemptTimeout
PR-URL: #52474 Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Marco Ippolito <[email protected]>
1 parent 6e85bc4 commit d116fa1

File tree

8 files changed

+42
-9
lines changed

8 files changed

+42
-9
lines changed

doc/api/cli.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1284,6 +1284,15 @@ added: v7.10.0
12841284

12851285
This option is a no-op. It is kept for compatibility.
12861286

1287+
### `--network-family-autoselection-attempt-timeout`
1288+
1289+
<!-- YAML
1290+
added: REPLACEME
1291+
-->
1292+
1293+
Sets the default value for the network family autoselection attempt timeout.
1294+
For more information, see [`net.getDefaultAutoSelectFamilyAttemptTimeout()`][].
1295+
12871296
### `--no-addons`
12881297

12891298
<!-- YAML
@@ -2499,6 +2508,7 @@ one is included in the list below.
24992508
* `--inspect`
25002509
* `--max-http-header-size`
25012510
* `--napi-modules`
2511+
* `--network-family-autoselection-attempt-timeout`
25022512
* `--no-addons`
25032513
* `--no-deprecation`
25042514
* `--no-experimental-fetch`
@@ -2978,6 +2988,7 @@ done
29782988
[`dns.setDefaultResultOrder()`]: dns.md#dnssetdefaultresultorderorder
29792989
[`dnsPromises.lookup()`]: dns.md#dnspromiseslookuphostname-options
29802990
[`import` specifier]: esm.md#import-specifiers
2991+
[`net.getDefaultAutoSelectFamilyAttemptTimeout()`]: net.md#netgetdefaultautoselectfamilyattempttimeout
29812992
[`process.setUncaughtExceptionCaptureCallback()`]: process.md#processsetuncaughtexceptioncapturecallbackfn
29822993
[`process.setuid()`]: process.md#processsetuidid
29832994
[`setuid(2)`]: https://man7.org/linux/man-pages/man2/setuid.2.html

doc/api/net.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1727,7 +1727,8 @@ added: v19.8.0
17271727
-->
17281728

17291729
Gets the current default value of the `autoSelectFamilyAttemptTimeout` option of [`socket.connect(options)`][].
1730-
The initial default value is `250`.
1730+
The initial default value is `250` or the value specified via the command line
1731+
option `--network-family-autoselection-attempt-timeout`.
17311732

17321733
* Returns: {number} The current default value of the `autoSelectFamilyAttemptTimeout` option.
17331734

@@ -1740,7 +1741,8 @@ added: v19.8.0
17401741
Sets the default value of the `autoSelectFamilyAttemptTimeout` option of [`socket.connect(options)`][].
17411742

17421743
* `value` {number} The new default value, which must be a positive number. If the number is less than `10`,
1743-
the value `10` is used instead. The initial default value is `250`.
1744+
the value `10` is used instead. The initial default value is `250` or the value specified via the command line
1745+
option `--network-family-autoselection-attempt-timeout`.
17441746

17451747
## `net.isIP(input)`
17461748

lib/net.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ let dns;
134134
let BlockList;
135135
let SocketAddress;
136136
let autoSelectFamilyDefault = getOptionValue('--network-family-autoselection');
137-
let autoSelectFamilyAttemptTimeoutDefault = 250;
137+
let autoSelectFamilyAttemptTimeoutDefault = getOptionValue('--network-family-autoselection-attempt-timeout');
138138

139139
const { clearTimeout, setTimeout } = require('timers');
140140
const { kTimeout } = require('internal/timers');

src/node_options.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,11 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() {
369369
&EnvironmentOptions::network_family_autoselection,
370370
kAllowedInEnvvar,
371371
true);
372+
AddOption("--network-family-autoselection-attempt-timeout",
373+
"Sets the default value for the network family autoselection "
374+
"attempt timeout.",
375+
&EnvironmentOptions::network_family_autoselection_attempt_timeout,
376+
kAllowedInEnvvar);
372377
AddAlias("--enable-network-family-autoselection",
373378
"--network-family-autoselection");
374379
AddOption("--enable-source-maps",

src/node_options.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ class EnvironmentOptions : public Options {
133133
int64_t heap_snapshot_near_heap_limit = 0;
134134
std::string heap_snapshot_signal;
135135
bool network_family_autoselection = true;
136+
uint64_t network_family_autoselection_attempt_timeout = 250;
136137
uint64_t max_http_header_size = 16 * 1024;
137138
bool deprecation = true;
138139
bool force_async_hooks_checks = true;

test/common/index.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,8 @@ const isPi = (() => {
146146
const isDumbTerminal = process.env.TERM === 'dumb';
147147

148148
// When using high concurrency or in the CI we need much more time for each connection attempt
149-
const defaultAutoSelectFamilyAttemptTimeout = platformTimeout(2500);
150-
// Since this is also used by tools outside of the test suite,
151-
// make sure setDefaultAutoSelectFamilyAttemptTimeout
152-
if (typeof net.setDefaultAutoSelectFamilyAttemptTimeout === 'function') {
153-
net.setDefaultAutoSelectFamilyAttemptTimeout(platformTimeout(defaultAutoSelectFamilyAttemptTimeout));
154-
}
149+
net.setDefaultAutoSelectFamilyAttemptTimeout(platformTimeout(net.getDefaultAutoSelectFamilyAttemptTimeout() * 10));
150+
const defaultAutoSelectFamilyAttemptTimeout = net.getDefaultAutoSelectFamilyAttemptTimeout();
155151

156152
const buildType = process.config.target_defaults ?
157153
process.config.target_defaults.default_configuration :
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
'use strict';
2+
3+
// Flags: --network-family-autoselection-attempt-timeout=123
4+
5+
const { platformTimeout } = require('../common');
6+
7+
const assert = require('assert');
8+
const { getDefaultAutoSelectFamilyAttemptTimeout } = require('net');
9+
10+
assert.strictEqual(getDefaultAutoSelectFamilyAttemptTimeout(), platformTimeout(123 * 10));
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
'use strict';
2+
3+
const { platformTimeout } = require('../common');
4+
5+
const assert = require('assert');
6+
const { getDefaultAutoSelectFamilyAttemptTimeout } = require('net');
7+
8+
assert.strictEqual(getDefaultAutoSelectFamilyAttemptTimeout(), platformTimeout(2500));

0 commit comments

Comments
 (0)