@libp2p/utils 6.6.5-b32bc8406 → 6.6.5-dbbc6ef1d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3,6 +3,8 @@ import type { ClearableSignal } from 'any-signal';
|
|
|
3
3
|
export declare const DEFAULT_TIMEOUT_MULTIPLIER = 1.2;
|
|
4
4
|
export declare const DEFAULT_FAILURE_MULTIPLIER = 2;
|
|
5
5
|
export declare const DEFAULT_MIN_TIMEOUT = 5000;
|
|
6
|
+
export declare const DEFAULT_MAX_TIMEOUT = 60000;
|
|
7
|
+
export declare const DEFAULT_INTERVAL = 5000;
|
|
6
8
|
export interface AdaptiveTimeoutSignal extends ClearableSignal {
|
|
7
9
|
start: number;
|
|
8
10
|
timeout: number;
|
|
@@ -14,6 +16,7 @@ export interface AdaptiveTimeoutInit {
|
|
|
14
16
|
timeoutMultiplier?: number;
|
|
15
17
|
failureMultiplier?: number;
|
|
16
18
|
minTimeout?: number;
|
|
19
|
+
maxTimeout?: number;
|
|
17
20
|
}
|
|
18
21
|
export interface GetTimeoutSignalOptions {
|
|
19
22
|
timeoutFactor?: number;
|
|
@@ -27,6 +30,7 @@ export declare class AdaptiveTimeout {
|
|
|
27
30
|
private readonly timeoutMultiplier;
|
|
28
31
|
private readonly failureMultiplier;
|
|
29
32
|
private readonly minTimeout;
|
|
33
|
+
private readonly maxTimeout;
|
|
30
34
|
constructor(init?: AdaptiveTimeoutInit);
|
|
31
35
|
getTimeoutSignal(options?: GetTimeoutSignalOptions): AdaptiveTimeoutSignal;
|
|
32
36
|
cleanUp(signal: AdaptiveTimeoutSignal): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adaptive-timeout.d.ts","sourceRoot":"","sources":["../../src/adaptive-timeout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAe,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,eAAO,MAAM,0BAA0B,MAAM,CAAA;AAC7C,eAAO,MAAM,0BAA0B,IAAI,CAAA;AAC3C,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"adaptive-timeout.d.ts","sourceRoot":"","sources":["../../src/adaptive-timeout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAe,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,eAAO,MAAM,0BAA0B,MAAM,CAAA;AAC7C,eAAO,MAAM,0BAA0B,IAAI,CAAA;AAC3C,eAAO,MAAM,mBAAmB,OAAQ,CAAA;AACxC,eAAO,MAAM,mBAAmB,QAAS,CAAA;AACzC,eAAO,MAAM,gBAAgB,OAAQ,CAAA;AAErC,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEtB,IAAI,GAAE,mBAAwB;IAe3C,gBAAgB,CAAE,OAAO,GAAE,uBAA4B,GAAG,qBAAqB;IAuB/E,OAAO,CAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI;CAyB9C"}
|
|
@@ -3,7 +3,9 @@ import { anySignal } from 'any-signal';
|
|
|
3
3
|
import { MovingAverage } from './moving-average.js';
|
|
4
4
|
export const DEFAULT_TIMEOUT_MULTIPLIER = 1.2;
|
|
5
5
|
export const DEFAULT_FAILURE_MULTIPLIER = 2;
|
|
6
|
-
export const DEFAULT_MIN_TIMEOUT =
|
|
6
|
+
export const DEFAULT_MIN_TIMEOUT = 5_000;
|
|
7
|
+
export const DEFAULT_MAX_TIMEOUT = 60_000;
|
|
8
|
+
export const DEFAULT_INTERVAL = 5_000;
|
|
7
9
|
export class AdaptiveTimeout {
|
|
8
10
|
success;
|
|
9
11
|
failure;
|
|
@@ -12,13 +14,16 @@ export class AdaptiveTimeout {
|
|
|
12
14
|
timeoutMultiplier;
|
|
13
15
|
failureMultiplier;
|
|
14
16
|
minTimeout;
|
|
17
|
+
maxTimeout;
|
|
15
18
|
constructor(init = {}) {
|
|
16
|
-
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
+
const interval = init.interval ?? DEFAULT_INTERVAL;
|
|
20
|
+
this.success = new MovingAverage(interval);
|
|
21
|
+
this.failure = new MovingAverage(interval);
|
|
22
|
+
this.next = new MovingAverage(interval);
|
|
19
23
|
this.failureMultiplier = init.failureMultiplier ?? DEFAULT_FAILURE_MULTIPLIER;
|
|
20
24
|
this.timeoutMultiplier = init.timeoutMultiplier ?? DEFAULT_TIMEOUT_MULTIPLIER;
|
|
21
25
|
this.minTimeout = init.minTimeout ?? DEFAULT_MIN_TIMEOUT;
|
|
26
|
+
this.maxTimeout = init.maxTimeout ?? DEFAULT_MAX_TIMEOUT;
|
|
22
27
|
if (init.metricName != null) {
|
|
23
28
|
this.metric = init.metrics?.registerMetricGroup(init.metricName);
|
|
24
29
|
}
|
|
@@ -26,7 +31,13 @@ export class AdaptiveTimeout {
|
|
|
26
31
|
getTimeoutSignal(options = {}) {
|
|
27
32
|
// calculate timeout for individual peers based on moving average of
|
|
28
33
|
// previous successful requests
|
|
29
|
-
|
|
34
|
+
let timeout = Math.round(this.next.movingAverage * (options.timeoutFactor ?? this.timeoutMultiplier));
|
|
35
|
+
if (timeout < this.minTimeout) {
|
|
36
|
+
timeout = this.minTimeout;
|
|
37
|
+
}
|
|
38
|
+
if (timeout > this.maxTimeout) {
|
|
39
|
+
timeout = this.maxTimeout;
|
|
40
|
+
}
|
|
30
41
|
const sendTimeout = AbortSignal.timeout(timeout);
|
|
31
42
|
const timeoutSignal = anySignal([options.signal, sendTimeout]);
|
|
32
43
|
setMaxListeners(Infinity, timeoutSignal, sendTimeout);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adaptive-timeout.js","sourceRoot":"","sources":["../../src/adaptive-timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAInD,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAA;AAC7C,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAA;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,
|
|
1
|
+
{"version":3,"file":"adaptive-timeout.js","sourceRoot":"","sources":["../../src/adaptive-timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAInD,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAA;AAC7C,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAA;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAA;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAA;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAsBrC,MAAM,OAAO,eAAe;IACT,OAAO,CAAe;IACtB,OAAO,CAAe;IACtB,IAAI,CAAe;IACnB,MAAM,CAAc;IACpB,iBAAiB,CAAQ;IACzB,iBAAiB,CAAQ;IACzB,UAAU,CAAQ;IAClB,UAAU,CAAQ;IAEnC,YAAa,OAA4B,EAAE;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAA;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAA;QACvC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,0BAA0B,CAAA;QAC7E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,0BAA0B,CAAA;QAC7E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAA;QACxD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAA;QAExD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAClE,CAAC;IACH,CAAC;IAED,gBAAgB,CAAE,UAAmC,EAAE;QACrD,oEAAoE;QACpE,+BAA+B;QAC/B,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAA;QAErG,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9B,OAAO,GAAG,IAAI,CAAC,UAAU,CAAA;QAC3B,CAAC;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9B,OAAO,GAAG,IAAI,CAAC,UAAU,CAAA;QAC3B,CAAC;QAED,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAChD,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAA0B,CAAA;QACvF,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,CAAC,CAAA;QAErD,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,aAAa,CAAC,OAAO,GAAG,OAAO,CAAA;QAE/B,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,OAAO,CAAE,MAA6B;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAA;QAEtC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAC7C,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;gBAClB,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;gBAChD,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gBACxC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;gBACtC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;gBACtC,OAAO,EAAE,IAAI;aACd,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACpB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;gBAClB,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;gBAChD,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gBACxC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;gBACtC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;gBACtC,OAAO,EAAE,IAAI;aACd,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/utils",
|
|
3
|
-
"version": "6.6.5-
|
|
3
|
+
"version": "6.6.5-dbbc6ef1d",
|
|
4
4
|
"description": "Package to aggregate shared logic and dependencies for the libp2p ecosystem",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/utils#readme",
|
|
@@ -191,9 +191,9 @@
|
|
|
191
191
|
"dependencies": {
|
|
192
192
|
"@chainsafe/is-ip": "^2.1.0",
|
|
193
193
|
"@chainsafe/netmask": "^2.0.0",
|
|
194
|
-
"@libp2p/crypto": "5.1.4-
|
|
195
|
-
"@libp2p/interface": "2.10.2-
|
|
196
|
-
"@libp2p/logger": "5.1.18-
|
|
194
|
+
"@libp2p/crypto": "5.1.4-dbbc6ef1d",
|
|
195
|
+
"@libp2p/interface": "2.10.2-dbbc6ef1d",
|
|
196
|
+
"@libp2p/logger": "5.1.18-dbbc6ef1d",
|
|
197
197
|
"@multiformats/multiaddr": "^12.4.0",
|
|
198
198
|
"@sindresorhus/fnv1a": "^3.1.0",
|
|
199
199
|
"any-signal": "^4.1.1",
|
|
@@ -213,7 +213,7 @@
|
|
|
213
213
|
"uint8arrays": "^5.1.0"
|
|
214
214
|
},
|
|
215
215
|
"devDependencies": {
|
|
216
|
-
"@libp2p/peer-id": "5.1.5-
|
|
216
|
+
"@libp2p/peer-id": "5.1.5-dbbc6ef1d",
|
|
217
217
|
"@types/netmask": "^2.0.5",
|
|
218
218
|
"aegir": "^47.0.14",
|
|
219
219
|
"benchmark": "^2.1.4",
|
package/src/adaptive-timeout.ts
CHANGED
|
@@ -6,7 +6,9 @@ import type { ClearableSignal } from 'any-signal'
|
|
|
6
6
|
|
|
7
7
|
export const DEFAULT_TIMEOUT_MULTIPLIER = 1.2
|
|
8
8
|
export const DEFAULT_FAILURE_MULTIPLIER = 2
|
|
9
|
-
export const DEFAULT_MIN_TIMEOUT =
|
|
9
|
+
export const DEFAULT_MIN_TIMEOUT = 5_000
|
|
10
|
+
export const DEFAULT_MAX_TIMEOUT = 60_000
|
|
11
|
+
export const DEFAULT_INTERVAL = 5_000
|
|
10
12
|
|
|
11
13
|
export interface AdaptiveTimeoutSignal extends ClearableSignal {
|
|
12
14
|
start: number
|
|
@@ -20,6 +22,7 @@ export interface AdaptiveTimeoutInit {
|
|
|
20
22
|
timeoutMultiplier?: number
|
|
21
23
|
failureMultiplier?: number
|
|
22
24
|
minTimeout?: number
|
|
25
|
+
maxTimeout?: number
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
export interface GetTimeoutSignalOptions {
|
|
@@ -35,14 +38,17 @@ export class AdaptiveTimeout {
|
|
|
35
38
|
private readonly timeoutMultiplier: number
|
|
36
39
|
private readonly failureMultiplier: number
|
|
37
40
|
private readonly minTimeout: number
|
|
41
|
+
private readonly maxTimeout: number
|
|
38
42
|
|
|
39
43
|
constructor (init: AdaptiveTimeoutInit = {}) {
|
|
40
|
-
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
44
|
+
const interval = init.interval ?? DEFAULT_INTERVAL
|
|
45
|
+
this.success = new MovingAverage(interval)
|
|
46
|
+
this.failure = new MovingAverage(interval)
|
|
47
|
+
this.next = new MovingAverage(interval)
|
|
43
48
|
this.failureMultiplier = init.failureMultiplier ?? DEFAULT_FAILURE_MULTIPLIER
|
|
44
49
|
this.timeoutMultiplier = init.timeoutMultiplier ?? DEFAULT_TIMEOUT_MULTIPLIER
|
|
45
50
|
this.minTimeout = init.minTimeout ?? DEFAULT_MIN_TIMEOUT
|
|
51
|
+
this.maxTimeout = init.maxTimeout ?? DEFAULT_MAX_TIMEOUT
|
|
46
52
|
|
|
47
53
|
if (init.metricName != null) {
|
|
48
54
|
this.metric = init.metrics?.registerMetricGroup(init.metricName)
|
|
@@ -52,10 +58,16 @@ export class AdaptiveTimeout {
|
|
|
52
58
|
getTimeoutSignal (options: GetTimeoutSignalOptions = {}): AdaptiveTimeoutSignal {
|
|
53
59
|
// calculate timeout for individual peers based on moving average of
|
|
54
60
|
// previous successful requests
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
61
|
+
let timeout = Math.round(this.next.movingAverage * (options.timeoutFactor ?? this.timeoutMultiplier))
|
|
62
|
+
|
|
63
|
+
if (timeout < this.minTimeout) {
|
|
64
|
+
timeout = this.minTimeout
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (timeout > this.maxTimeout) {
|
|
68
|
+
timeout = this.maxTimeout
|
|
69
|
+
}
|
|
70
|
+
|
|
59
71
|
const sendTimeout = AbortSignal.timeout(timeout)
|
|
60
72
|
const timeoutSignal = anySignal([options.signal, sendTimeout]) as AdaptiveTimeoutSignal
|
|
61
73
|
setMaxListeners(Infinity, timeoutSignal, sendTimeout)
|