fix: remove unneeded peerbook puts (#348)

This commit is contained in:
Jacob Heun 2019-04-05 14:27:35 +02:00 committed by GitHub
parent 5204da73f7
commit e5f19e860b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 101 additions and 48 deletions

View File

@ -79,7 +79,7 @@ const after = (done) => {
} }
module.exports = { module.exports = {
bundlesize: { maxSize: '215kB' }, bundlesize: { maxSize: '217kB' },
hooks: { hooks: {
pre: before, pre: before,
post: after post: after

View File

@ -45,7 +45,7 @@
"libp2p-connection-manager": "~0.0.2", "libp2p-connection-manager": "~0.0.2",
"libp2p-floodsub": "~0.15.8", "libp2p-floodsub": "~0.15.8",
"libp2p-ping": "~0.8.5", "libp2p-ping": "~0.8.5",
"libp2p-switch": "~0.42.1", "libp2p-switch": "~0.42.7",
"libp2p-websockets": "~0.12.2", "libp2p-websockets": "~0.12.2",
"mafmt": "^6.0.7", "mafmt": "^6.0.7",
"multiaddr": "^6.0.6", "multiaddr": "^6.0.6",

View File

@ -78,7 +78,6 @@ class Node extends EventEmitter {
// reuse this muxed connection // reuse this muxed connection
this._switch.on('peer-mux-established', (peerInfo) => { this._switch.on('peer-mux-established', (peerInfo) => {
this.emit('peer:connect', peerInfo) this.emit('peer:connect', peerInfo)
this.peerBook.put(peerInfo)
}) })
this._switch.on('peer-mux-closed', (peerInfo) => { this._switch.on('peer-mux-closed', (peerInfo) => {
@ -244,11 +243,7 @@ class Node extends EventEmitter {
this._getPeerInfo(peer, (err, peerInfo) => { this._getPeerInfo(peer, (err, peerInfo) => {
if (err) { return callback(err) } if (err) { return callback(err) }
this._switch.dial(peerInfo, protocol, (err, conn) => { this._switch.dial(peerInfo, protocol, callback)
if (err) { return callback(err) }
this.peerBook.put(peerInfo)
callback(null, conn)
})
}) })
} }
@ -274,12 +269,7 @@ class Node extends EventEmitter {
this._getPeerInfo(peer, (err, peerInfo) => { this._getPeerInfo(peer, (err, peerInfo) => {
if (err) { return callback(err) } if (err) { return callback(err) }
this._switch.dialFSM(peerInfo, protocol, (err, connFSM) => { this._switch.dialFSM(peerInfo, protocol, callback)
if (!err) {
this.peerBook.put(peerInfo)
}
callback(err, connFSM)
})
}) })
} }

View File

@ -114,10 +114,9 @@ describe('circuit relay', () => {
nodeWS2 = node nodeWS2 = node
cb() cb()
}), }),
// set up node with TCP and listening on relay1 // set up node with TCP
(cb) => setupNode([ (cb) => setupNode([
'/ip4/0.0.0.0/tcp/0', '/ip4/0.0.0.0/tcp/0'
`/p2p/${relayNode1.peerInfo.id.toB58String()}/p2p-circuit`
], { ], {
config: { config: {
relay: { relay: {
@ -128,10 +127,9 @@ describe('circuit relay', () => {
nodeTCP1 = node nodeTCP1 = node
cb() cb()
}), }),
// set up node with TCP and listening on relay2 over TCP transport // set up node with TCP
(cb) => setupNode([ (cb) => setupNode([
'/ip4/0.0.0.0/tcp/0', '/ip4/0.0.0.0/tcp/0'
`/ip4/0.0.0.0/tcp/0/p2p/${relayNode2.peerInfo.id.toB58String()}/p2p-circuit`
], { ], {
config: { config: {
relay: { relay: {

View File

@ -9,15 +9,13 @@ const signalling = require('libp2p-webrtc-star/src/sig-server')
const parallel = require('async/parallel') const parallel = require('async/parallel')
const crypto = require('crypto') const crypto = require('crypto')
const PeerId = require('peer-id')
const PeerInfo = require('peer-info')
const createNode = require('./utils/create-node') const createNode = require('./utils/create-node')
const echo = require('./utils/echo') const echo = require('./utils/echo')
describe('peer discovery', () => { describe('peer discovery', () => {
let nodeA let nodeA
let nodeB let nodeB
let nodeC
let port = 24642 let port = 24642
let ss let ss
@ -49,6 +47,15 @@ describe('peer discovery', () => {
nodeB = node nodeB = node
node.handle('/echo/1.0.0', echo) node.handle('/echo/1.0.0', echo)
node.start(cb) node.start(cb)
}),
(cb) => createNode([
'/ip4/0.0.0.0/tcp/0',
`/ip4/127.0.0.1/tcp/${port}/ws/p2p-webrtc-star`
], options, (err, node) => {
expect(err).to.not.exist()
nodeC = node
node.handle('/echo/1.0.0', echo)
node.start(cb)
}) })
], done) ], done)
}) })
@ -57,6 +64,7 @@ describe('peer discovery', () => {
parallel([ parallel([
(cb) => nodeA.stop(cb), (cb) => nodeA.stop(cb),
(cb) => nodeB.stop(cb), (cb) => nodeB.stop(cb),
(cb) => nodeC.stop(cb),
(cb) => ss.stop(cb) (cb) => ss.stop(cb)
], done) ], done)
}) })
@ -250,6 +258,7 @@ describe('peer discovery', () => {
peerDiscovery: { peerDiscovery: {
mdns: { mdns: {
enabled: true, enabled: true,
interval: 1e3, // discover quickly
// use a random tag to prevent CI collision // use a random tag to prevent CI collision
serviceTag: crypto.randomBytes(10).toString('hex') serviceTag: crypto.randomBytes(10).toString('hex')
} }
@ -257,13 +266,23 @@ describe('peer discovery', () => {
} }
}) })
it('find a peer', function (done) { it('find peers', function (done) {
this.timeout(15 * 1000) let expectedPeers = new Set([
nodeB.peerInfo.id.toB58String(),
nodeC.peerInfo.id.toB58String()
])
nodeA.once('peer:discovery', (peerInfo) => { function finish () {
expect(nodeB.peerInfo.id.toB58String()) nodeA.removeAllListeners('peer:discovery')
.to.eql(peerInfo.id.toB58String()) expect(expectedPeers.size).to.eql(0)
done() done()
}
nodeA.on('peer:discovery', (peerInfo) => {
expectedPeers.delete(peerInfo.id.toB58String())
if (expectedPeers.size === 0) {
finish()
}
}) })
}) })
}) })
@ -283,12 +302,24 @@ describe('peer discovery', () => {
} }
}) })
it('find a peer', function (done) { it('find peers', function (done) {
this.timeout(15 * 1000) this.timeout(20e3)
nodeA.once('peer:discovery', (peerInfo) => { let expectedPeers = new Set([
expect(nodeB.peerInfo.id.toB58String()) nodeB.peerInfo.id.toB58String(),
.to.eql(peerInfo.id.toB58String()) nodeC.peerInfo.id.toB58String()
])
function finish () {
nodeA.removeAllListeners('peer:discovery')
expect(expectedPeers.size).to.eql(0)
done() done()
}
nodeA.on('peer:discovery', (peerInfo) => {
expectedPeers.delete(peerInfo.id.toB58String())
if (expectedPeers.size === 0) {
finish()
}
}) })
}) })
}) })
@ -302,6 +333,7 @@ describe('peer discovery', () => {
peerDiscovery: { peerDiscovery: {
mdns: { mdns: {
enabled: true, enabled: true,
interval: 1e3, // discovery quickly
// use a random tag to prevent CI collision // use a random tag to prevent CI collision
serviceTag: crypto.randomBytes(10).toString('hex') serviceTag: crypto.randomBytes(10).toString('hex')
}, },
@ -312,12 +344,23 @@ describe('peer discovery', () => {
} }
}) })
it('find a peer', function (done) { it('find peers', function (done) {
this.timeout(15 * 1000) let expectedPeers = new Set([
nodeA.once('peer:discovery', (peerInfo) => { nodeB.peerInfo.id.toB58String(),
expect(nodeB.peerInfo.id.toB58String()) nodeC.peerInfo.id.toB58String()
.to.eql(peerInfo.id.toB58String()) ])
function finish () {
nodeA.removeAllListeners('peer:discovery')
expect(expectedPeers.size).to.eql(0)
done() done()
}
nodeA.on('peer:discovery', (peerInfo) => {
expectedPeers.delete(peerInfo.id.toB58String())
if (expectedPeers.size === 0) {
finish()
}
}) })
}) })
}) })
@ -332,24 +375,46 @@ describe('peer discovery', () => {
webRTCStar: { webRTCStar: {
enabled: false enabled: false
} }
},
dht: {
enabled: true,
kBucketSize: 20,
randomWalk: {
enabled: true,
queriesPerPeriod: 1,
interval: 1000, // start the query sooner
timeout: 3000
}
} }
} }
}) })
it('find a peer', function (done) { it('find peers through the dht', function (done) {
this.timeout(15 * 1000) let expectedPeers = new Set([
nodeB.peerInfo.id.toB58String(),
nodeC.peerInfo.id.toB58String()
])
nodeA.once('peer:discovery', (peerInfo) => { function finish () {
expect(nodeB.peerInfo.id.toB58String()) nodeA.removeAllListeners('peer:discovery')
.to.eql(peerInfo.id.toB58String()) expect(expectedPeers.size).to.eql(0)
done() done()
}
nodeA.on('peer:discovery', (peerInfo) => {
expectedPeers.delete(peerInfo.id.toB58String())
if (expectedPeers.size === 0) {
finish()
}
}) })
// connect two dhts // Topology:
const publicPeerId = new PeerId(nodeB._dht.peerInfo.id.id, null, nodeB._dht.peerInfo.id.pubKey) // A -> B
const target = new PeerInfo(publicPeerId) // C -> B
target.multiaddrs = nodeB._dht.peerInfo.multiaddrs nodeA.dial(nodeB.peerInfo, (err) => {
nodeA._dht.switch.dial(target, (err) => { expect(err).to.not.exist()
})
nodeC.dial(nodeB.peerInfo, (err) => {
expect(err).to.not.exist() expect(err).to.not.exist()
}) })
}) })