@libp2p/utils 5.4.0-d9366f9aa → 5.4.1-1cc6a9405
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.
- package/dist/src/adaptive-timeout.d.ts +35 -0
- package/dist/src/adaptive-timeout.d.ts.map +1 -0
- package/dist/src/adaptive-timeout.js +63 -0
- package/dist/src/adaptive-timeout.js.map +1 -0
- package/dist/src/moving-average.d.ts +18 -0
- package/dist/src/moving-average.d.ts.map +1 -0
- package/dist/src/moving-average.js +43 -0
- package/dist/src/moving-average.js.map +1 -0
- package/dist/src/peer-queue.d.ts +3 -3
- package/dist/src/peer-queue.d.ts.map +1 -1
- package/dist/src/peer-queue.js +0 -1
- package/dist/src/peer-queue.js.map +1 -1
- package/dist/src/priority-queue.d.ts +10 -0
- package/dist/src/priority-queue.d.ts.map +1 -0
- package/dist/src/priority-queue.js +18 -0
- package/dist/src/priority-queue.js.map +1 -0
- package/dist/src/queue/index.d.ts +14 -14
- package/dist/src/queue/index.d.ts.map +1 -1
- package/dist/src/queue/index.js +6 -24
- package/dist/src/queue/index.js.map +1 -1
- package/dist/src/queue/job.d.ts +1 -2
- package/dist/src/queue/job.d.ts.map +1 -1
- package/dist/src/queue/job.js +1 -3
- package/dist/src/queue/job.js.map +1 -1
- package/package.json +17 -5
- package/src/adaptive-timeout.ts +94 -0
- package/src/moving-average.ts +45 -0
- package/src/peer-queue.ts +3 -5
- package/src/priority-queue.ts +26 -0
- package/src/queue/index.ts +21 -45
- package/src/queue/job.ts +1 -3
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type ClearableSignal } from 'any-signal';
|
|
2
|
+
import type { Metrics } from '@libp2p/interface';
|
|
3
|
+
export declare const DEFAULT_TIMEOUT_MULTIPLIER = 1.2;
|
|
4
|
+
export declare const DEFAULT_FAILURE_MULTIPLIER = 2;
|
|
5
|
+
export declare const DEFAULT_MIN_TIMEOUT = 2000;
|
|
6
|
+
export interface AdaptiveTimeoutSignal extends ClearableSignal {
|
|
7
|
+
start: number;
|
|
8
|
+
timeout: number;
|
|
9
|
+
}
|
|
10
|
+
export interface AdaptiveTimeoutInit {
|
|
11
|
+
metricName?: string;
|
|
12
|
+
metrics?: Metrics;
|
|
13
|
+
interval?: number;
|
|
14
|
+
initialValue?: number;
|
|
15
|
+
timeoutMultiplier?: number;
|
|
16
|
+
failureMultiplier?: number;
|
|
17
|
+
minTimeout?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface GetTimeoutSignalOptions {
|
|
20
|
+
timeoutFactor?: number;
|
|
21
|
+
signal?: AbortSignal;
|
|
22
|
+
}
|
|
23
|
+
export declare class AdaptiveTimeout {
|
|
24
|
+
private readonly success;
|
|
25
|
+
private readonly failure;
|
|
26
|
+
private readonly next;
|
|
27
|
+
private readonly metric?;
|
|
28
|
+
private readonly timeoutMultiplier;
|
|
29
|
+
private readonly failureMultiplier;
|
|
30
|
+
private readonly minTimeout;
|
|
31
|
+
constructor(init?: AdaptiveTimeoutInit);
|
|
32
|
+
getTimeoutSignal(options?: GetTimeoutSignalOptions): AdaptiveTimeoutSignal;
|
|
33
|
+
cleanUp(signal: AdaptiveTimeoutSignal): void;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=adaptive-timeout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-timeout.d.ts","sourceRoot":"","sources":["../../src/adaptive-timeout.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5D,OAAO,KAAK,EAAe,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE7D,eAAO,MAAM,0BAA0B,MAAM,CAAA;AAC7C,eAAO,MAAM,0BAA0B,IAAI,CAAA;AAC3C,eAAO,MAAM,mBAAmB,OAAO,CAAA;AAEvC,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,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,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;gBAEtB,IAAI,GAAE,mBAAwB;IAa3C,gBAAgB,CAAE,OAAO,GAAE,uBAA4B,GAAG,qBAAqB;IAiB/E,OAAO,CAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI;CAyB9C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { setMaxListeners } from '@libp2p/interface';
|
|
2
|
+
import { anySignal } from 'any-signal';
|
|
3
|
+
import { MovingAverage } from './moving-average.js';
|
|
4
|
+
export const DEFAULT_TIMEOUT_MULTIPLIER = 1.2;
|
|
5
|
+
export const DEFAULT_FAILURE_MULTIPLIER = 2;
|
|
6
|
+
export const DEFAULT_MIN_TIMEOUT = 2000;
|
|
7
|
+
export class AdaptiveTimeout {
|
|
8
|
+
success;
|
|
9
|
+
failure;
|
|
10
|
+
next;
|
|
11
|
+
metric;
|
|
12
|
+
timeoutMultiplier;
|
|
13
|
+
failureMultiplier;
|
|
14
|
+
minTimeout;
|
|
15
|
+
constructor(init = {}) {
|
|
16
|
+
this.success = new MovingAverage(init.interval ?? 5000);
|
|
17
|
+
this.failure = new MovingAverage(init.interval ?? 5000);
|
|
18
|
+
this.next = new MovingAverage(init.interval ?? 5000);
|
|
19
|
+
this.failureMultiplier = init.failureMultiplier ?? DEFAULT_FAILURE_MULTIPLIER;
|
|
20
|
+
this.timeoutMultiplier = init.timeoutMultiplier ?? DEFAULT_TIMEOUT_MULTIPLIER;
|
|
21
|
+
this.minTimeout = init.minTimeout ?? DEFAULT_MIN_TIMEOUT;
|
|
22
|
+
if (init.metricName != null) {
|
|
23
|
+
this.metric = init.metrics?.registerMetricGroup(init.metricName);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
getTimeoutSignal(options = {}) {
|
|
27
|
+
// calculate timeout for individual peers based on moving average of
|
|
28
|
+
// previous successful requests
|
|
29
|
+
const timeout = Math.max(Math.round(this.next.movingAverage * (options.timeoutFactor ?? this.timeoutMultiplier)), this.minTimeout);
|
|
30
|
+
const sendTimeout = AbortSignal.timeout(timeout);
|
|
31
|
+
const timeoutSignal = anySignal([options.signal, sendTimeout]);
|
|
32
|
+
setMaxListeners(Infinity, timeoutSignal, sendTimeout);
|
|
33
|
+
timeoutSignal.start = Date.now();
|
|
34
|
+
timeoutSignal.timeout = timeout;
|
|
35
|
+
return timeoutSignal;
|
|
36
|
+
}
|
|
37
|
+
cleanUp(signal) {
|
|
38
|
+
const time = Date.now() - signal.start;
|
|
39
|
+
if (signal.aborted) {
|
|
40
|
+
this.failure.push(time);
|
|
41
|
+
this.next.push(time * this.failureMultiplier);
|
|
42
|
+
this.metric?.update({
|
|
43
|
+
failureMovingAverage: this.failure.movingAverage,
|
|
44
|
+
failureDeviation: this.failure.deviation,
|
|
45
|
+
failureForecast: this.failure.forecast,
|
|
46
|
+
failureVariance: this.failure.variance,
|
|
47
|
+
failure: time
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.success.push(time);
|
|
52
|
+
this.next.push(time);
|
|
53
|
+
this.metric?.update({
|
|
54
|
+
successMovingAverage: this.success.movingAverage,
|
|
55
|
+
successDeviation: this.success.deviation,
|
|
56
|
+
successForecast: this.success.forecast,
|
|
57
|
+
successVariance: this.success.variance,
|
|
58
|
+
success: time
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=adaptive-timeout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-timeout.js","sourceRoot":"","sources":["../../src/adaptive-timeout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implements exponential moving average. Ported from `moving-average`.
|
|
3
|
+
*
|
|
4
|
+
* @see https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
|
|
5
|
+
* @see https://www.npmjs.com/package/moving-average
|
|
6
|
+
*/
|
|
7
|
+
export declare class MovingAverage {
|
|
8
|
+
movingAverage: number;
|
|
9
|
+
variance: number;
|
|
10
|
+
deviation: number;
|
|
11
|
+
forecast: number;
|
|
12
|
+
private readonly timespan;
|
|
13
|
+
private previousTime?;
|
|
14
|
+
constructor(timespan: number);
|
|
15
|
+
alpha(t: number, pt: number): number;
|
|
16
|
+
push(value: number, time?: number): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=moving-average.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moving-average.d.ts","sourceRoot":"","sources":["../../src/moving-average.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,qBAAa,aAAa;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,YAAY,CAAC,CAAQ;gBAEhB,QAAQ,EAAE,MAAM;IAQ7B,KAAK,CAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAIrC,IAAI,CAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAmB,GAAG,IAAI;CAkBtD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implements exponential moving average. Ported from `moving-average`.
|
|
3
|
+
*
|
|
4
|
+
* @see https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
|
|
5
|
+
* @see https://www.npmjs.com/package/moving-average
|
|
6
|
+
*/
|
|
7
|
+
export class MovingAverage {
|
|
8
|
+
movingAverage;
|
|
9
|
+
variance;
|
|
10
|
+
deviation;
|
|
11
|
+
forecast;
|
|
12
|
+
timespan;
|
|
13
|
+
previousTime;
|
|
14
|
+
constructor(timespan) {
|
|
15
|
+
this.timespan = timespan;
|
|
16
|
+
this.movingAverage = 0;
|
|
17
|
+
this.variance = 0;
|
|
18
|
+
this.deviation = 0;
|
|
19
|
+
this.forecast = 0;
|
|
20
|
+
}
|
|
21
|
+
alpha(t, pt) {
|
|
22
|
+
return 1 - (Math.exp(-(t - pt) / this.timespan));
|
|
23
|
+
}
|
|
24
|
+
push(value, time = Date.now()) {
|
|
25
|
+
if (this.previousTime != null) {
|
|
26
|
+
// calculate moving average
|
|
27
|
+
const a = this.alpha(time, this.previousTime);
|
|
28
|
+
const diff = value - this.movingAverage;
|
|
29
|
+
const incr = a * diff;
|
|
30
|
+
this.movingAverage = a * value + (1 - a) * this.movingAverage;
|
|
31
|
+
// calculate variance & deviation
|
|
32
|
+
this.variance = (1 - a) * (this.variance + diff * incr);
|
|
33
|
+
this.deviation = Math.sqrt(this.variance);
|
|
34
|
+
// calculate forecast
|
|
35
|
+
this.forecast = this.movingAverage + a * diff;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.movingAverage = value;
|
|
39
|
+
}
|
|
40
|
+
this.previousTime = time;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=moving-average.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moving-average.js","sourceRoot":"","sources":["../../src/moving-average.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IACjB,aAAa,CAAQ;IACrB,QAAQ,CAAQ;IAChB,SAAS,CAAQ;IACjB,QAAQ,CAAQ;IACN,QAAQ,CAAQ;IACzB,YAAY,CAAS;IAE7B,YAAa,QAAgB;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;QAClB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;IACnB,CAAC;IAED,KAAK,CAAE,CAAS,EAAE,EAAU;QAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClD,CAAC;IAED,IAAI,CAAE,KAAa,EAAE,OAAe,IAAI,CAAC,GAAG,EAAE;QAC5C,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;YAC9B,2BAA2B;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YAC7C,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,aAAa,CAAA;YACvC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAA;YACrB,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAA;YAC7D,iCAAiC;YACjC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,CAAA;YACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACzC,qBAAqB;YACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAA;QAC/C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;QAC5B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;CACF"}
|
package/dist/src/peer-queue.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Queue
|
|
1
|
+
import { Queue } from './queue/index.js';
|
|
2
2
|
import type { Job } from './queue/job.js';
|
|
3
|
-
import type { PeerId } from '@libp2p/interface';
|
|
4
|
-
export interface PeerQueueJobOptions extends
|
|
3
|
+
import type { AbortOptions, PeerId } from '@libp2p/interface';
|
|
4
|
+
export interface PeerQueueJobOptions extends AbortOptions {
|
|
5
5
|
peerId: PeerId;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-queue.d.ts","sourceRoot":"","sources":["../../src/peer-queue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"peer-queue.d.ts","sourceRoot":"","sources":["../../src/peer-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE7D,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,qBAAa,SAAS,CAAC,aAAa,GAAG,IAAI,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CAAE,SAAQ,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC;IACjJ,GAAG,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAI7B,IAAI,CAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,SAAS;CAKlE"}
|
package/dist/src/peer-queue.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-queue.js","sourceRoot":"","sources":["../../src/peer-queue.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"peer-queue.js","sourceRoot":"","sources":["../../src/peer-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAQxC;;GAEG;AACH,MAAM,OAAO,SAA8F,SAAQ,KAAgC;IACjJ,GAAG,CAAE,MAAc;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAA;IAClC,CAAC;IAED,IAAI,CAAE,MAAc;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Queue } from './queue/index.js';
|
|
2
|
+
import type { QueueInit } from './queue/index.js';
|
|
3
|
+
import type { AbortOptions } from '@libp2p/interface';
|
|
4
|
+
export interface PriorityQueueJobOptions extends AbortOptions {
|
|
5
|
+
priority: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class PriorityQueue<JobReturnType = void, JobOptions extends PriorityQueueJobOptions = PriorityQueueJobOptions> extends Queue<JobReturnType, JobOptions> {
|
|
8
|
+
constructor(init?: QueueInit<JobReturnType, JobOptions>);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=priority-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priority-queue.d.ts","sourceRoot":"","sources":["../../src/priority-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC3D,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,aAAa,CAAE,aAAa,GAAG,IAAI,EAAE,UAAU,SAAS,uBAAuB,GAAG,uBAAuB,CAAE,SAAQ,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC;gBACjJ,IAAI,GAAE,SAAS,CAAC,aAAa,EAAE,UAAU,CAAM;CAgB7D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Queue } from './queue/index.js';
|
|
2
|
+
export class PriorityQueue extends Queue {
|
|
3
|
+
constructor(init = {}) {
|
|
4
|
+
super({
|
|
5
|
+
...init,
|
|
6
|
+
sort: (a, b) => {
|
|
7
|
+
if (a.options.priority > b.options.priority) {
|
|
8
|
+
return -1;
|
|
9
|
+
}
|
|
10
|
+
if (a.options.priority < b.options.priority) {
|
|
11
|
+
return 1;
|
|
12
|
+
}
|
|
13
|
+
return 0;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=priority-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priority-queue.js","sourceRoot":"","sources":["../../src/priority-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAQxC,MAAM,OAAO,aAA2G,SAAQ,KAAgC;IAC9J,YAAa,OAA6C,EAAE;QAC1D,KAAK,CAAC;YACJ,GAAG,IAAI;YACP,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACb,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,OAAO,CAAC,CAAC,CAAA;gBACX,CAAC;gBAED,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5C,OAAO,CAAC,CAAA;gBACV,CAAC;gBAED,OAAO,CAAC,CAAA;YACV,CAAC;SACF,CAAC,CAAA;IACJ,CAAC;CACF"}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
import { TypedEventEmitter } from '@libp2p/interface';
|
|
2
2
|
import { Job } from './job.js';
|
|
3
3
|
import type { AbortOptions, Metrics } from '@libp2p/interface';
|
|
4
|
-
export interface
|
|
5
|
-
|
|
6
|
-
* Priority of operation. Operations with greater priority will be scheduled first.
|
|
7
|
-
*
|
|
8
|
-
* @default 0
|
|
9
|
-
*/
|
|
10
|
-
priority?: number;
|
|
4
|
+
export interface Comparator<T> {
|
|
5
|
+
(a: T, b: T): -1 | 0 | 1;
|
|
11
6
|
}
|
|
12
|
-
export interface QueueInit {
|
|
7
|
+
export interface QueueInit<JobReturnType, JobOptions extends AbortOptions = AbortOptions> {
|
|
13
8
|
/**
|
|
14
9
|
* Concurrency limit.
|
|
15
10
|
*
|
|
@@ -26,23 +21,27 @@ export interface QueueInit {
|
|
|
26
21
|
* An implementation of the libp2p Metrics interface
|
|
27
22
|
*/
|
|
28
23
|
metrics?: Metrics;
|
|
24
|
+
/**
|
|
25
|
+
* An optional function that will sort the queue after a job has been added
|
|
26
|
+
*/
|
|
27
|
+
sort?: Comparator<Job<JobOptions, JobReturnType>>;
|
|
29
28
|
}
|
|
30
29
|
export type JobStatus = 'queued' | 'running' | 'errored' | 'complete';
|
|
31
30
|
export interface RunFunction<Options = AbortOptions, ReturnType = void> {
|
|
32
31
|
(opts?: Options): Promise<ReturnType>;
|
|
33
32
|
}
|
|
34
|
-
export interface JobMatcher<JobOptions extends
|
|
33
|
+
export interface JobMatcher<JobOptions extends AbortOptions = AbortOptions> {
|
|
35
34
|
(options?: Partial<JobOptions>): boolean;
|
|
36
35
|
}
|
|
37
|
-
export interface QueueJobSuccess<JobReturnType, JobOptions extends
|
|
36
|
+
export interface QueueJobSuccess<JobReturnType, JobOptions extends AbortOptions = AbortOptions> {
|
|
38
37
|
job: Job<JobOptions, JobReturnType>;
|
|
39
38
|
result: JobReturnType;
|
|
40
39
|
}
|
|
41
|
-
export interface QueueJobFailure<JobReturnType, JobOptions extends
|
|
40
|
+
export interface QueueJobFailure<JobReturnType, JobOptions extends AbortOptions = AbortOptions> {
|
|
42
41
|
job: Job<JobOptions, JobReturnType>;
|
|
43
42
|
error: Error;
|
|
44
43
|
}
|
|
45
|
-
export interface QueueEvents<JobReturnType, JobOptions extends
|
|
44
|
+
export interface QueueEvents<JobReturnType, JobOptions extends AbortOptions = AbortOptions> {
|
|
46
45
|
/**
|
|
47
46
|
* A job is about to start running
|
|
48
47
|
*/
|
|
@@ -88,11 +87,12 @@ export interface QueueEvents<JobReturnType, JobOptions extends QueueAddOptions =
|
|
|
88
87
|
* 1. Items remain at the head of the queue while they are running so `queue.size` includes `queue.pending` items - this is so interested parties can join the results of a queue item while it is running
|
|
89
88
|
* 2. The options for a job are stored separately to the job in order for them to be modified while they are still in the queue
|
|
90
89
|
*/
|
|
91
|
-
export declare class Queue<JobReturnType = unknown, JobOptions extends
|
|
90
|
+
export declare class Queue<JobReturnType = unknown, JobOptions extends AbortOptions = AbortOptions> extends TypedEventEmitter<QueueEvents<JobReturnType, JobOptions>> {
|
|
92
91
|
concurrency: number;
|
|
93
92
|
queue: Array<Job<JobOptions, JobReturnType>>;
|
|
94
93
|
private pending;
|
|
95
|
-
|
|
94
|
+
private readonly sort?;
|
|
95
|
+
constructor(init?: QueueInit<JobReturnType, JobOptions>);
|
|
96
96
|
private tryToStartAnother;
|
|
97
97
|
private enqueue;
|
|
98
98
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/queue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG5E,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE9D,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/queue/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/queue/index.js
CHANGED
|
@@ -2,24 +2,6 @@ import { AbortError, CodeError, TypedEventEmitter } from '@libp2p/interface';
|
|
|
2
2
|
import { pushable } from 'it-pushable';
|
|
3
3
|
import { raceEvent } from 'race-event';
|
|
4
4
|
import { Job } from './job.js';
|
|
5
|
-
// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound
|
|
6
|
-
// Used to compute insertion index to keep queue sorted after insertion
|
|
7
|
-
function lowerBound(array, value, comparator) {
|
|
8
|
-
let first = 0;
|
|
9
|
-
let count = array.length;
|
|
10
|
-
while (count > 0) {
|
|
11
|
-
const step = Math.trunc(count / 2);
|
|
12
|
-
let it = first + step;
|
|
13
|
-
if (comparator(array[it], value) <= 0) {
|
|
14
|
-
first = ++it;
|
|
15
|
-
count -= step + 1;
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
count = step;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return first;
|
|
22
|
-
}
|
|
23
5
|
/**
|
|
24
6
|
* Heavily influence by `p-queue` with the following differences:
|
|
25
7
|
*
|
|
@@ -30,6 +12,7 @@ export class Queue extends TypedEventEmitter {
|
|
|
30
12
|
concurrency;
|
|
31
13
|
queue;
|
|
32
14
|
pending;
|
|
15
|
+
sort;
|
|
33
16
|
constructor(init = {}) {
|
|
34
17
|
super();
|
|
35
18
|
this.concurrency = init.concurrency ?? Number.POSITIVE_INFINITY;
|
|
@@ -45,6 +28,7 @@ export class Queue extends TypedEventEmitter {
|
|
|
45
28
|
}
|
|
46
29
|
});
|
|
47
30
|
}
|
|
31
|
+
this.sort = init.sort;
|
|
48
32
|
this.queue = [];
|
|
49
33
|
}
|
|
50
34
|
tryToStartAnother() {
|
|
@@ -94,19 +78,17 @@ export class Queue extends TypedEventEmitter {
|
|
|
94
78
|
return false;
|
|
95
79
|
}
|
|
96
80
|
enqueue(job) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
81
|
+
this.queue.push(job);
|
|
82
|
+
if (this.sort != null) {
|
|
83
|
+
this.queue.sort(this.sort);
|
|
100
84
|
}
|
|
101
|
-
const index = lowerBound(this.queue, job, (a, b) => b.priority - a.priority);
|
|
102
|
-
this.queue.splice(index, 0, job);
|
|
103
85
|
}
|
|
104
86
|
/**
|
|
105
87
|
* Adds a sync or async task to the queue. Always returns a promise.
|
|
106
88
|
*/
|
|
107
89
|
async add(fn, options) {
|
|
108
90
|
options?.signal?.throwIfAborted();
|
|
109
|
-
const job = new Job(fn, options
|
|
91
|
+
const job = new Job(fn, options);
|
|
110
92
|
const p = job.join(options)
|
|
111
93
|
.then(result => {
|
|
112
94
|
this.safeDispatchEvent('completed', { detail: result });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/queue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAsG9B
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/queue/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/queue/job.d.ts
CHANGED
|
@@ -10,12 +10,11 @@ export declare class Job<JobOptions extends AbortOptions = AbortOptions, JobRetu
|
|
|
10
10
|
id: string;
|
|
11
11
|
fn: (options: JobOptions) => Promise<JobReturnType>;
|
|
12
12
|
options: JobOptions;
|
|
13
|
-
priority: number;
|
|
14
13
|
recipients: Array<JobRecipient<JobReturnType>>;
|
|
15
14
|
status: JobStatus;
|
|
16
15
|
readonly timeline: JobTimeline;
|
|
17
16
|
private readonly controller;
|
|
18
|
-
constructor(fn: (options: JobOptions) => Promise<JobReturnType>, options: any
|
|
17
|
+
constructor(fn: (options: JobOptions) => Promise<JobReturnType>, options: any);
|
|
19
18
|
abort(err: Error): void;
|
|
20
19
|
onAbort(): void;
|
|
21
20
|
join(options?: AbortOptions): Promise<JobReturnType>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/queue/job.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AASrD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,GAAG,CAAE,UAAU,SAAS,YAAY,GAAG,YAAY,EAAE,aAAa,GAAG,OAAO;IAChF,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IACnD,OAAO,EAAE,UAAU,CAAA;IACnB,
|
|
1
|
+
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/queue/job.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AASrD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,GAAG,CAAE,UAAU,SAAS,YAAY,GAAG,YAAY,EAAE,aAAa,GAAG,OAAO;IAChF,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IACnD,OAAO,EAAE,UAAU,CAAA;IACnB,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAA;IAC9C,MAAM,EAAE,SAAS,CAAA;IACxB,SAAgB,QAAQ,EAAE,WAAW,CAAA;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAE/B,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG;IAgB9E,KAAK,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;IAIxB,OAAO,IAAK,IAAI;IAYV,IAAI,CAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IASzD,GAAG,IAAK,OAAO,CAAC,IAAI,CAAC;IA6B3B,OAAO,IAAK,IAAI;CAMjB"}
|
package/dist/src/queue/job.js
CHANGED
|
@@ -11,16 +11,14 @@ export class Job {
|
|
|
11
11
|
id;
|
|
12
12
|
fn;
|
|
13
13
|
options;
|
|
14
|
-
priority;
|
|
15
14
|
recipients;
|
|
16
15
|
status;
|
|
17
16
|
timeline;
|
|
18
17
|
controller;
|
|
19
|
-
constructor(fn, options
|
|
18
|
+
constructor(fn, options) {
|
|
20
19
|
this.id = randomId();
|
|
21
20
|
this.status = 'queued';
|
|
22
21
|
this.fn = fn;
|
|
23
|
-
this.priority = priority;
|
|
24
22
|
this.options = options;
|
|
25
23
|
this.recipients = [];
|
|
26
24
|
this.timeline = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/queue/job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAI7C;;GAEG;AACH,SAAS,QAAQ;IACf,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;AACjF,CAAC;AAQD,MAAM,OAAO,GAAG;IACP,EAAE,CAAQ;IACV,EAAE,CAAiD;IACnD,OAAO,CAAY;IACnB,
|
|
1
|
+
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/queue/job.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/utils",
|
|
3
|
-
"version": "5.4.
|
|
3
|
+
"version": "5.4.1-1cc6a9405",
|
|
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",
|
|
@@ -56,6 +56,10 @@
|
|
|
56
56
|
"types": "./dist/src/address-sort.d.ts",
|
|
57
57
|
"import": "./dist/src/address-sort.js"
|
|
58
58
|
},
|
|
59
|
+
"./adaptive-timeout": {
|
|
60
|
+
"types": "./dist/src/adaptive-timeout.d.ts",
|
|
61
|
+
"import": "./dist/src/adaptive-timeout.js"
|
|
62
|
+
},
|
|
59
63
|
"./array-equals": {
|
|
60
64
|
"types": "./dist/src/array-equals.d.ts",
|
|
61
65
|
"import": "./dist/src/array-equals.js"
|
|
@@ -80,6 +84,10 @@
|
|
|
80
84
|
"types": "./dist/src/is-promise.d.ts",
|
|
81
85
|
"import": "./dist/src/is-promise.js"
|
|
82
86
|
},
|
|
87
|
+
"./moving-average": {
|
|
88
|
+
"types": "./dist/src/moving-average.d.ts",
|
|
89
|
+
"import": "./dist/src/moving-average.js"
|
|
90
|
+
},
|
|
83
91
|
"./multiaddr/is-loopback": {
|
|
84
92
|
"types": "./dist/src/multiaddr/is-loopback.d.ts",
|
|
85
93
|
"import": "./dist/src/multiaddr/is-loopback.js"
|
|
@@ -92,6 +100,10 @@
|
|
|
92
100
|
"types": "./dist/src/peer-queue.d.ts",
|
|
93
101
|
"import": "./dist/src/peer-queue.js"
|
|
94
102
|
},
|
|
103
|
+
"./priority-queue": {
|
|
104
|
+
"types": "./dist/src/priority-queue.d.ts",
|
|
105
|
+
"import": "./dist/src/priority-queue.js"
|
|
106
|
+
},
|
|
95
107
|
"./private-ip": {
|
|
96
108
|
"types": "./dist/src/private-ip.d.ts",
|
|
97
109
|
"import": "./dist/src/private-ip.js"
|
|
@@ -140,9 +152,9 @@
|
|
|
140
152
|
},
|
|
141
153
|
"dependencies": {
|
|
142
154
|
"@chainsafe/is-ip": "^2.0.2",
|
|
143
|
-
"@libp2p/crypto": "4.1.1-
|
|
144
|
-
"@libp2p/interface": "1.3.1-
|
|
145
|
-
"@libp2p/logger": "4.0.12-
|
|
155
|
+
"@libp2p/crypto": "4.1.1-1cc6a9405",
|
|
156
|
+
"@libp2p/interface": "1.3.1-1cc6a9405",
|
|
157
|
+
"@libp2p/logger": "4.0.12-1cc6a9405",
|
|
146
158
|
"@multiformats/multiaddr": "^12.2.1",
|
|
147
159
|
"@multiformats/multiaddr-matcher": "^1.2.0",
|
|
148
160
|
"@sindresorhus/fnv1a": "^3.1.0",
|
|
@@ -162,7 +174,7 @@
|
|
|
162
174
|
"uint8arrays": "^5.0.3"
|
|
163
175
|
},
|
|
164
176
|
"devDependencies": {
|
|
165
|
-
"@libp2p/peer-id-factory": "4.1.1-
|
|
177
|
+
"@libp2p/peer-id-factory": "4.1.1-1cc6a9405",
|
|
166
178
|
"@types/netmask": "^2.0.5",
|
|
167
179
|
"aegir": "^42.2.5",
|
|
168
180
|
"delay": "^6.0.0",
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { setMaxListeners } from '@libp2p/interface'
|
|
2
|
+
import { anySignal, type ClearableSignal } from 'any-signal'
|
|
3
|
+
import { MovingAverage } from './moving-average.js'
|
|
4
|
+
import type { MetricGroup, Metrics } from '@libp2p/interface'
|
|
5
|
+
|
|
6
|
+
export const DEFAULT_TIMEOUT_MULTIPLIER = 1.2
|
|
7
|
+
export const DEFAULT_FAILURE_MULTIPLIER = 2
|
|
8
|
+
export const DEFAULT_MIN_TIMEOUT = 2000
|
|
9
|
+
|
|
10
|
+
export interface AdaptiveTimeoutSignal extends ClearableSignal {
|
|
11
|
+
start: number
|
|
12
|
+
timeout: number
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface AdaptiveTimeoutInit {
|
|
16
|
+
metricName?: string
|
|
17
|
+
metrics?: Metrics
|
|
18
|
+
interval?: number
|
|
19
|
+
initialValue?: number
|
|
20
|
+
timeoutMultiplier?: number
|
|
21
|
+
failureMultiplier?: number
|
|
22
|
+
minTimeout?: number
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface GetTimeoutSignalOptions {
|
|
26
|
+
timeoutFactor?: number
|
|
27
|
+
signal?: AbortSignal
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export class AdaptiveTimeout {
|
|
31
|
+
private readonly success: MovingAverage
|
|
32
|
+
private readonly failure: MovingAverage
|
|
33
|
+
private readonly next: MovingAverage
|
|
34
|
+
private readonly metric?: MetricGroup
|
|
35
|
+
private readonly timeoutMultiplier: number
|
|
36
|
+
private readonly failureMultiplier: number
|
|
37
|
+
private readonly minTimeout: number
|
|
38
|
+
|
|
39
|
+
constructor (init: AdaptiveTimeoutInit = {}) {
|
|
40
|
+
this.success = new MovingAverage(init.interval ?? 5000)
|
|
41
|
+
this.failure = new MovingAverage(init.interval ?? 5000)
|
|
42
|
+
this.next = new MovingAverage(init.interval ?? 5000)
|
|
43
|
+
this.failureMultiplier = init.failureMultiplier ?? DEFAULT_FAILURE_MULTIPLIER
|
|
44
|
+
this.timeoutMultiplier = init.timeoutMultiplier ?? DEFAULT_TIMEOUT_MULTIPLIER
|
|
45
|
+
this.minTimeout = init.minTimeout ?? DEFAULT_MIN_TIMEOUT
|
|
46
|
+
|
|
47
|
+
if (init.metricName != null) {
|
|
48
|
+
this.metric = init.metrics?.registerMetricGroup(init.metricName)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
getTimeoutSignal (options: GetTimeoutSignalOptions = {}): AdaptiveTimeoutSignal {
|
|
53
|
+
// calculate timeout for individual peers based on moving average of
|
|
54
|
+
// previous successful requests
|
|
55
|
+
const timeout = Math.max(
|
|
56
|
+
Math.round(this.next.movingAverage * (options.timeoutFactor ?? this.timeoutMultiplier)),
|
|
57
|
+
this.minTimeout
|
|
58
|
+
)
|
|
59
|
+
const sendTimeout = AbortSignal.timeout(timeout)
|
|
60
|
+
const timeoutSignal = anySignal([options.signal, sendTimeout]) as AdaptiveTimeoutSignal
|
|
61
|
+
setMaxListeners(Infinity, timeoutSignal, sendTimeout)
|
|
62
|
+
|
|
63
|
+
timeoutSignal.start = Date.now()
|
|
64
|
+
timeoutSignal.timeout = timeout
|
|
65
|
+
|
|
66
|
+
return timeoutSignal
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
cleanUp (signal: AdaptiveTimeoutSignal): void {
|
|
70
|
+
const time = Date.now() - signal.start
|
|
71
|
+
|
|
72
|
+
if (signal.aborted) {
|
|
73
|
+
this.failure.push(time)
|
|
74
|
+
this.next.push(time * this.failureMultiplier)
|
|
75
|
+
this.metric?.update({
|
|
76
|
+
failureMovingAverage: this.failure.movingAverage,
|
|
77
|
+
failureDeviation: this.failure.deviation,
|
|
78
|
+
failureForecast: this.failure.forecast,
|
|
79
|
+
failureVariance: this.failure.variance,
|
|
80
|
+
failure: time
|
|
81
|
+
})
|
|
82
|
+
} else {
|
|
83
|
+
this.success.push(time)
|
|
84
|
+
this.next.push(time)
|
|
85
|
+
this.metric?.update({
|
|
86
|
+
successMovingAverage: this.success.movingAverage,
|
|
87
|
+
successDeviation: this.success.deviation,
|
|
88
|
+
successForecast: this.success.forecast,
|
|
89
|
+
successVariance: this.success.variance,
|
|
90
|
+
success: time
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implements exponential moving average. Ported from `moving-average`.
|
|
3
|
+
*
|
|
4
|
+
* @see https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
|
|
5
|
+
* @see https://www.npmjs.com/package/moving-average
|
|
6
|
+
*/
|
|
7
|
+
export class MovingAverage {
|
|
8
|
+
public movingAverage: number
|
|
9
|
+
public variance: number
|
|
10
|
+
public deviation: number
|
|
11
|
+
public forecast: number
|
|
12
|
+
private readonly timespan: number
|
|
13
|
+
private previousTime?: number
|
|
14
|
+
|
|
15
|
+
constructor (timespan: number) {
|
|
16
|
+
this.timespan = timespan
|
|
17
|
+
this.movingAverage = 0
|
|
18
|
+
this.variance = 0
|
|
19
|
+
this.deviation = 0
|
|
20
|
+
this.forecast = 0
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
alpha (t: number, pt: number): number {
|
|
24
|
+
return 1 - (Math.exp(-(t - pt) / this.timespan))
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
push (value: number, time: number = Date.now()): void {
|
|
28
|
+
if (this.previousTime != null) {
|
|
29
|
+
// calculate moving average
|
|
30
|
+
const a = this.alpha(time, this.previousTime)
|
|
31
|
+
const diff = value - this.movingAverage
|
|
32
|
+
const incr = a * diff
|
|
33
|
+
this.movingAverage = a * value + (1 - a) * this.movingAverage
|
|
34
|
+
// calculate variance & deviation
|
|
35
|
+
this.variance = (1 - a) * (this.variance + diff * incr)
|
|
36
|
+
this.deviation = Math.sqrt(this.variance)
|
|
37
|
+
// calculate forecast
|
|
38
|
+
this.forecast = this.movingAverage + a * diff
|
|
39
|
+
} else {
|
|
40
|
+
this.movingAverage = value
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
this.previousTime = time
|
|
44
|
+
}
|
|
45
|
+
}
|
package/src/peer-queue.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { Queue, type QueueAddOptions } from './queue/index.js'
|
|
1
|
+
import { Queue } from './queue/index.js'
|
|
4
2
|
import type { Job } from './queue/job.js'
|
|
5
|
-
import type { PeerId } from '@libp2p/interface'
|
|
3
|
+
import type { AbortOptions, PeerId } from '@libp2p/interface'
|
|
6
4
|
|
|
7
|
-
export interface PeerQueueJobOptions extends
|
|
5
|
+
export interface PeerQueueJobOptions extends AbortOptions {
|
|
8
6
|
peerId: PeerId
|
|
9
7
|
}
|
|
10
8
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Queue } from './queue/index.js'
|
|
2
|
+
import type { QueueInit } from './queue/index.js'
|
|
3
|
+
import type { AbortOptions } from '@libp2p/interface'
|
|
4
|
+
|
|
5
|
+
export interface PriorityQueueJobOptions extends AbortOptions {
|
|
6
|
+
priority: number
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export class PriorityQueue <JobReturnType = void, JobOptions extends PriorityQueueJobOptions = PriorityQueueJobOptions> extends Queue<JobReturnType, JobOptions> {
|
|
10
|
+
constructor (init: QueueInit<JobReturnType, JobOptions> = {}) {
|
|
11
|
+
super({
|
|
12
|
+
...init,
|
|
13
|
+
sort: (a, b) => {
|
|
14
|
+
if (a.options.priority > b.options.priority) {
|
|
15
|
+
return -1
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (a.options.priority < b.options.priority) {
|
|
19
|
+
return 1
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return 0
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
}
|
|
26
|
+
}
|
package/src/queue/index.ts
CHANGED
|
@@ -4,16 +4,11 @@ import { raceEvent } from 'race-event'
|
|
|
4
4
|
import { Job } from './job.js'
|
|
5
5
|
import type { AbortOptions, Metrics } from '@libp2p/interface'
|
|
6
6
|
|
|
7
|
-
export interface
|
|
8
|
-
|
|
9
|
-
* Priority of operation. Operations with greater priority will be scheduled first.
|
|
10
|
-
*
|
|
11
|
-
* @default 0
|
|
12
|
-
*/
|
|
13
|
-
priority?: number
|
|
7
|
+
export interface Comparator<T> {
|
|
8
|
+
(a: T, b: T): -1 | 0 | 1
|
|
14
9
|
}
|
|
15
10
|
|
|
16
|
-
export interface QueueInit {
|
|
11
|
+
export interface QueueInit<JobReturnType, JobOptions extends AbortOptions = AbortOptions> {
|
|
17
12
|
/**
|
|
18
13
|
* Concurrency limit.
|
|
19
14
|
*
|
|
@@ -32,6 +27,11 @@ export interface QueueInit {
|
|
|
32
27
|
* An implementation of the libp2p Metrics interface
|
|
33
28
|
*/
|
|
34
29
|
metrics?: Metrics
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* An optional function that will sort the queue after a job has been added
|
|
33
|
+
*/
|
|
34
|
+
sort?: Comparator<Job<JobOptions, JobReturnType>>
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export type JobStatus = 'queued' | 'running' | 'errored' | 'complete'
|
|
@@ -40,21 +40,21 @@ export interface RunFunction<Options = AbortOptions, ReturnType = void> {
|
|
|
40
40
|
(opts?: Options): Promise<ReturnType>
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
export interface JobMatcher<JobOptions extends
|
|
43
|
+
export interface JobMatcher<JobOptions extends AbortOptions = AbortOptions> {
|
|
44
44
|
(options?: Partial<JobOptions>): boolean
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
export interface QueueJobSuccess<JobReturnType, JobOptions extends
|
|
47
|
+
export interface QueueJobSuccess<JobReturnType, JobOptions extends AbortOptions = AbortOptions> {
|
|
48
48
|
job: Job<JobOptions, JobReturnType>
|
|
49
49
|
result: JobReturnType
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
export interface QueueJobFailure<JobReturnType, JobOptions extends
|
|
52
|
+
export interface QueueJobFailure<JobReturnType, JobOptions extends AbortOptions = AbortOptions> {
|
|
53
53
|
job: Job<JobOptions, JobReturnType>
|
|
54
54
|
error: Error
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
export interface QueueEvents<JobReturnType, JobOptions extends
|
|
57
|
+
export interface QueueEvents<JobReturnType, JobOptions extends AbortOptions = AbortOptions> {
|
|
58
58
|
/**
|
|
59
59
|
* A job is about to start running
|
|
60
60
|
*/
|
|
@@ -103,39 +103,19 @@ export interface QueueEvents<JobReturnType, JobOptions extends QueueAddOptions =
|
|
|
103
103
|
'failure': CustomEvent<QueueJobFailure<JobReturnType, JobOptions>>
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound
|
|
107
|
-
// Used to compute insertion index to keep queue sorted after insertion
|
|
108
|
-
function lowerBound<T> (array: readonly T[], value: T, comparator: (a: T, b: T) => number): number {
|
|
109
|
-
let first = 0
|
|
110
|
-
let count = array.length
|
|
111
|
-
|
|
112
|
-
while (count > 0) {
|
|
113
|
-
const step = Math.trunc(count / 2)
|
|
114
|
-
let it = first + step
|
|
115
|
-
|
|
116
|
-
if (comparator(array[it], value) <= 0) {
|
|
117
|
-
first = ++it
|
|
118
|
-
count -= step + 1
|
|
119
|
-
} else {
|
|
120
|
-
count = step
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return first
|
|
125
|
-
}
|
|
126
|
-
|
|
127
106
|
/**
|
|
128
107
|
* Heavily influence by `p-queue` with the following differences:
|
|
129
108
|
*
|
|
130
109
|
* 1. Items remain at the head of the queue while they are running so `queue.size` includes `queue.pending` items - this is so interested parties can join the results of a queue item while it is running
|
|
131
110
|
* 2. The options for a job are stored separately to the job in order for them to be modified while they are still in the queue
|
|
132
111
|
*/
|
|
133
|
-
export class Queue<JobReturnType = unknown, JobOptions extends
|
|
112
|
+
export class Queue<JobReturnType = unknown, JobOptions extends AbortOptions = AbortOptions> extends TypedEventEmitter<QueueEvents<JobReturnType, JobOptions>> {
|
|
134
113
|
public concurrency: number
|
|
135
114
|
public queue: Array<Job<JobOptions, JobReturnType>>
|
|
136
115
|
private pending: number
|
|
116
|
+
private readonly sort?: Comparator<Job<JobOptions, JobReturnType>>
|
|
137
117
|
|
|
138
|
-
constructor (init: QueueInit = {}) {
|
|
118
|
+
constructor (init: QueueInit<JobReturnType, JobOptions> = {}) {
|
|
139
119
|
super()
|
|
140
120
|
|
|
141
121
|
this.concurrency = init.concurrency ?? Number.POSITIVE_INFINITY
|
|
@@ -153,6 +133,7 @@ export class Queue<JobReturnType = unknown, JobOptions extends QueueAddOptions =
|
|
|
153
133
|
})
|
|
154
134
|
}
|
|
155
135
|
|
|
136
|
+
this.sort = init.sort
|
|
156
137
|
this.queue = []
|
|
157
138
|
}
|
|
158
139
|
|
|
@@ -215,16 +196,11 @@ export class Queue<JobReturnType = unknown, JobOptions extends QueueAddOptions =
|
|
|
215
196
|
}
|
|
216
197
|
|
|
217
198
|
private enqueue (job: Job<JobOptions, JobReturnType>): void {
|
|
218
|
-
|
|
219
|
-
this.queue.push(job)
|
|
220
|
-
return
|
|
221
|
-
}
|
|
199
|
+
this.queue.push(job)
|
|
222
200
|
|
|
223
|
-
|
|
224
|
-
this.queue
|
|
225
|
-
|
|
226
|
-
)
|
|
227
|
-
this.queue.splice(index, 0, job)
|
|
201
|
+
if (this.sort != null) {
|
|
202
|
+
this.queue.sort(this.sort)
|
|
203
|
+
}
|
|
228
204
|
}
|
|
229
205
|
|
|
230
206
|
/**
|
|
@@ -233,7 +209,7 @@ export class Queue<JobReturnType = unknown, JobOptions extends QueueAddOptions =
|
|
|
233
209
|
async add (fn: RunFunction<JobOptions, JobReturnType>, options?: JobOptions): Promise<JobReturnType> {
|
|
234
210
|
options?.signal?.throwIfAborted()
|
|
235
211
|
|
|
236
|
-
const job = new Job<JobOptions, JobReturnType>(fn, options
|
|
212
|
+
const job = new Job<JobOptions, JobReturnType>(fn, options)
|
|
237
213
|
|
|
238
214
|
const p = job.join(options)
|
|
239
215
|
.then(result => {
|
package/src/queue/job.ts
CHANGED
|
@@ -21,17 +21,15 @@ export class Job <JobOptions extends AbortOptions = AbortOptions, JobReturnType
|
|
|
21
21
|
public id: string
|
|
22
22
|
public fn: (options: JobOptions) => Promise<JobReturnType>
|
|
23
23
|
public options: JobOptions
|
|
24
|
-
public priority: number
|
|
25
24
|
public recipients: Array<JobRecipient<JobReturnType>>
|
|
26
25
|
public status: JobStatus
|
|
27
26
|
public readonly timeline: JobTimeline
|
|
28
27
|
private readonly controller: AbortController
|
|
29
28
|
|
|
30
|
-
constructor (fn: (options: JobOptions) => Promise<JobReturnType>, options: any
|
|
29
|
+
constructor (fn: (options: JobOptions) => Promise<JobReturnType>, options: any) {
|
|
31
30
|
this.id = randomId()
|
|
32
31
|
this.status = 'queued'
|
|
33
32
|
this.fn = fn
|
|
34
|
-
this.priority = priority
|
|
35
33
|
this.options = options
|
|
36
34
|
this.recipients = []
|
|
37
35
|
this.timeline = {
|