From 9ed67e0695f8618a529b0df23fd1d91c42f6b900 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Thu, 25 Aug 2016 18:32:21 -0700 Subject: [PATCH] pool: repurpose regular peers. --- lib/net/pool.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/net/pool.js b/lib/net/pool.js index 0b122895..60c0aaf1 100644 --- a/lib/net/pool.js +++ b/lib/net/pool.js @@ -602,7 +602,7 @@ Pool.prototype.stopInterval = function stopInterval() { Pool.prototype.addLoader = function addLoader() { var self = this; - var peer; + var peer, host; if (!this.loaded) return; @@ -612,8 +612,20 @@ Pool.prototype.addLoader = function addLoader() { return; } + host = this.getLoaderHost(); + peer = this.peers.get(host); + + if (peer) { + this.peers.repurpose(peer); + this.logger.info('Repurposed loader peer (%s).', peer.hostname); + utils.nextTick(function() { + self.emit('loader', peer); + }); + return; + } + peer = this.createPeer({ - host: this.getLoaderHost(), + host: host, type: bcoin.peer.types.LOADER }); @@ -1930,6 +1942,15 @@ PeerList.prototype.remove = function remove(peer) { } }; +PeerList.prototype.repurpose = function repurpose(peer) { + assert(peer.type === bcoin.peer.types.REGULAR); + peer.type = bcoin.peer.types.LOADER; + utils.binaryRemove(this.pending, peer, compare); + utils.binaryRemove(this.regular, peer, compare); + assert(!this.peer.load); + this.peers.load = peer; +}; + PeerList.prototype.isFull = function isFull() { return this.regular.length + this.pending.length >= this.pool.maxPeers - 1; };