@lodestar/reqresp 1.34.0-dev.aac4d9d864 → 1.34.0-dev.ac704f28d2
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/ReqResp.d.ts +3 -2
- package/lib/ReqResp.js +23 -2
- package/lib/ReqResp.js.map +1 -1
- package/lib/metrics.d.ts +9 -8
- package/lib/metrics.js +4 -0
- package/lib/metrics.js.map +1 -1
- package/lib/rate_limiter/selfRateLimiter.d.ts +43 -0
- package/lib/rate_limiter/selfRateLimiter.js +87 -0
- package/lib/rate_limiter/selfRateLimiter.js.map +1 -0
- package/lib/request/errors.d.ts +4 -0
- package/lib/request/errors.js +2 -0
- package/lib/request/errors.js.map +1 -1
- package/package.json +7 -7
package/lib/ReqResp.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PeerId } from "@libp2p/interface";
|
|
2
|
-
import { Logger,
|
|
2
|
+
import { Logger, MetricsRegisterExtra } from "@lodestar/utils";
|
|
3
3
|
import type { Libp2p } from "libp2p";
|
|
4
4
|
import { Metrics } from "./metrics.js";
|
|
5
5
|
import { RequestError, SendRequestOpts } from "./request/index.js";
|
|
@@ -9,7 +9,7 @@ export declare const DEFAULT_PROTOCOL_PREFIX = "/eth2/beacon_chain/req";
|
|
|
9
9
|
export interface ReqRespProtocolModules {
|
|
10
10
|
libp2p: Libp2p;
|
|
11
11
|
logger: Logger;
|
|
12
|
-
metricsRegister:
|
|
12
|
+
metricsRegister: MetricsRegisterExtra | null;
|
|
13
13
|
}
|
|
14
14
|
export interface ReqRespOpts extends SendRequestOpts, ReqRespRateLimiterOpts {
|
|
15
15
|
/** Custom prefix for `/ProtocolPrefix/MessageName/SchemaVersion/Encoding` */
|
|
@@ -28,6 +28,7 @@ export declare class ReqResp {
|
|
|
28
28
|
protected readonly logger: Logger;
|
|
29
29
|
protected readonly metrics: Metrics | null;
|
|
30
30
|
private readonly rateLimiter;
|
|
31
|
+
private readonly selfRateLimiter;
|
|
31
32
|
private controller;
|
|
32
33
|
/** Tracks request and responses in a sequential counter */
|
|
33
34
|
private reqCount;
|
package/lib/ReqResp.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { setMaxListeners } from "node:events";
|
|
2
2
|
import { getMetrics } from "./metrics.js";
|
|
3
3
|
import { ReqRespRateLimiter } from "./rate_limiter/ReqRespRateLimiter.js";
|
|
4
|
+
import { SelfRateLimiter } from "./rate_limiter/selfRateLimiter.js";
|
|
4
5
|
import { RequestError, RequestErrorCode, sendRequest } from "./request/index.js";
|
|
5
6
|
import { handleRequest } from "./response/index.js";
|
|
6
7
|
import { formatProtocolID } from "./utils/protocolId.js";
|
|
@@ -25,6 +26,10 @@ export class ReqResp {
|
|
|
25
26
|
this.metrics = modules.metricsRegister ? getMetrics(modules.metricsRegister) : null;
|
|
26
27
|
this.protocolPrefix = opts.protocolPrefix ?? DEFAULT_PROTOCOL_PREFIX;
|
|
27
28
|
this.rateLimiter = new ReqRespRateLimiter(opts);
|
|
29
|
+
this.selfRateLimiter = new SelfRateLimiter();
|
|
30
|
+
this.metrics?.selfRateLimiterPeerCount.addCollect(() => {
|
|
31
|
+
this.metrics?.selfRateLimiterPeerCount.set(this.selfRateLimiter.getPeerCount());
|
|
32
|
+
});
|
|
28
33
|
}
|
|
29
34
|
/**
|
|
30
35
|
* Register protocol which will be used only to dial to other peers
|
|
@@ -77,32 +82,45 @@ export class ReqResp {
|
|
|
77
82
|
async start() {
|
|
78
83
|
this.controller = new AbortController();
|
|
79
84
|
this.rateLimiter.start();
|
|
85
|
+
this.selfRateLimiter.start();
|
|
80
86
|
// We set infinity to prevent MaxListenersExceededWarning which get logged when listeners > 10
|
|
81
87
|
// Since it is perfectly fine to have listeners > 10
|
|
82
88
|
setMaxListeners(Infinity, this.controller.signal);
|
|
83
89
|
}
|
|
84
90
|
async stop() {
|
|
85
91
|
this.rateLimiter.stop();
|
|
92
|
+
this.selfRateLimiter.stop();
|
|
86
93
|
this.controller.abort();
|
|
87
94
|
}
|
|
88
95
|
// Helper to reduce code duplication
|
|
89
96
|
async *sendRequest(peerId, method, versions, encoding, body) {
|
|
90
|
-
const
|
|
97
|
+
const peerIdStr = peerId.toString();
|
|
98
|
+
const peerClient = this.opts.getPeerLogMetadata?.(peerIdStr);
|
|
91
99
|
this.metrics?.outgoingRequests.inc({ method });
|
|
92
100
|
const timer = this.metrics?.outgoingRequestRoundtripTime.startTimer({ method });
|
|
93
101
|
const protocols = [];
|
|
94
102
|
const protocolIDs = [];
|
|
103
|
+
// don't increase this.reqCount until we know request will be sent
|
|
104
|
+
const requestId = this.reqCount + 1;
|
|
95
105
|
for (const version of versions) {
|
|
96
106
|
const protocolID = this.formatProtocolID({ method, version, encoding });
|
|
97
107
|
const protocol = this.registeredProtocols.get(protocolID);
|
|
98
108
|
if (!protocol) {
|
|
99
109
|
throw Error(`Request to send to protocol ${protocolID} but it has not been declared`);
|
|
100
110
|
}
|
|
111
|
+
if (!this.selfRateLimiter.allows(peerIdStr, protocolID, requestId)) {
|
|
112
|
+
// we technically don't send request in this case but would be nice just to track this in the same `outgoingErrorReasons` metric
|
|
113
|
+
this.metrics?.outgoingErrorReasons.inc({ reason: RequestErrorCode.REQUEST_SELF_RATE_LIMITED });
|
|
114
|
+
throw new RequestError({ code: RequestErrorCode.REQUEST_SELF_RATE_LIMITED });
|
|
115
|
+
// don't call this.onOutgoingRequestError() to penalize peer
|
|
116
|
+
}
|
|
101
117
|
protocols.push(protocol);
|
|
102
118
|
protocolIDs.push(protocolID);
|
|
103
119
|
}
|
|
120
|
+
// requestId is now the same to reqCount
|
|
121
|
+
this.reqCount++;
|
|
104
122
|
try {
|
|
105
|
-
yield* sendRequest({ logger: this.logger, libp2p: this.libp2p, metrics: this.metrics, peerClient }, peerId, protocols, protocolIDs, body, this.controller.signal, this.opts,
|
|
123
|
+
yield* sendRequest({ logger: this.logger, libp2p: this.libp2p, metrics: this.metrics, peerClient }, peerId, protocols, protocolIDs, body, this.controller.signal, this.opts, requestId);
|
|
106
124
|
}
|
|
107
125
|
catch (e) {
|
|
108
126
|
this.metrics?.outgoingErrors.inc({ method });
|
|
@@ -116,6 +134,9 @@ export class ReqResp {
|
|
|
116
134
|
throw e;
|
|
117
135
|
}
|
|
118
136
|
finally {
|
|
137
|
+
for (const protocolID of protocolIDs) {
|
|
138
|
+
this.selfRateLimiter.requestCompleted(peerIdStr, protocolID, requestId);
|
|
139
|
+
}
|
|
119
140
|
timer?.();
|
|
120
141
|
}
|
|
121
142
|
}
|
package/lib/ReqResp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReqResp.js","sourceRoot":"","sources":["../src/ReqResp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAI5C,OAAO,EAAU,UAAU,EAAC,MAAM,cAAc,CAAC;AACjD,OAAO,EAAC,kBAAkB,EAAC,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAmB,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAUlD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAIvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;AAchE;;;;;GAKG;AACH,MAAM,OAAO,OAAO;
|
|
1
|
+
{"version":3,"file":"ReqResp.js","sourceRoot":"","sources":["../src/ReqResp.ts"],"names":[],"mappings":"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"}
|
package/lib/metrics.d.ts
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MetricsRegisterExtra } from "@lodestar/utils";
|
|
2
2
|
import { RequestErrorCode } from "./request/errors.js";
|
|
3
3
|
export type Metrics = ReturnType<typeof getMetrics>;
|
|
4
4
|
/**
|
|
5
5
|
* A collection of metrics used throughout the Gossipsub behaviour.
|
|
6
6
|
*/
|
|
7
|
-
export declare function getMetrics(register:
|
|
8
|
-
outgoingRequests: import("@lodestar/utils").
|
|
7
|
+
export declare function getMetrics(register: MetricsRegisterExtra): {
|
|
8
|
+
outgoingRequests: import("@lodestar/utils").GaugeExtra<{
|
|
9
9
|
method: string;
|
|
10
10
|
}>;
|
|
11
11
|
outgoingRequestRoundtripTime: import("@lodestar/utils").Histogram<{
|
|
12
12
|
method: string;
|
|
13
13
|
}>;
|
|
14
|
-
outgoingErrors: import("@lodestar/utils").
|
|
14
|
+
outgoingErrors: import("@lodestar/utils").GaugeExtra<{
|
|
15
15
|
method: string;
|
|
16
16
|
}>;
|
|
17
|
-
outgoingErrorReasons: import("@lodestar/utils").
|
|
17
|
+
outgoingErrorReasons: import("@lodestar/utils").GaugeExtra<{
|
|
18
18
|
reason: RequestErrorCode;
|
|
19
19
|
}>;
|
|
20
|
-
incomingRequests: import("@lodestar/utils").
|
|
20
|
+
incomingRequests: import("@lodestar/utils").GaugeExtra<{
|
|
21
21
|
method: string;
|
|
22
22
|
}>;
|
|
23
23
|
incomingRequestHandlerTime: import("@lodestar/utils").Histogram<{
|
|
24
24
|
method: string;
|
|
25
25
|
}>;
|
|
26
|
-
incomingErrors: import("@lodestar/utils").
|
|
26
|
+
incomingErrors: import("@lodestar/utils").GaugeExtra<{
|
|
27
27
|
method: string;
|
|
28
28
|
}>;
|
|
29
29
|
outgoingResponseTTFB: import("@lodestar/utils").Histogram<{
|
|
@@ -32,6 +32,7 @@ export declare function getMetrics(register: MetricsRegister): {
|
|
|
32
32
|
incomingResponseTTFB: import("@lodestar/utils").Histogram<{
|
|
33
33
|
method: string;
|
|
34
34
|
}>;
|
|
35
|
-
dialErrors: import("@lodestar/utils").
|
|
35
|
+
dialErrors: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
36
|
+
selfRateLimiterPeerCount: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
36
37
|
};
|
|
37
38
|
//# sourceMappingURL=metrics.d.ts.map
|
package/lib/metrics.js
CHANGED
|
@@ -61,6 +61,10 @@ export function getMetrics(register) {
|
|
|
61
61
|
name: "beacon_reqresp_dial_errors_total",
|
|
62
62
|
help: "Count total dial errors",
|
|
63
63
|
}),
|
|
64
|
+
selfRateLimiterPeerCount: register.gauge({
|
|
65
|
+
name: "beacon_reqresp_self_rate_limiter_peer_count",
|
|
66
|
+
help: "Count of peers tracked by the self rate limiter",
|
|
67
|
+
}),
|
|
64
68
|
};
|
|
65
69
|
}
|
|
66
70
|
//# sourceMappingURL=metrics.js.map
|
package/lib/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAA8B;IACvD,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,4BAA4B,EAAE,QAAQ,CAAC,SAAS,CAAmB;YACjE,IAAI,EAAE,wDAAwD;YAC9D,IAAI,EAAE,gDAAgD;YACtD,UAAU,EAAE,CAAC,QAAQ,CAAC;YACtB,kCAAkC;YAClC,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,0BAA0B,EAAE,QAAQ,CAAC,SAAS,CAAmB;YAC/D,IAAI,EAAE,sDAAsD;YAC5D,IAAI,EAAE,uDAAuD;YAC7D,UAAU,EAAE,CAAC,QAAQ,CAAC;YACtB,kCAAkC;YAClC,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,oBAAoB,EAAE,QAAQ,CAAC,SAAS,CAAmB;YACzD,IAAI,EAAE,+CAA+C;YACrD,IAAI,EAAE,kDAAkD;YACxD,UAAU,EAAE,CAAC,QAAQ,CAAC;YACtB,iCAAiC;YACjC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;SACrB,CAAC;QACF,oBAAoB,EAAE,QAAQ,CAAC,SAAS,CAAmB;YACzD,IAAI,EAAE,+CAA+C;YACrD,IAAI,EAAE,kDAAkD;YACxD,UAAU,EAAE,CAAC,QAAQ,CAAC;YACtB,iCAAiC;YACjC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;SACrB,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;AACJ,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Logger } from "@lodestar/utils";
|
|
2
|
+
type PeerIdStr = string;
|
|
3
|
+
type ProtocolID = string;
|
|
4
|
+
/** Sometimes a peer request comes AFTER libp2p disconnect event, check for such peers every 2 minutes */
|
|
5
|
+
export declare const CHECK_DISCONNECTED_PEERS_INTERVAL_MS: number;
|
|
6
|
+
/**
|
|
7
|
+
* Timeout to consider a request is no longer in progress
|
|
8
|
+
* this is to cover the case where `requestCompleted()` is not called due to unexpected errors
|
|
9
|
+
* for example https://github.com/ChainSafe/lodestar/issues/8256
|
|
10
|
+
**/
|
|
11
|
+
export declare const REQUEST_TIMEOUT_MS: number;
|
|
12
|
+
type RequestId = number;
|
|
13
|
+
/**
|
|
14
|
+
* Simple rate limiter that allows a maximum of 2 concurrent requests per protocol per peer.
|
|
15
|
+
* The consumer should either prevent requests from being sent when the limit is reached or handle the case when the request is not allowed.
|
|
16
|
+
*/
|
|
17
|
+
export declare class SelfRateLimiter {
|
|
18
|
+
private readonly logger?;
|
|
19
|
+
private readonly rateLimitersPerPeer;
|
|
20
|
+
/**
|
|
21
|
+
* It's not convenient to handle a peer disconnected event so we track the last seen requests by peer.
|
|
22
|
+
* This is the same design to `ReqRespRateLimiter`.
|
|
23
|
+
**/
|
|
24
|
+
private lastSeenRequestsByPeer;
|
|
25
|
+
/** Interval to check lastSeenMessagesByPeer */
|
|
26
|
+
private cleanupInterval;
|
|
27
|
+
constructor(logger?: Logger | undefined);
|
|
28
|
+
start(): void;
|
|
29
|
+
stop(): void;
|
|
30
|
+
/**
|
|
31
|
+
* called before we send a request to a peer.
|
|
32
|
+
*/
|
|
33
|
+
allows(peerId: PeerIdStr, protocolId: ProtocolID, requestId: RequestId): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* called when a request to a peer is completed, regardless of success or failure.
|
|
36
|
+
* This should NOT be called when the request was not allowed
|
|
37
|
+
*/
|
|
38
|
+
requestCompleted(peerId: PeerIdStr, protocolId: ProtocolID, requestId: RequestId): void;
|
|
39
|
+
getPeerCount(): number;
|
|
40
|
+
private checkDisconnectedPeers;
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=selfRateLimiter.d.ts.map
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { MapDef } from "@lodestar/utils";
|
|
2
|
+
/** https://github.com/ethereum/consensus-specs/blob/master/specs/phase0/p2p-interface.md#constants */
|
|
3
|
+
const MAX_CONCURRENT_REQUESTS = 2;
|
|
4
|
+
/** Sometimes a peer request comes AFTER libp2p disconnect event, check for such peers every 2 minutes */
|
|
5
|
+
export const CHECK_DISCONNECTED_PEERS_INTERVAL_MS = 2 * 60 * 1000;
|
|
6
|
+
/** Given PING_INTERVAL constants of 15s/20s, we consider a peer is disconnected if there is no request in 1 minute */
|
|
7
|
+
const DISCONNECTED_TIMEOUT_MS = 60 * 1000;
|
|
8
|
+
/**
|
|
9
|
+
* Timeout to consider a request is no longer in progress
|
|
10
|
+
* this is to cover the case where `requestCompleted()` is not called due to unexpected errors
|
|
11
|
+
* for example https://github.com/ChainSafe/lodestar/issues/8256
|
|
12
|
+
**/
|
|
13
|
+
export const REQUEST_TIMEOUT_MS = 30 * 1000;
|
|
14
|
+
/**
|
|
15
|
+
* Simple rate limiter that allows a maximum of 2 concurrent requests per protocol per peer.
|
|
16
|
+
* The consumer should either prevent requests from being sent when the limit is reached or handle the case when the request is not allowed.
|
|
17
|
+
*/
|
|
18
|
+
export class SelfRateLimiter {
|
|
19
|
+
constructor(logger) {
|
|
20
|
+
this.logger = logger;
|
|
21
|
+
/** Interval to check lastSeenMessagesByPeer */
|
|
22
|
+
this.cleanupInterval = undefined;
|
|
23
|
+
this.rateLimitersPerPeer = new MapDef(() => new MapDef(() => new Map()));
|
|
24
|
+
this.lastSeenRequestsByPeer = new Map();
|
|
25
|
+
}
|
|
26
|
+
start() {
|
|
27
|
+
this.cleanupInterval = setInterval(this.checkDisconnectedPeers.bind(this), CHECK_DISCONNECTED_PEERS_INTERVAL_MS);
|
|
28
|
+
}
|
|
29
|
+
stop() {
|
|
30
|
+
if (this.cleanupInterval !== undefined) {
|
|
31
|
+
clearInterval(this.cleanupInterval);
|
|
32
|
+
this.cleanupInterval = undefined;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* called before we send a request to a peer.
|
|
37
|
+
*/
|
|
38
|
+
allows(peerId, protocolId, requestId) {
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
const peerRateLimiter = this.rateLimitersPerPeer.getOrDefault(peerId);
|
|
41
|
+
const trackedRequests = peerRateLimiter.getOrDefault(protocolId);
|
|
42
|
+
this.lastSeenRequestsByPeer.set(peerId, now);
|
|
43
|
+
let inProgressRequests = 0;
|
|
44
|
+
for (const [trackedRequestId, trackedRequestTimeMs] of trackedRequests.entries()) {
|
|
45
|
+
if (trackedRequestTimeMs + REQUEST_TIMEOUT_MS <= now) {
|
|
46
|
+
// request timed out, remove it
|
|
47
|
+
trackedRequests.delete(trackedRequestId);
|
|
48
|
+
this.logger?.debug("SelfRateLimiter: request timed out, removing it", {
|
|
49
|
+
requestId: trackedRequestId,
|
|
50
|
+
requestTime: trackedRequestTimeMs,
|
|
51
|
+
peerId,
|
|
52
|
+
protocolId,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
inProgressRequests++;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (inProgressRequests >= MAX_CONCURRENT_REQUESTS) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
trackedRequests.set(requestId, now);
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* called when a request to a peer is completed, regardless of success or failure.
|
|
67
|
+
* This should NOT be called when the request was not allowed
|
|
68
|
+
*/
|
|
69
|
+
requestCompleted(peerId, protocolId, requestId) {
|
|
70
|
+
const peerRateLimiter = this.rateLimitersPerPeer.getOrDefault(peerId);
|
|
71
|
+
const trackedRequests = peerRateLimiter.getOrDefault(protocolId);
|
|
72
|
+
trackedRequests.delete(requestId);
|
|
73
|
+
}
|
|
74
|
+
getPeerCount() {
|
|
75
|
+
return this.rateLimitersPerPeer.size;
|
|
76
|
+
}
|
|
77
|
+
checkDisconnectedPeers() {
|
|
78
|
+
const now = Date.now();
|
|
79
|
+
for (const [peerIdStr, lastSeenTime] of this.lastSeenRequestsByPeer.entries()) {
|
|
80
|
+
if (now - lastSeenTime >= DISCONNECTED_TIMEOUT_MS) {
|
|
81
|
+
this.rateLimitersPerPeer.delete(peerIdStr);
|
|
82
|
+
this.lastSeenRequestsByPeer.delete(peerIdStr);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=selfRateLimiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selfRateLimiter.js","sourceRoot":"","sources":["../../src/rate_limiter/selfRateLimiter.ts"],"names":[],"mappings":"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"}
|
package/lib/request/errors.d.ts
CHANGED
|
@@ -29,6 +29,8 @@ export declare enum RequestErrorCode {
|
|
|
29
29
|
RESP_TIMEOUT = "REQUEST_ERROR_RESP_TIMEOUT",
|
|
30
30
|
/** Request rate limited */
|
|
31
31
|
REQUEST_RATE_LIMITED = "REQUEST_ERROR_RATE_LIMITED",
|
|
32
|
+
/** Request self rate limited */
|
|
33
|
+
REQUEST_SELF_RATE_LIMITED = "REQUEST_ERROR_SELF_RATE_LIMITED",
|
|
32
34
|
/** Response rate limited */
|
|
33
35
|
RESP_RATE_LIMITED = "RESPONSE_ERROR_RATE_LIMITED",
|
|
34
36
|
/** For malformed SSZ (metadata) responses */
|
|
@@ -68,6 +70,8 @@ type RequestErrorType = {
|
|
|
68
70
|
code: RequestErrorCode.RESP_TIMEOUT;
|
|
69
71
|
} | {
|
|
70
72
|
code: RequestErrorCode.REQUEST_RATE_LIMITED;
|
|
73
|
+
} | {
|
|
74
|
+
code: RequestErrorCode.REQUEST_SELF_RATE_LIMITED;
|
|
71
75
|
} | {
|
|
72
76
|
code: RequestErrorCode.RESP_RATE_LIMITED;
|
|
73
77
|
} | {
|
package/lib/request/errors.js
CHANGED
|
@@ -30,6 +30,8 @@ export var RequestErrorCode;
|
|
|
30
30
|
RequestErrorCode["RESP_TIMEOUT"] = "REQUEST_ERROR_RESP_TIMEOUT";
|
|
31
31
|
/** Request rate limited */
|
|
32
32
|
RequestErrorCode["REQUEST_RATE_LIMITED"] = "REQUEST_ERROR_RATE_LIMITED";
|
|
33
|
+
/** Request self rate limited */
|
|
34
|
+
RequestErrorCode["REQUEST_SELF_RATE_LIMITED"] = "REQUEST_ERROR_SELF_RATE_LIMITED";
|
|
33
35
|
/** Response rate limited */
|
|
34
36
|
RequestErrorCode["RESP_RATE_LIMITED"] = "RESPONSE_ERROR_RATE_LIMITED";
|
|
35
37
|
/** For malformed SSZ (metadata) responses */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/request/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAsB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAC,UAAU,EAAyB,MAAM,iBAAiB,CAAC;AAGnE,MAAM,CAAN,IAAY,
|
|
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.34.0-dev.
|
|
14
|
+
"version": "1.34.0-dev.ac704f28d2",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -54,9 +54,9 @@
|
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@chainsafe/fast-crc32c": "^4.2.0",
|
|
56
56
|
"@libp2p/interface": "^2.7.0",
|
|
57
|
-
"@lodestar/config": "1.34.0-dev.
|
|
58
|
-
"@lodestar/params": "1.34.0-dev.
|
|
59
|
-
"@lodestar/utils": "1.34.0-dev.
|
|
57
|
+
"@lodestar/config": "1.34.0-dev.ac704f28d2",
|
|
58
|
+
"@lodestar/params": "1.34.0-dev.ac704f28d2",
|
|
59
|
+
"@lodestar/utils": "1.34.0-dev.ac704f28d2",
|
|
60
60
|
"it-all": "^3.0.4",
|
|
61
61
|
"it-pipe": "^3.0.1",
|
|
62
62
|
"snappy": "^7.2.2",
|
|
@@ -65,8 +65,8 @@
|
|
|
65
65
|
"uint8arraylist": "^2.4.7"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@lodestar/logger": "1.34.0-dev.
|
|
69
|
-
"@lodestar/types": "1.34.0-dev.
|
|
68
|
+
"@lodestar/logger": "1.34.0-dev.ac704f28d2",
|
|
69
|
+
"@lodestar/types": "1.34.0-dev.ac704f28d2",
|
|
70
70
|
"libp2p": "2.9.0"
|
|
71
71
|
},
|
|
72
72
|
"peerDependencies": {
|
|
@@ -80,5 +80,5 @@
|
|
|
80
80
|
"reqresp",
|
|
81
81
|
"blockchain"
|
|
82
82
|
],
|
|
83
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "4fe729a4b5a8dc1a4fb07a7f959ee1755d6cd9b8"
|
|
84
84
|
}
|