@lodestar/reqresp 1.43.0-dev.549a5b8115 → 1.43.0-dev.657dd16e61

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":"ReqResp.d.ts","sourceRoot":"","sources":["../src/ReqResp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReqResp.d.ts","sourceRoot":"","sources":["../src/ReqResp.ts"],"names":[],"mappings":"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"}
package/lib/ReqResp.js CHANGED
@@ -40,6 +40,9 @@ export class ReqResp {
40
40
  this.metrics?.selfRateLimiterPeerCount.addCollect(() => {
41
41
  this.metrics?.selfRateLimiterPeerCount.set(this.selfRateLimiter.getPeerCount());
42
42
  });
43
+ this.metrics?.selfRateLimiterRateLimitedPeerCount.addCollect(() => {
44
+ this.metrics?.selfRateLimiterRateLimitedPeerCount.set(this.selfRateLimiter.getRateLimitedPeerCount());
45
+ });
43
46
  }
44
47
  /**
45
48
  * Register protocol which will be used only to dial to other peers
@@ -138,6 +141,9 @@ export class ReqResp {
138
141
  if (e.type.code === RequestErrorCode.DIAL_ERROR || e.type.code === RequestErrorCode.DIAL_TIMEOUT) {
139
142
  this.metrics?.dialErrors.inc();
140
143
  }
144
+ if (e.type.code === RequestErrorCode.RESP_RATE_LIMITED) {
145
+ this.selfRateLimiter.onRateLimited(peerIdStr);
146
+ }
141
147
  this.metrics?.outgoingErrorReasons.inc({ reason: e.type.code });
142
148
  this.onOutgoingRequestError(peerId, method, e);
143
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ReqResp.js","sourceRoot":"","sources":["../src/ReqResp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReqResp.js","sourceRoot":"","sources":["../src/ReqResp.ts"],"names":[],"mappings":"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"}
package/lib/metrics.d.ts CHANGED
@@ -40,5 +40,6 @@ export declare function getMetrics(register: MetricsRegisterExtra): {
40
40
  }>;
41
41
  dialErrors: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
42
42
  selfRateLimiterPeerCount: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
43
+ selfRateLimiterRateLimitedPeerCount: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
43
44
  };
44
45
  //# sourceMappingURL=metrics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAErD,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsExD"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAErD,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0ExD"}
package/lib/metrics.js CHANGED
@@ -69,6 +69,10 @@ export function getMetrics(register) {
69
69
  name: "beacon_reqresp_self_rate_limiter_peer_count",
70
70
  help: "Count of peers tracked by the self rate limiter",
71
71
  }),
72
+ selfRateLimiterRateLimitedPeerCount: register.gauge({
73
+ name: "beacon_reqresp_self_rate_limiter_rate_limited_peer_count",
74
+ help: "Count of peers currently in rate-limit backoff",
75
+ }),
72
76
  };
73
77
  }
74
78
  //# sourceMappingURL=metrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAA8B,EAAE;IACzD,qGAAqG;IAErG,OAAO;QACL,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAmB;YACjD,IAAI,EAAE,wCAAwC;YAC9C,IAAI,EAAE,uCAAuC;YAC7C,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAmB;YACxD,IAAI,EAAE,8CAA8C;YACpD,IAAI,EAAE,wCAAwC;YAC9C,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAmB;YACxD,IAAI,EAAE,8CAA8C;YACpD,IAAI,EAAE,wCAAwC;YAC9C,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,4BAA4B,EAAE,QAAQ,CAAC,SAAS,CAAmB;YACjE,IAAI,EAAE,wDAAwD;YAC9D,IAAI,EAAE,gDAAgD;YACtD,UAAU,EAAE,CAAC,QAAQ,CAAC;YACtB,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;SAC3C,CAAC;QACF,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAmB;YAC/C,IAAI,EAAE,8CAA8C;YACpD,IAAI,EAAE,8CAA8C;YACpD,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,oBAAoB,EAAE,QAAQ,CAAC,KAAK,CAA6B;YAC/D,IAAI,EAAE,qDAAqD;YAC3D,IAAI,EAAE,+CAA+C;YACrD,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAmB;YACjD,IAAI,EAAE,wCAAwC;YAC9C,IAAI,EAAE,2CAA2C;YACjD,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAmB;YACxD,IAAI,EAAE,8CAA8C;YACpD,IAAI,EAAE,iDAAiD;YACvD,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAmB;YACxD,IAAI,EAAE,8CAA8C;YACpD,IAAI,EAAE,iDAAiD;YACvD,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,0BAA0B,EAAE,QAAQ,CAAC,SAAS,CAAmB;YAC/D,IAAI,EAAE,sDAAsD;YAC5D,IAAI,EAAE,uDAAuD;YAC7D,UAAU,EAAE,CAAC,QAAQ,CAAC;YACtB,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;SACnC,CAAC;QACF,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAmB;YAC/C,IAAI,EAAE,8CAA8C;YACpD,IAAI,EAAE,kDAAkD;YACxD,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC;YACzB,IAAI,EAAE,kCAAkC;YACxC,IAAI,EAAE,yBAAyB;SAChC,CAAC;QACF,wBAAwB,EAAE,QAAQ,CAAC,KAAK,CAAC;YACvC,IAAI,EAAE,6CAA6C;YACnD,IAAI,EAAE,iDAAiD;SACxD,CAAC;KACH,CAAC;AAAA,CACH"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAA8B,EAAE;IACzD,qGAAqG;IAErG,OAAO;QACL,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAmB;YACjD,IAAI,EAAE,wCAAwC;YAC9C,IAAI,EAAE,uCAAuC;YAC7C,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAmB;YACxD,IAAI,EAAE,8CAA8C;YACpD,IAAI,EAAE,wCAAwC;YAC9C,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAmB;YACxD,IAAI,EAAE,8CAA8C;YACpD,IAAI,EAAE,wCAAwC;YAC9C,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,4BAA4B,EAAE,QAAQ,CAAC,SAAS,CAAmB;YACjE,IAAI,EAAE,wDAAwD;YAC9D,IAAI,EAAE,gDAAgD;YACtD,UAAU,EAAE,CAAC,QAAQ,CAAC;YACtB,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;SAC3C,CAAC;QACF,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAmB;YAC/C,IAAI,EAAE,8CAA8C;YACpD,IAAI,EAAE,8CAA8C;YACpD,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,oBAAoB,EAAE,QAAQ,CAAC,KAAK,CAA6B;YAC/D,IAAI,EAAE,qDAAqD;YAC3D,IAAI,EAAE,+CAA+C;YACrD,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAmB;YACjD,IAAI,EAAE,wCAAwC;YAC9C,IAAI,EAAE,2CAA2C;YACjD,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAmB;YACxD,IAAI,EAAE,8CAA8C;YACpD,IAAI,EAAE,iDAAiD;YACvD,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAmB;YACxD,IAAI,EAAE,8CAA8C;YACpD,IAAI,EAAE,iDAAiD;YACvD,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,0BAA0B,EAAE,QAAQ,CAAC,SAAS,CAAmB;YAC/D,IAAI,EAAE,sDAAsD;YAC5D,IAAI,EAAE,uDAAuD;YAC7D,UAAU,EAAE,CAAC,QAAQ,CAAC;YACtB,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;SACnC,CAAC;QACF,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAmB;YAC/C,IAAI,EAAE,8CAA8C;YACpD,IAAI,EAAE,kDAAkD;YACxD,UAAU,EAAE,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC;YACzB,IAAI,EAAE,kCAAkC;YACxC,IAAI,EAAE,yBAAyB;SAChC,CAAC;QACF,wBAAwB,EAAE,QAAQ,CAAC,KAAK,CAAC;YACvC,IAAI,EAAE,6CAA6C;YACnD,IAAI,EAAE,iDAAiD;SACxD,CAAC;QACF,mCAAmC,EAAE,QAAQ,CAAC,KAAK,CAAC;YAClD,IAAI,EAAE,0DAA0D;YAChE,IAAI,EAAE,gDAAgD;SACvD,CAAC;KACH,CAAC;AAAA,CACH"}
@@ -9,10 +9,16 @@ export declare const CHECK_DISCONNECTED_PEERS_INTERVAL_MS: number;
9
9
  * for example https://github.com/ChainSafe/lodestar/issues/8256
10
10
  **/
11
11
  export declare const REQUEST_TIMEOUT_MS: number;
12
+ /** Default backoff when a peer rate limits us. */
13
+ export declare const DEFAULT_RATE_LIMIT_BACKOFF_MS = 5000;
12
14
  type RequestId = number;
13
15
  /**
14
16
  * Simple rate limiter that allows a maximum of 2 concurrent requests per protocol per peer.
17
+ * Also tracks when a peer has rate-limited us and enforces a backoff period before allowing new requests.
15
18
  * The consumer should either prevent requests from being sent when the limit is reached or handle the case when the request is not allowed.
19
+ *
20
+ * Note: SyncChain maintains its own rate-limit backoff map to avoid assigning batches to backed-off
21
+ * peers. This class acts as the authoritative safety net at the protocol level.
16
22
  */
17
23
  export declare class SelfRateLimiter {
18
24
  private readonly logger?;
@@ -22,6 +28,8 @@ export declare class SelfRateLimiter {
22
28
  * This is the same design to `ReqRespRateLimiter`.
23
29
  **/
24
30
  private lastSeenRequestsByPeer;
31
+ /** Tracks the timestamp (ms) until which we should not send requests to a peer */
32
+ private rateLimitedUntilByPeer;
25
33
  /** Interval to check lastSeenMessagesByPeer */
26
34
  private cleanupInterval;
27
35
  constructor(logger?: Logger | undefined);
@@ -36,7 +44,12 @@ export declare class SelfRateLimiter {
36
44
  * This should NOT be called when the request was not allowed
37
45
  */
38
46
  requestCompleted(peerId: PeerIdStr, protocolId: ProtocolID, requestId: RequestId): void;
47
+ /**
48
+ * Called when a peer responds with a rate-limit error, to enforce a backoff period before retrying.
49
+ */
50
+ onRateLimited(peerId: PeerIdStr): void;
39
51
  getPeerCount(): number;
52
+ getRateLimitedPeerCount(): number;
40
53
  private checkDisconnectedPeers;
41
54
  }
42
55
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"selfRateLimiter.d.ts","sourceRoot":"","sources":["../../src/rate_limiter/selfRateLimiter.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAS,MAAM,iBAAiB,CAAC;AAE/C,KAAK,SAAS,GAAG,MAAM,CAAC;AACxB,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,yGAAyG;AACzG,eAAO,MAAM,oCAAoC,QAAgB,CAAC;AAKlE;;;;IAII;AACJ,eAAO,MAAM,kBAAkB,QAAY,CAAC;AAE5C,KAAK,SAAS,GAAG,MAAM,CAAC;AAGxB;;;GAGG;AACH,qBAAa,eAAe;IAUd,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IATpC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqE;IACzG;;;QAGI;IACJ,OAAO,CAAC,sBAAsB,CAAsB;IACpD,+CAA+C;IAC/C,OAAO,CAAC,eAAe,CAAyC;IAEhE,YAA6B,MAAM,CAAC,oBAAQ,EAK3C;IAED,KAAK,IAAI,IAAI,CAEZ;IAED,IAAI,IAAI,IAAI,CAKX;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CA4B/E;IAED;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAItF;IAED,YAAY,IAAI,MAAM,CAErB;IAED,OAAO,CAAC,sBAAsB;CAS/B"}
1
+ {"version":3,"file":"selfRateLimiter.d.ts","sourceRoot":"","sources":["../../src/rate_limiter/selfRateLimiter.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAS,MAAM,iBAAiB,CAAC;AAE/C,KAAK,SAAS,GAAG,MAAM,CAAC;AACxB,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,yGAAyG;AACzG,eAAO,MAAM,oCAAoC,QAAgB,CAAC;AAKlE;;;;IAII;AACJ,eAAO,MAAM,kBAAkB,QAAY,CAAC;AAE5C,kDAAkD;AAClD,eAAO,MAAM,6BAA6B,OAAQ,CAAC;AAEnD,KAAK,SAAS,GAAG,MAAM,CAAC;AAGxB;;;;;;;GAOG;AACH,qBAAa,eAAe;IAYd,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAXpC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqE;IACzG;;;QAGI;IACJ,OAAO,CAAC,sBAAsB,CAAsB;IACpD,kFAAkF;IAClF,OAAO,CAAC,sBAAsB,CAAyB;IACvD,+CAA+C;IAC/C,OAAO,CAAC,eAAe,CAAyC;IAEhE,YAA6B,MAAM,CAAC,oBAAQ,EAM3C;IAED,KAAK,IAAI,IAAI,CAEZ;IAED,IAAI,IAAI,IAAI,CAKX;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAyC/E;IAED;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAItF;IAED;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAIrC;IAED,YAAY,IAAI,MAAM,CAErB;IAED,uBAAuB,IAAI,MAAM,CAEhC;IAED,OAAO,CAAC,sBAAsB;CAgB/B"}
@@ -10,9 +10,15 @@ const DISCONNECTED_TIMEOUT_MS = 60 * 1000;
10
10
  * for example https://github.com/ChainSafe/lodestar/issues/8256
11
11
  **/
12
12
  export const REQUEST_TIMEOUT_MS = 30 * 1000;
13
+ /** Default backoff when a peer rate limits us. */
14
+ export const DEFAULT_RATE_LIMIT_BACKOFF_MS = 5_000;
13
15
  /**
14
16
  * Simple rate limiter that allows a maximum of 2 concurrent requests per protocol per peer.
17
+ * Also tracks when a peer has rate-limited us and enforces a backoff period before allowing new requests.
15
18
  * The consumer should either prevent requests from being sent when the limit is reached or handle the case when the request is not allowed.
19
+ *
20
+ * Note: SyncChain maintains its own rate-limit backoff map to avoid assigning batches to backed-off
21
+ * peers. This class acts as the authoritative safety net at the protocol level.
16
22
  */
17
23
  export class SelfRateLimiter {
18
24
  logger;
@@ -22,12 +28,15 @@ export class SelfRateLimiter {
22
28
  * This is the same design to `ReqRespRateLimiter`.
23
29
  **/
24
30
  lastSeenRequestsByPeer;
31
+ /** Tracks the timestamp (ms) until which we should not send requests to a peer */
32
+ rateLimitedUntilByPeer;
25
33
  /** Interval to check lastSeenMessagesByPeer */
26
34
  cleanupInterval = undefined;
27
35
  constructor(logger) {
28
36
  this.logger = logger;
29
37
  this.rateLimitersPerPeer = new MapDef(() => new MapDef(() => new Map()));
30
38
  this.lastSeenRequestsByPeer = new Map();
39
+ this.rateLimitedUntilByPeer = new Map();
31
40
  }
32
41
  start() {
33
42
  this.cleanupInterval = setInterval(this.checkDisconnectedPeers.bind(this), CHECK_DISCONNECTED_PEERS_INTERVAL_MS);
@@ -43,6 +52,17 @@ export class SelfRateLimiter {
43
52
  */
44
53
  allows(peerId, protocolId, requestId) {
45
54
  const now = Date.now();
55
+ // Check if peer has rate-limited us and we're still in backoff
56
+ const rateLimitedUntil = this.rateLimitedUntilByPeer.get(peerId);
57
+ if (rateLimitedUntil !== undefined) {
58
+ if (now < rateLimitedUntil) {
59
+ // Keep peer alive so checkDisconnectedPeers() doesn't prematurely evict the backoff entry
60
+ this.lastSeenRequestsByPeer.set(peerId, now);
61
+ return false;
62
+ }
63
+ // Backoff expired, clean up
64
+ this.rateLimitedUntilByPeer.delete(peerId);
65
+ }
46
66
  const peerRateLimiter = this.rateLimitersPerPeer.getOrDefault(peerId);
47
67
  const trackedRequests = peerRateLimiter.getOrDefault(protocolId);
48
68
  this.lastSeenRequestsByPeer.set(peerId, now);
@@ -77,15 +97,33 @@ export class SelfRateLimiter {
77
97
  const trackedRequests = peerRateLimiter.getOrDefault(protocolId);
78
98
  trackedRequests.delete(requestId);
79
99
  }
100
+ /**
101
+ * Called when a peer responds with a rate-limit error, to enforce a backoff period before retrying.
102
+ */
103
+ onRateLimited(peerId) {
104
+ const rateLimitedUntil = Date.now() + DEFAULT_RATE_LIMIT_BACKOFF_MS;
105
+ this.rateLimitedUntilByPeer.set(peerId, rateLimitedUntil);
106
+ this.logger?.debug("SelfRateLimiter: peer rate limited us, backing off", { peerId });
107
+ }
80
108
  getPeerCount() {
81
109
  return this.rateLimitersPerPeer.size;
82
110
  }
111
+ getRateLimitedPeerCount() {
112
+ return this.rateLimitedUntilByPeer.size;
113
+ }
83
114
  checkDisconnectedPeers() {
84
115
  const now = Date.now();
85
116
  for (const [peerIdStr, lastSeenTime] of this.lastSeenRequestsByPeer.entries()) {
86
117
  if (now - lastSeenTime >= DISCONNECTED_TIMEOUT_MS) {
87
118
  this.rateLimitersPerPeer.delete(peerIdStr);
88
119
  this.lastSeenRequestsByPeer.delete(peerIdStr);
120
+ this.rateLimitedUntilByPeer.delete(peerIdStr);
121
+ }
122
+ }
123
+ // Also clean up expired backoff entries for peers still connected
124
+ for (const [peerIdStr, rateLimitedUntil] of this.rateLimitedUntilByPeer.entries()) {
125
+ if (now >= rateLimitedUntil) {
126
+ this.rateLimitedUntilByPeer.delete(peerIdStr);
89
127
  }
90
128
  }
91
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"selfRateLimiter.js","sourceRoot":"","sources":["../../src/rate_limiter/selfRateLimiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAS,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAK/C,yGAAyG;AACzG,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAElE,sHAAsH;AACtH,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1C;;;;IAII;AACJ,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC;AAK5C;;;GAGG;AACH,MAAM,OAAO,eAAe;IAUG,MAAM;IATlB,mBAAmB,CAAqE;IACzG;;;QAGI;IACI,sBAAsB,CAAsB;IACpD,+CAA+C;IACvC,eAAe,GAA+B,SAAS,CAAC;IAEhE,YAA6B,MAAe,EAAE;sBAAjB,MAAM;QACjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,MAAM,CACnC,GAAG,EAAE,CAAC,IAAI,MAAM,CAA0C,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAC3E,CAAC;QACF,IAAI,CAAC,sBAAsB,GAAG,IAAI,GAAG,EAAE,CAAC;IAAA,CACzC;IAED,KAAK,GAAS;QACZ,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,oCAAoC,CAAC,CAAC;IAAA,CAClH;IAED,IAAI,GAAS;QACX,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACvC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACnC,CAAC;IAAA,CACF;IAED;;OAEG;IACH,MAAM,CAAC,MAAiB,EAAE,UAAsB,EAAE,SAAoB,EAAW;QAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACtE,MAAM,eAAe,GAAG,eAAe,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACjE,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAE7C,IAAI,kBAAkB,GAAG,CAAC,CAAC;QAC3B,KAAK,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YACjF,IAAI,oBAAoB,GAAG,kBAAkB,IAAI,GAAG,EAAE,CAAC;gBACrD,+BAA+B;gBAC/B,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACzC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,iDAAiD,EAAE;oBACpE,SAAS,EAAE,gBAAgB;oBAC3B,WAAW,EAAE,oBAAoB;oBACjC,MAAM;oBACN,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,kBAAkB,EAAE,CAAC;YACvB,CAAC;QACH,CAAC;QAED,IAAI,kBAAkB,IAAI,uBAAuB,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IAAA,CACb;IAED;;;OAGG;IACH,gBAAgB,CAAC,MAAiB,EAAE,UAAsB,EAAE,SAAoB,EAAQ;QACtF,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACtE,MAAM,eAAe,GAAG,eAAe,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACjE,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAAA,CACnC;IAED,YAAY,GAAW;QACrB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;IAAA,CACtC;IAEO,sBAAsB,GAAS;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9E,IAAI,GAAG,GAAG,YAAY,IAAI,uBAAuB,EAAE,CAAC;gBAClD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IAAA,CACF;CACF"}
1
+ {"version":3,"file":"selfRateLimiter.js","sourceRoot":"","sources":["../../src/rate_limiter/selfRateLimiter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/request/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAa,sBAAsB,EAAC,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAEnD,oBAAY,gBAAgB;IAE1B,4DAA4D;IAC5D,eAAe,kCAAkC;IACjD,oBAAoB,uCAAuC;IAC3D,yDAAyD;IACzD,YAAY,+BAA+B;IAC3C,iEAAiE;IACjE,oBAAoB,+BAA+B;IACnD,wEAAwE;IACxE,oBAAoB,uCAAuC;IAC3D,4DAA4D;IAC5D,YAAY,+BAA+B;IAC3C,uCAAuC;IACvC,UAAU,6BAA6B;IACvC,iEAAiE;IACjE,eAAe,kCAAkC;IACjD,8CAA8C;IAC9C,aAAa,gCAAgC;IAC7C,iDAAiD;IACjD,cAAc,iCAAiC;IAC/C,yCAAyC;IACzC,YAAY,+BAA+B;IAC3C,2BAA2B;IAC3B,oBAAoB,+BAA+B;IACnD,gCAAgC;IAChC,yBAAyB,oCAAoC;IAC7D,4BAA4B;IAC5B,iBAAiB,gCAAgC;IACjD,6CAA6C;IAC7C,iBAAiB,uCAAuC;CACzD;AAED,KAAK,gBAAgB,GACjB;IAAC,IAAI,EAAE,gBAAgB,CAAC,eAAe,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GAC9D;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACnE;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GAC3D;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACnE;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACnG;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAA;CAAC,GACrC;IAAC,IAAI,EAAE,gBAAgB,CAAC,UAAU,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,GACjD;IAAC,IAAI,EAAE,gBAAgB,CAAC,eAAe,CAAA;CAAC,GACxC;IAAC,IAAI,EAAE,gBAAgB,CAAC,aAAa,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,GACpD;IAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAA;CAAC,GACvC;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAA;CAAC,GACrC;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAA;CAAC,GAC7C;IAAC,IAAI,EAAE,gBAAgB,CAAC,yBAAyB,CAAA;CAAC,GAClD;IAAC,IAAI,EAAE,gBAAgB,CAAC,iBAAiB,CAAA;CAAC,GAC1C;IAAC,IAAI,EAAE,gBAAgB,CAAC,iBAAiB,CAAA;CAAC,CAAC;AAE/C,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AAEvD,qBAAa,YAAa,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IAC/D,YAAY,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAEnE;IAED,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,mBAAmB,GAAG,YAAY,CAMxD;CACF;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAyBpF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/request/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAa,sBAAsB,EAAC,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAEnD,oBAAY,gBAAgB;IAE1B,4DAA4D;IAC5D,eAAe,kCAAkC;IACjD,oBAAoB,uCAAuC;IAC3D,yDAAyD;IACzD,YAAY,+BAA+B;IAC3C,iEAAiE;IACjE,oBAAoB,+BAA+B;IACnD,wEAAwE;IACxE,oBAAoB,uCAAuC;IAC3D,4DAA4D;IAC5D,YAAY,+BAA+B;IAC3C,uCAAuC;IACvC,UAAU,6BAA6B;IACvC,iEAAiE;IACjE,eAAe,kCAAkC;IACjD,8CAA8C;IAC9C,aAAa,gCAAgC;IAC7C,iDAAiD;IACjD,cAAc,iCAAiC;IAC/C,yCAAyC;IACzC,YAAY,+BAA+B;IAC3C,2BAA2B;IAC3B,oBAAoB,+BAA+B;IACnD,gCAAgC;IAChC,yBAAyB,oCAAoC;IAC7D,4BAA4B;IAC5B,iBAAiB,gCAAgC;IACjD,6CAA6C;IAC7C,iBAAiB,uCAAuC;CACzD;AAED,KAAK,gBAAgB,GACjB;IAAC,IAAI,EAAE,gBAAgB,CAAC,eAAe,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GAC9D;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACnE;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GAC3D;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACnE;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACnG;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAA;CAAC,GACrC;IAAC,IAAI,EAAE,gBAAgB,CAAC,UAAU,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,GACjD;IAAC,IAAI,EAAE,gBAAgB,CAAC,eAAe,CAAA;CAAC,GACxC;IAAC,IAAI,EAAE,gBAAgB,CAAC,aAAa,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,GACpD;IAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAA;CAAC,GACvC;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAA;CAAC,GACrC;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAA;CAAC,GAC7C;IAAC,IAAI,EAAE,gBAAgB,CAAC,yBAAyB,CAAA;CAAC,GAClD;IAAC,IAAI,EAAE,gBAAgB,CAAC,iBAAiB,CAAA;CAAC,GAC1C;IAAC,IAAI,EAAE,gBAAgB,CAAC,iBAAiB,CAAA;CAAC,CAAC;AAE/C,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AAEvD,qBAAa,YAAa,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IAC/D,YAAY,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAEnE;IAED,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,mBAAmB,GAAG,YAAY,CAMxD;CACF;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAkCpF"}
@@ -51,16 +51,25 @@ export class RequestError extends LodestarError {
51
51
  */
52
52
  export function responseStatusErrorToRequestError(e) {
53
53
  const { errorMessage, status } = e;
54
- // rate limited error from clients have different status, for example: lighthouse responds with 139, teku responds with 1
55
- // but all of them has "rate limit" in the error message
56
- // refer to https://github.com/ChainSafe/lodestar/issues/8065#issuecomment-3157266196
54
+ // Rate limit error detection: clients use different status codes and messages.
55
+ // We match on the error message text because status codes are inconsistent:
56
+ // - Lighthouse/Grandine: status 139 (non-standard RateLimited code)
57
+ // message: "Rate limited. There are already 2 active requests with the same protocol"
58
+ // - Prysm: status 1 (INVALID_REQUEST), message: "rate limited"
59
+ // - Teku: status 1 (INVALID_REQUEST), message: "Peer has been rate limited"
60
+ // - Nimbus: never sends rate limit errors (silently throttles via token bucket)
61
+ // See https://github.com/ChainSafe/lodestar/issues/8065#issuecomment-3157266196
57
62
  const errorMessageLowercase = errorMessage.toLowerCase();
58
63
  if (errorMessageLowercase.includes("rate limit")) {
59
64
  return { code: RequestErrorCode.RESP_RATE_LIMITED };
60
65
  }
61
- // Grandine may return this without standard RespStatus, see https://github.com/ChainSafe/lodestar/issues/8110
62
- if (errorMessageLowercase.includes("wait ")) {
63
- return { code: RequestErrorCode.RESP_TIMEOUT };
66
+ // Grandine's eth2_libp2p fork uses the old Lighthouse GCRA inbound rate limiter which sends
67
+ // "Wait <Duration>" with an explicit backoff (e.g. "Wait 2.816488536s") using Rust's
68
+ // Debug format for Duration. We only use this as a rate-limit signal; the backoff duration
69
+ // is intentionally not parsed.
70
+ // See https://github.com/ChainSafe/lodestar/issues/8110
71
+ if (errorMessageLowercase.startsWith("wait ")) {
72
+ return { code: RequestErrorCode.RESP_RATE_LIMITED };
64
73
  }
65
74
  switch (status) {
66
75
  case RespStatus.INVALID_REQUEST:
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/request/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/request/errors.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.43.0-dev.549a5b8115",
14
+ "version": "1.43.0-dev.657dd16e61",
15
15
  "type": "module",
16
16
  "exports": {
17
17
  ".": {
@@ -47,9 +47,9 @@
47
47
  "@chainsafe/fast-crc32c": "^4.2.0",
48
48
  "@libp2p/interface": "^3.1.0",
49
49
  "@libp2p/utils": "^7.0.13",
50
- "@lodestar/config": "^1.43.0-dev.549a5b8115",
51
- "@lodestar/params": "^1.43.0-dev.549a5b8115",
52
- "@lodestar/utils": "^1.43.0-dev.549a5b8115",
50
+ "@lodestar/config": "^1.43.0-dev.657dd16e61",
51
+ "@lodestar/params": "^1.43.0-dev.657dd16e61",
52
+ "@lodestar/utils": "^1.43.0-dev.657dd16e61",
53
53
  "snappy": "^7.2.2",
54
54
  "snappyjs": "^0.7.0",
55
55
  "uint8-varint": "^2.0.2",
@@ -60,8 +60,8 @@
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.43.0-dev.549a5b8115",
64
- "@lodestar/types": "^1.43.0-dev.549a5b8115",
63
+ "@lodestar/logger": "^1.43.0-dev.657dd16e61",
64
+ "@lodestar/types": "^1.43.0-dev.657dd16e61",
65
65
  "libp2p": "3.1.6"
66
66
  },
67
67
  "peerDependencies": {
@@ -75,5 +75,5 @@
75
75
  "reqresp",
76
76
  "blockchain"
77
77
  ],
78
- "gitHead": "bc367bb9239e50566602da241f54ae779d46a35d"
78
+ "gitHead": "620c61795c46d87b80054043e85c3790abd7cf83"
79
79
  }
package/src/ReqResp.ts CHANGED
@@ -74,6 +74,9 @@ export class ReqResp {
74
74
  this.metrics?.selfRateLimiterPeerCount.addCollect(() => {
75
75
  this.metrics?.selfRateLimiterPeerCount.set(this.selfRateLimiter.getPeerCount());
76
76
  });
77
+ this.metrics?.selfRateLimiterRateLimitedPeerCount.addCollect(() => {
78
+ this.metrics?.selfRateLimiterRateLimitedPeerCount.set(this.selfRateLimiter.getRateLimitedPeerCount());
79
+ });
77
80
  }
78
81
 
79
82
  /**
@@ -206,6 +209,9 @@ export class ReqResp {
206
209
  if (e.type.code === RequestErrorCode.DIAL_ERROR || e.type.code === RequestErrorCode.DIAL_TIMEOUT) {
207
210
  this.metrics?.dialErrors.inc();
208
211
  }
212
+ if (e.type.code === RequestErrorCode.RESP_RATE_LIMITED) {
213
+ this.selfRateLimiter.onRateLimited(peerIdStr);
214
+ }
209
215
  this.metrics?.outgoingErrorReasons.inc({reason: e.type.code});
210
216
 
211
217
  this.onOutgoingRequestError(peerId, method, e);
package/src/metrics.ts CHANGED
@@ -75,5 +75,9 @@ export function getMetrics(register: MetricsRegisterExtra) {
75
75
  name: "beacon_reqresp_self_rate_limiter_peer_count",
76
76
  help: "Count of peers tracked by the self rate limiter",
77
77
  }),
78
+ selfRateLimiterRateLimitedPeerCount: register.gauge({
79
+ name: "beacon_reqresp_self_rate_limiter_rate_limited_peer_count",
80
+ help: "Count of peers currently in rate-limit backoff",
81
+ }),
78
82
  };
79
83
  }
@@ -17,12 +17,19 @@ const DISCONNECTED_TIMEOUT_MS = 60 * 1000;
17
17
  **/
18
18
  export const REQUEST_TIMEOUT_MS = 30 * 1000;
19
19
 
20
+ /** Default backoff when a peer rate limits us. */
21
+ export const DEFAULT_RATE_LIMIT_BACKOFF_MS = 5_000;
22
+
20
23
  type RequestId = number;
21
24
  type RequestIdMs = number;
22
25
 
23
26
  /**
24
27
  * Simple rate limiter that allows a maximum of 2 concurrent requests per protocol per peer.
28
+ * Also tracks when a peer has rate-limited us and enforces a backoff period before allowing new requests.
25
29
  * The consumer should either prevent requests from being sent when the limit is reached or handle the case when the request is not allowed.
30
+ *
31
+ * Note: SyncChain maintains its own rate-limit backoff map to avoid assigning batches to backed-off
32
+ * peers. This class acts as the authoritative safety net at the protocol level.
26
33
  */
27
34
  export class SelfRateLimiter {
28
35
  private readonly rateLimitersPerPeer: MapDef<PeerIdStr, MapDef<ProtocolID, Map<RequestId, RequestIdMs>>>;
@@ -31,6 +38,8 @@ export class SelfRateLimiter {
31
38
  * This is the same design to `ReqRespRateLimiter`.
32
39
  **/
33
40
  private lastSeenRequestsByPeer: Map<string, number>;
41
+ /** Tracks the timestamp (ms) until which we should not send requests to a peer */
42
+ private rateLimitedUntilByPeer: Map<PeerIdStr, number>;
34
43
  /** Interval to check lastSeenMessagesByPeer */
35
44
  private cleanupInterval: NodeJS.Timeout | undefined = undefined;
36
45
 
@@ -39,6 +48,7 @@ export class SelfRateLimiter {
39
48
  () => new MapDef<ProtocolID, Map<RequestId, RequestIdMs>>(() => new Map())
40
49
  );
41
50
  this.lastSeenRequestsByPeer = new Map();
51
+ this.rateLimitedUntilByPeer = new Map();
42
52
  }
43
53
 
44
54
  start(): void {
@@ -57,6 +67,19 @@ export class SelfRateLimiter {
57
67
  */
58
68
  allows(peerId: PeerIdStr, protocolId: ProtocolID, requestId: RequestId): boolean {
59
69
  const now = Date.now();
70
+
71
+ // Check if peer has rate-limited us and we're still in backoff
72
+ const rateLimitedUntil = this.rateLimitedUntilByPeer.get(peerId);
73
+ if (rateLimitedUntil !== undefined) {
74
+ if (now < rateLimitedUntil) {
75
+ // Keep peer alive so checkDisconnectedPeers() doesn't prematurely evict the backoff entry
76
+ this.lastSeenRequestsByPeer.set(peerId, now);
77
+ return false;
78
+ }
79
+ // Backoff expired, clean up
80
+ this.rateLimitedUntilByPeer.delete(peerId);
81
+ }
82
+
60
83
  const peerRateLimiter = this.rateLimitersPerPeer.getOrDefault(peerId);
61
84
  const trackedRequests = peerRateLimiter.getOrDefault(protocolId);
62
85
  this.lastSeenRequestsByPeer.set(peerId, now);
@@ -95,16 +118,36 @@ export class SelfRateLimiter {
95
118
  trackedRequests.delete(requestId);
96
119
  }
97
120
 
121
+ /**
122
+ * Called when a peer responds with a rate-limit error, to enforce a backoff period before retrying.
123
+ */
124
+ onRateLimited(peerId: PeerIdStr): void {
125
+ const rateLimitedUntil = Date.now() + DEFAULT_RATE_LIMIT_BACKOFF_MS;
126
+ this.rateLimitedUntilByPeer.set(peerId, rateLimitedUntil);
127
+ this.logger?.debug("SelfRateLimiter: peer rate limited us, backing off", {peerId});
128
+ }
129
+
98
130
  getPeerCount(): number {
99
131
  return this.rateLimitersPerPeer.size;
100
132
  }
101
133
 
134
+ getRateLimitedPeerCount(): number {
135
+ return this.rateLimitedUntilByPeer.size;
136
+ }
137
+
102
138
  private checkDisconnectedPeers(): void {
103
139
  const now = Date.now();
104
140
  for (const [peerIdStr, lastSeenTime] of this.lastSeenRequestsByPeer.entries()) {
105
141
  if (now - lastSeenTime >= DISCONNECTED_TIMEOUT_MS) {
106
142
  this.rateLimitersPerPeer.delete(peerIdStr);
107
143
  this.lastSeenRequestsByPeer.delete(peerIdStr);
144
+ this.rateLimitedUntilByPeer.delete(peerIdStr);
145
+ }
146
+ }
147
+ // Also clean up expired backoff entries for peers still connected
148
+ for (const [peerIdStr, rateLimitedUntil] of this.rateLimitedUntilByPeer.entries()) {
149
+ if (now >= rateLimitedUntil) {
150
+ this.rateLimitedUntilByPeer.delete(peerIdStr);
108
151
  }
109
152
  }
110
153
  }
@@ -73,17 +73,26 @@ export class RequestError extends LodestarError<RequestErrorType> {
73
73
  */
74
74
  export function responseStatusErrorToRequestError(e: ResponseError): RequestErrorType {
75
75
  const {errorMessage, status} = e;
76
- // rate limited error from clients have different status, for example: lighthouse responds with 139, teku responds with 1
77
- // but all of them has "rate limit" in the error message
78
- // refer to https://github.com/ChainSafe/lodestar/issues/8065#issuecomment-3157266196
76
+ // Rate limit error detection: clients use different status codes and messages.
77
+ // We match on the error message text because status codes are inconsistent:
78
+ // - Lighthouse/Grandine: status 139 (non-standard RateLimited code)
79
+ // message: "Rate limited. There are already 2 active requests with the same protocol"
80
+ // - Prysm: status 1 (INVALID_REQUEST), message: "rate limited"
81
+ // - Teku: status 1 (INVALID_REQUEST), message: "Peer has been rate limited"
82
+ // - Nimbus: never sends rate limit errors (silently throttles via token bucket)
83
+ // See https://github.com/ChainSafe/lodestar/issues/8065#issuecomment-3157266196
79
84
  const errorMessageLowercase = errorMessage.toLowerCase();
80
85
  if (errorMessageLowercase.includes("rate limit")) {
81
86
  return {code: RequestErrorCode.RESP_RATE_LIMITED};
82
87
  }
83
88
 
84
- // Grandine may return this without standard RespStatus, see https://github.com/ChainSafe/lodestar/issues/8110
85
- if (errorMessageLowercase.includes("wait ")) {
86
- return {code: RequestErrorCode.RESP_TIMEOUT};
89
+ // Grandine's eth2_libp2p fork uses the old Lighthouse GCRA inbound rate limiter which sends
90
+ // "Wait <Duration>" with an explicit backoff (e.g. "Wait 2.816488536s") using Rust's
91
+ // Debug format for Duration. We only use this as a rate-limit signal; the backoff duration
92
+ // is intentionally not parsed.
93
+ // See https://github.com/ChainSafe/lodestar/issues/8110
94
+ if (errorMessageLowercase.startsWith("wait ")) {
95
+ return {code: RequestErrorCode.RESP_RATE_LIMITED};
87
96
  }
88
97
 
89
98
  switch (status) {