@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.
@@ -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;AAqB9C,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,CA0IjC"}
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"}
@@ -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
  }
@@ -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-dev.f7a5f4ddda",
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.12",
50
- "@lodestar/config": "^1.41.0-dev.f7a5f4ddda",
51
- "@lodestar/params": "^1.41.0-dev.f7a5f4ddda",
52
- "@lodestar/utils": "^1.41.0-dev.f7a5f4ddda",
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-dev.f7a5f4ddda",
64
- "@lodestar/types": "^1.41.0-dev.f7a5f4ddda",
65
- "libp2p": "3.1.5"
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": "4e275225295e0987e05ef15f8c48633c8e5e5960"
78
+ "gitHead": "b2e8f3859d713e06e10a4cb5452d17276a4b47a5"
79
79
  }
@@ -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
  }