@lodestar/reqresp 1.41.0-dev.f7a5f4ddda → 1.41.0-rc.0
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/lib/request/index.d.ts.map +1 -1
- package/lib/request/index.js +41 -3
- package/lib/request/index.js.map +1 -1
- package/package.json +9 -9
- package/src/request/index.ts +49 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAe,MAAM,EAA4B,MAAM,iBAAiB,CAAC;AAGhF,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAC,aAAa,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAoC,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,CAAC;AAGxC,eAAO,MAAM,oBAAoB,QAAW,CAAC;AAC7C,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAChD,eAAO,MAAM,oBAAoB,QAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAe,MAAM,EAA4B,MAAM,iBAAiB,CAAC;AAGhF,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAC,aAAa,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAoC,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,CAAC;AAGxC,eAAO,MAAM,oBAAoB,QAAW,CAAC;AAC7C,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAChD,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAoE9C,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAuB,WAAW,CAChC,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAC,EAAE,kBAAkB,EACzD,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,aAAa,EAAE,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,WAAW,EAAE,UAAU,EACvB,MAAM,CAAC,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,eAAe,EACtB,SAAS,SAAI,GACZ,aAAa,CAAC,gBAAgB,CAAC,CAyIjC"}
|
package/lib/request/index.js
CHANGED
|
@@ -24,6 +24,45 @@ function scheduleStreamAbortIfNotClosed(stream, timeoutMs) {
|
|
|
24
24
|
}, timeoutMs);
|
|
25
25
|
stream.addEventListener("close", onClose, { once: true });
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Compose an abort signal from an optional parent signal and a timeout, with explicit cleanup.
|
|
29
|
+
*
|
|
30
|
+
* This replaces a plain `AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)])` to work
|
|
31
|
+
* around a memory leak in Node.js where AbortSignal.any() retains references to all source
|
|
32
|
+
* signals for the lifetime of the longest-lived signal (the timeout). In a long-running
|
|
33
|
+
* req/resp workload this causes unbounded growth of the dependent-signal set.
|
|
34
|
+
*
|
|
35
|
+
* Upstream issue: https://github.com/nodejs/node/issues/54614
|
|
36
|
+
* Lodestar investigation: https://github.com/ChainSafe/lodestar/issues/8969
|
|
37
|
+
*/
|
|
38
|
+
function createRespSignal(signal, timeoutMs) {
|
|
39
|
+
const timeoutSignal = AbortSignal.timeout(timeoutMs);
|
|
40
|
+
const signals = signal ? [signal, timeoutSignal] : [timeoutSignal];
|
|
41
|
+
const controller = new AbortController();
|
|
42
|
+
const clear = () => {
|
|
43
|
+
for (const entry of signals) {
|
|
44
|
+
entry.removeEventListener("abort", onAbort);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const onAbort = () => {
|
|
48
|
+
if (controller.signal.aborted) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const reason = signals.find((entry) => entry.aborted)?.reason;
|
|
52
|
+
controller.abort(reason);
|
|
53
|
+
clear();
|
|
54
|
+
};
|
|
55
|
+
for (const entry of signals) {
|
|
56
|
+
if (entry.aborted) {
|
|
57
|
+
onAbort();
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
entry.addEventListener("abort", onAbort);
|
|
61
|
+
}
|
|
62
|
+
const respSignal = controller.signal;
|
|
63
|
+
respSignal.clear = clear;
|
|
64
|
+
return respSignal;
|
|
65
|
+
}
|
|
27
66
|
/**
|
|
28
67
|
* Sends ReqResp request to a peer. Throws on error. Logs each step of the request lifecycle.
|
|
29
68
|
*
|
|
@@ -95,9 +134,7 @@ export async function* sendRequest({ logger, libp2p, metrics, peerClient }, peer
|
|
|
95
134
|
return;
|
|
96
135
|
}
|
|
97
136
|
// RESP_TIMEOUT: Maximum time for complete response transfer
|
|
98
|
-
const respSignal = signal
|
|
99
|
-
? AbortSignal.any([signal, AbortSignal.timeout(RESP_TIMEOUT)])
|
|
100
|
-
: AbortSignal.timeout(RESP_TIMEOUT);
|
|
137
|
+
const respSignal = createRespSignal(signal, RESP_TIMEOUT);
|
|
101
138
|
let responseError = null;
|
|
102
139
|
let responseFullyConsumed = false;
|
|
103
140
|
try {
|
|
@@ -137,6 +174,7 @@ export async function* sendRequest({ logger, libp2p, metrics, peerClient }, peer
|
|
|
137
174
|
}
|
|
138
175
|
}
|
|
139
176
|
}
|
|
177
|
+
respSignal.clear();
|
|
140
178
|
metrics?.outgoingClosedStreams?.inc({ method });
|
|
141
179
|
logger.verbose("Req stream closed", logCtx);
|
|
142
180
|
}
|
package/lib/request/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.41.0-
|
|
14
|
+
"version": "1.41.0-rc.0",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -46,10 +46,10 @@
|
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@chainsafe/fast-crc32c": "^4.2.0",
|
|
48
48
|
"@libp2p/interface": "^3.1.0",
|
|
49
|
-
"@libp2p/utils": "^7.0.
|
|
50
|
-
"@lodestar/config": "^1.41.0-
|
|
51
|
-
"@lodestar/params": "^1.41.0-
|
|
52
|
-
"@lodestar/utils": "^1.41.0-
|
|
49
|
+
"@libp2p/utils": "^7.0.13",
|
|
50
|
+
"@lodestar/config": "^1.41.0-rc.0",
|
|
51
|
+
"@lodestar/params": "^1.41.0-rc.0",
|
|
52
|
+
"@lodestar/utils": "^1.41.0-rc.0",
|
|
53
53
|
"snappy": "^7.2.2",
|
|
54
54
|
"snappyjs": "^0.7.0",
|
|
55
55
|
"uint8-varint": "^2.0.2",
|
|
@@ -60,9 +60,9 @@
|
|
|
60
60
|
"@libp2p/crypto": "^5.1.13",
|
|
61
61
|
"@libp2p/logger": "^6.2.2",
|
|
62
62
|
"@libp2p/peer-id": "^6.0.4",
|
|
63
|
-
"@lodestar/logger": "^1.41.0-
|
|
64
|
-
"@lodestar/types": "^1.41.0-
|
|
65
|
-
"libp2p": "3.1.
|
|
63
|
+
"@lodestar/logger": "^1.41.0-rc.0",
|
|
64
|
+
"@lodestar/types": "^1.41.0-rc.0",
|
|
65
|
+
"libp2p": "3.1.6"
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|
|
68
68
|
"libp2p": "^3.1.4"
|
|
@@ -75,5 +75,5 @@
|
|
|
75
75
|
"reqresp",
|
|
76
76
|
"blockchain"
|
|
77
77
|
],
|
|
78
|
-
"gitHead": "
|
|
78
|
+
"gitHead": "b2e8f3859d713e06e10a4cb5452d17276a4b47a5"
|
|
79
79
|
}
|
package/src/request/index.ts
CHANGED
|
@@ -36,6 +36,53 @@ function scheduleStreamAbortIfNotClosed(stream: Stream, timeoutMs: number): void
|
|
|
36
36
|
stream.addEventListener("close", onClose, {once: true});
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
type ClearableSignal = AbortSignal & {clear: () => void};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Compose an abort signal from an optional parent signal and a timeout, with explicit cleanup.
|
|
43
|
+
*
|
|
44
|
+
* This replaces a plain `AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)])` to work
|
|
45
|
+
* around a memory leak in Node.js where AbortSignal.any() retains references to all source
|
|
46
|
+
* signals for the lifetime of the longest-lived signal (the timeout). In a long-running
|
|
47
|
+
* req/resp workload this causes unbounded growth of the dependent-signal set.
|
|
48
|
+
*
|
|
49
|
+
* Upstream issue: https://github.com/nodejs/node/issues/54614
|
|
50
|
+
* Lodestar investigation: https://github.com/ChainSafe/lodestar/issues/8969
|
|
51
|
+
*/
|
|
52
|
+
function createRespSignal(signal: AbortSignal | undefined, timeoutMs: number): ClearableSignal {
|
|
53
|
+
const timeoutSignal = AbortSignal.timeout(timeoutMs);
|
|
54
|
+
const signals = signal ? [signal, timeoutSignal] : [timeoutSignal];
|
|
55
|
+
const controller = new AbortController();
|
|
56
|
+
|
|
57
|
+
const clear = (): void => {
|
|
58
|
+
for (const entry of signals) {
|
|
59
|
+
entry.removeEventListener("abort", onAbort);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const onAbort = (): void => {
|
|
64
|
+
if (controller.signal.aborted) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const reason = signals.find((entry) => entry.aborted)?.reason;
|
|
68
|
+
controller.abort(reason);
|
|
69
|
+
clear();
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
for (const entry of signals) {
|
|
73
|
+
if (entry.aborted) {
|
|
74
|
+
onAbort();
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
entry.addEventListener("abort", onAbort);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const respSignal = controller.signal as ClearableSignal;
|
|
81
|
+
respSignal.clear = clear;
|
|
82
|
+
|
|
83
|
+
return respSignal;
|
|
84
|
+
}
|
|
85
|
+
|
|
39
86
|
export interface SendRequestOpts {
|
|
40
87
|
/** The maximum time for complete response transfer. */
|
|
41
88
|
respTimeoutMs?: number;
|
|
@@ -154,9 +201,7 @@ export async function* sendRequest(
|
|
|
154
201
|
}
|
|
155
202
|
|
|
156
203
|
// RESP_TIMEOUT: Maximum time for complete response transfer
|
|
157
|
-
const respSignal = signal
|
|
158
|
-
? AbortSignal.any([signal, AbortSignal.timeout(RESP_TIMEOUT)])
|
|
159
|
-
: AbortSignal.timeout(RESP_TIMEOUT);
|
|
204
|
+
const respSignal = createRespSignal(signal, RESP_TIMEOUT);
|
|
160
205
|
|
|
161
206
|
let responseError: Error | null = null;
|
|
162
207
|
let responseFullyConsumed = false;
|
|
@@ -199,6 +244,7 @@ export async function* sendRequest(
|
|
|
199
244
|
}
|
|
200
245
|
}
|
|
201
246
|
}
|
|
247
|
+
respSignal.clear();
|
|
202
248
|
metrics?.outgoingClosedStreams?.inc({method});
|
|
203
249
|
logger.verbose("Req stream closed", logCtx);
|
|
204
250
|
}
|