Skip to content

Commit 7a3549a

Browse files
ScottyPoiryanio
andauthored
devp2p: solve "DPT discovers nodes when open_slots = 0" (#1816)
* devp2p: remove OpenSlots check in favor of queue length cap * devp2p/rlpx: remove extraneous `peer:` label Co-authored-by: Ryan Ghods <ryan@ryanio.com> * devp2p/rlpx: add helper function `_getOpenQueueSlots()` Co-authored-by: Ryan Ghods <ryan@ryanio.com>
1 parent 053a3a1 commit 7a3549a

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

packages/devp2p/src/rlpx/rlpx.ts

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,11 @@ export class RLPx extends EventEmitter {
8282
if (this._peersLRU.has(peer.id!.toString('hex'))) return
8383
this._peersLRU.set(peer.id!.toString('hex'), true)
8484

85-
if (this._getOpenSlots() > 0) return this._connectToPeer(peer)
86-
this._peersQueue.push({ peer: peer, ts: 0 }) // save to queue
85+
if (this._getOpenSlots() > 0) {
86+
return this._connectToPeer(peer)
87+
} else if (this._getOpenQueueSlots() > 0) {
88+
this._peersQueue.push({ peer, ts: 0 }) // save to queue
89+
}
8790
})
8891
this._dpt.on('peer:removed', (peer: PeerInfo) => {
8992
// remove from queue
@@ -177,6 +180,10 @@ export class RLPx extends EventEmitter {
177180
return Math.max(this._maxPeers - this._peers.size, 0)
178181
}
179182

183+
_getOpenQueueSlots() {
184+
return this._maxPeers * 2 - this._peersQueue.length
185+
}
186+
180187
_connectToPeer(peer: PeerInfo) {
181188
this.connect(peer).catch((err) => {
182189
if (this._dpt === null) return
@@ -244,14 +251,16 @@ export class RLPx extends EventEmitter {
244251

245252
if (!disconnectWe && reason === DISCONNECT_REASONS.TOO_MANY_PEERS) {
246253
// hack
247-
this._peersQueue.push({
248-
peer: {
249-
id: peer.getId()!,
250-
address: peer._socket.remoteAddress,
251-
tcpPort: peer._socket.remotePort,
252-
},
253-
ts: (Date.now() + ms('5m')) as number,
254-
})
254+
if (this._getOpenQueueSlots() > 0) {
255+
this._peersQueue.push({
256+
peer: {
257+
id: peer.getId()!,
258+
address: peer._socket.remoteAddress,
259+
tcpPort: peer._socket.remotePort,
260+
},
261+
ts: (Date.now() + ms('5m')) as number,
262+
})
263+
}
255264
}
256265

257266
const id = peer.getId()

0 commit comments

Comments
 (0)