mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-07-09 13:51:34 +00:00
Compare commits
1 Commits
v0.35.8
...
fix/remove
Author | SHA1 | Date | |
---|---|---|---|
c7e923a812 |
@ -415,14 +415,7 @@ const node = await Libp2p.create({
|
|||||||
contentRouting: [delegatedContentRouting],
|
contentRouting: [delegatedContentRouting],
|
||||||
peerRouting: [delegatedPeerRouting],
|
peerRouting: [delegatedPeerRouting],
|
||||||
},
|
},
|
||||||
peerId,
|
peerId
|
||||||
peerRouting: { // Peer routing configuration
|
|
||||||
refreshManager: { // Refresh known and connected closest peers
|
|
||||||
enabled: true, // Should find the closest peers.
|
|
||||||
interval: 6e5, // Interval for getting the new for closest peers of 10min
|
|
||||||
bootDelay: 10e3 // Delay for the initial query for closest peers
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -82,7 +82,6 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@motrix/nat-api": "^0.3.1",
|
"@motrix/nat-api": "^0.3.1",
|
||||||
"@vascosantos/moving-average": "^1.1.0",
|
"@vascosantos/moving-average": "^1.1.0",
|
||||||
"abort-controller": "^3.0.0",
|
|
||||||
"abortable-iterator": "^3.0.0",
|
"abortable-iterator": "^3.0.0",
|
||||||
"aggregate-error": "^3.1.0",
|
"aggregate-error": "^3.1.0",
|
||||||
"any-signal": "^2.1.1",
|
"any-signal": "^2.1.1",
|
||||||
@ -136,7 +135,6 @@
|
|||||||
"@chainsafe/libp2p-noise": "^4.0.0",
|
"@chainsafe/libp2p-noise": "^4.0.0",
|
||||||
"@nodeutils/defaults-deep": "^1.1.0",
|
"@nodeutils/defaults-deep": "^1.1.0",
|
||||||
"@types/es6-promisify": "^6.0.0",
|
"@types/es6-promisify": "^6.0.0",
|
||||||
"@types/node": "^16.0.1",
|
|
||||||
"@types/node-forge": "^0.10.1",
|
"@types/node-forge": "^0.10.1",
|
||||||
"@types/varint": "^6.0.0",
|
"@types/varint": "^6.0.0",
|
||||||
"aegir": "^36.0.0",
|
"aegir": "^36.0.0",
|
||||||
|
@ -49,24 +49,11 @@ const DefaultConfig = {
|
|||||||
persistence: false,
|
persistence: false,
|
||||||
threshold: 5
|
threshold: 5
|
||||||
},
|
},
|
||||||
peerRouting: {
|
|
||||||
refreshManager: {
|
|
||||||
enabled: true,
|
|
||||||
interval: 6e5,
|
|
||||||
bootDelay: 10e3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
config: {
|
config: {
|
||||||
protocolPrefix: 'ipfs',
|
protocolPrefix: 'ipfs',
|
||||||
dht: {
|
dht: {
|
||||||
enabled: false,
|
enabled: false,
|
||||||
kBucketSize: 20,
|
kBucketSize: 20
|
||||||
randomWalk: {
|
|
||||||
enabled: false, // disabled waiting for https://github.com/libp2p/js-libp2p-kad-dht/issues/86
|
|
||||||
queriesPerPeriod: 1,
|
|
||||||
interval: 300e3,
|
|
||||||
timeout: 10e3
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
nat: {
|
nat: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
const errCode = require('err-code')
|
const errCode = require('err-code')
|
||||||
const AbortController = require('abort-controller').default
|
|
||||||
const { anySignal } = require('any-signal')
|
const { anySignal } = require('any-signal')
|
||||||
// @ts-ignore p-fifo does not export types
|
// @ts-ignore p-fifo does not export types
|
||||||
const FIFO = require('p-fifo')
|
const FIFO = require('p-fifo')
|
||||||
|
@ -384,7 +384,6 @@ class Libp2p extends EventEmitter {
|
|||||||
this._isStarted = false
|
this._isStarted = false
|
||||||
|
|
||||||
this.relay && this.relay.stop()
|
this.relay && this.relay.stop()
|
||||||
this.peerRouting.stop()
|
|
||||||
this._autodialler.stop()
|
this._autodialler.stop()
|
||||||
await (this._dht && this._dht.stop())
|
await (this._dht && this._dht.stop())
|
||||||
|
|
||||||
@ -663,8 +662,6 @@ class Libp2p extends EventEmitter {
|
|||||||
|
|
||||||
// Relay
|
// Relay
|
||||||
this.relay && this.relay.start()
|
this.relay && this.relay.start()
|
||||||
|
|
||||||
this.peerRouting.start()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
const debug = require('debug')
|
|
||||||
const log = Object.assign(debug('libp2p:peer-routing'), {
|
|
||||||
error: debug('libp2p:peer-routing:err')
|
|
||||||
})
|
|
||||||
const errCode = require('err-code')
|
const errCode = require('err-code')
|
||||||
const {
|
const {
|
||||||
storeAddresses,
|
storeAddresses,
|
||||||
@ -15,13 +11,7 @@ const { TimeoutController } = require('timeout-abort-controller')
|
|||||||
const merge = require('it-merge')
|
const merge = require('it-merge')
|
||||||
const { pipe } = require('it-pipe')
|
const { pipe } = require('it-pipe')
|
||||||
const first = require('it-first')
|
const first = require('it-first')
|
||||||
const drain = require('it-drain')
|
|
||||||
const filter = require('it-filter')
|
const filter = require('it-filter')
|
||||||
const {
|
|
||||||
setDelayedInterval,
|
|
||||||
clearDelayedInterval
|
|
||||||
// @ts-ignore module with no types
|
|
||||||
} = require('set-delayed-interval')
|
|
||||||
const { DHTPeerRouting } = require('./dht/dht-peer-routing')
|
const { DHTPeerRouting } = require('./dht/dht-peer-routing')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -31,14 +21,7 @@ const { DHTPeerRouting } = require('./dht/dht-peer-routing')
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} RefreshManagerOptions
|
|
||||||
* @property {boolean} [enabled = true] - Whether to enable the Refresh manager
|
|
||||||
* @property {number} [bootDelay = 6e5] - Boot delay to start the Refresh Manager (in ms)
|
|
||||||
* @property {number} [interval = 10e3] - Interval between each Refresh Manager run (in ms)
|
|
||||||
* @property {number} [timeout = 10e3] - How long to let each refresh run (in ms)
|
|
||||||
*
|
|
||||||
* @typedef {Object} PeerRoutingOptions
|
* @typedef {Object} PeerRoutingOptions
|
||||||
* @property {RefreshManagerOptions} [refreshManager]
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class PeerRouting {
|
class PeerRouting {
|
||||||
@ -56,42 +39,6 @@ class PeerRouting {
|
|||||||
if (libp2p._dht && libp2p._config.dht.enabled) {
|
if (libp2p._dht && libp2p._config.dht.enabled) {
|
||||||
this._routers.push(new DHTPeerRouting(libp2p._dht))
|
this._routers.push(new DHTPeerRouting(libp2p._dht))
|
||||||
}
|
}
|
||||||
|
|
||||||
this._refreshManagerOptions = libp2p._options.peerRouting.refreshManager
|
|
||||||
|
|
||||||
this._findClosestPeersTask = this._findClosestPeersTask.bind(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start peer routing service.
|
|
||||||
*/
|
|
||||||
start () {
|
|
||||||
if (!this._routers.length || this._timeoutId || !this._refreshManagerOptions.enabled) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this._timeoutId = setDelayedInterval(
|
|
||||||
this._findClosestPeersTask, this._refreshManagerOptions.interval, this._refreshManagerOptions.bootDelay
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Recurrent task to find closest peers and add their addresses to the Address Book.
|
|
||||||
*/
|
|
||||||
async _findClosestPeersTask () {
|
|
||||||
try {
|
|
||||||
// nb getClosestPeers adds the addresses to the address book
|
|
||||||
await drain(this.getClosestPeers(this._peerId.id, { timeout: this._refreshManagerOptions.timeout || 10e3 }))
|
|
||||||
} catch (/** @type {any} */ err) {
|
|
||||||
log.error(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stop peer routing service.
|
|
||||||
*/
|
|
||||||
stop () {
|
|
||||||
clearDelayedInterval(this._timeoutId)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -5,7 +5,6 @@ const { expect } = require('aegir/utils/chai')
|
|||||||
const sinon = require('sinon')
|
const sinon = require('sinon')
|
||||||
|
|
||||||
const { AbortError } = require('libp2p-interfaces/src/transport/errors')
|
const { AbortError } = require('libp2p-interfaces/src/transport/errors')
|
||||||
const AbortController = require('abort-controller')
|
|
||||||
const AggregateError = require('aggregate-error')
|
const AggregateError = require('aggregate-error')
|
||||||
const pDefer = require('p-defer')
|
const pDefer = require('p-defer')
|
||||||
const delay = require('delay')
|
const delay = require('delay')
|
||||||
|
@ -6,9 +6,7 @@ const nock = require('nock')
|
|||||||
const sinon = require('sinon')
|
const sinon = require('sinon')
|
||||||
const intoStream = require('into-stream')
|
const intoStream = require('into-stream')
|
||||||
|
|
||||||
const delay = require('delay')
|
|
||||||
const pDefer = require('p-defer')
|
const pDefer = require('p-defer')
|
||||||
const pWaitFor = require('p-wait-for')
|
|
||||||
const mergeOptions = require('merge-options')
|
const mergeOptions = require('merge-options')
|
||||||
const drain = require('it-drain')
|
const drain = require('it-drain')
|
||||||
const all = require('it-all')
|
const all = require('it-all')
|
||||||
@ -453,109 +451,4 @@ describe('peer-routing', () => {
|
|||||||
expect(peers).to.be.an('array').with.a.lengthOf(1).that.deep.equals(results)
|
expect(peers).to.be.an('array').with.a.lengthOf(1).that.deep.equals(results)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('peer routing refresh manager service', () => {
|
|
||||||
let node
|
|
||||||
let peerIds
|
|
||||||
|
|
||||||
before(async () => {
|
|
||||||
peerIds = await peerUtils.createPeerId({ number: 2 })
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
sinon.restore()
|
|
||||||
|
|
||||||
return node && node.stop()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should be enabled and start by default', async () => {
|
|
||||||
const results = [
|
|
||||||
{ id: peerIds[0], multiaddrs: [new Multiaddr('/ip4/30.0.0.1/tcp/2000')] },
|
|
||||||
{ id: peerIds[1], multiaddrs: [new Multiaddr('/ip4/32.0.0.1/tcp/2000')] }
|
|
||||||
]
|
|
||||||
|
|
||||||
;[node] = await peerUtils.createPeer({
|
|
||||||
config: mergeOptions(routingOptions, {
|
|
||||||
peerRouting: {
|
|
||||||
refreshManager: {
|
|
||||||
bootDelay: 100
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
started: false
|
|
||||||
})
|
|
||||||
|
|
||||||
sinon.spy(node.peerStore.addressBook, 'add')
|
|
||||||
sinon.stub(node._dht, 'getClosestPeers').callsFake(function * () {
|
|
||||||
yield results[0]
|
|
||||||
yield results[1]
|
|
||||||
})
|
|
||||||
|
|
||||||
await node.start()
|
|
||||||
|
|
||||||
await pWaitFor(() => node._dht.getClosestPeers.callCount === 1)
|
|
||||||
await pWaitFor(() => node.peerStore.addressBook.add.callCount === results.length)
|
|
||||||
|
|
||||||
const call0 = node.peerStore.addressBook.add.getCall(0)
|
|
||||||
expect(call0.args[0].equals(results[0].id))
|
|
||||||
call0.args[1].forEach((m, index) => {
|
|
||||||
expect(m.equals(results[0].multiaddrs[index]))
|
|
||||||
})
|
|
||||||
|
|
||||||
const call1 = node.peerStore.addressBook.add.getCall(1)
|
|
||||||
expect(call1.args[0].equals(results[1].id))
|
|
||||||
call0.args[1].forEach((m, index) => {
|
|
||||||
expect(m.equals(results[1].multiaddrs[index]))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should support being disabled', async () => {
|
|
||||||
[node] = await peerUtils.createPeer({
|
|
||||||
config: mergeOptions(routingOptions, {
|
|
||||||
peerRouting: {
|
|
||||||
refreshManager: {
|
|
||||||
bootDelay: 100,
|
|
||||||
enabled: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
started: false
|
|
||||||
})
|
|
||||||
|
|
||||||
sinon.stub(node._dht, 'getClosestPeers').callsFake(function * () {
|
|
||||||
yield
|
|
||||||
throw new Error('should not be called')
|
|
||||||
})
|
|
||||||
|
|
||||||
await node.start()
|
|
||||||
await delay(100)
|
|
||||||
|
|
||||||
expect(node._dht.getClosestPeers.callCount === 0)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should start and run recurrently on interval', async () => {
|
|
||||||
[node] = await peerUtils.createPeer({
|
|
||||||
config: mergeOptions(routingOptions, {
|
|
||||||
peerRouting: {
|
|
||||||
refreshManager: {
|
|
||||||
interval: 500,
|
|
||||||
bootDelay: 200
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
started: false
|
|
||||||
})
|
|
||||||
|
|
||||||
sinon.stub(node._dht, 'getClosestPeers').callsFake(function * () {
|
|
||||||
yield { id: peerIds[0], multiaddrs: [new Multiaddr('/ip4/30.0.0.1/tcp/2000')] }
|
|
||||||
})
|
|
||||||
|
|
||||||
await node.start()
|
|
||||||
|
|
||||||
await delay(300)
|
|
||||||
expect(node._dht.getClosestPeers.callCount).to.eql(1)
|
|
||||||
await delay(500)
|
|
||||||
expect(node._dht.getClosestPeers.callCount).to.eql(2)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
@ -62,13 +62,6 @@ async function main() {
|
|||||||
contentRouting: [delegatedContentRouting],
|
contentRouting: [delegatedContentRouting],
|
||||||
peerRouting: [delegatedPeerRouting]
|
peerRouting: [delegatedPeerRouting]
|
||||||
},
|
},
|
||||||
peerRouting: {
|
|
||||||
refreshManager: {
|
|
||||||
enabled: true,
|
|
||||||
interval: 1000,
|
|
||||||
bootDelay: 11111
|
|
||||||
}
|
|
||||||
},
|
|
||||||
dialer: {
|
dialer: {
|
||||||
maxParallelDials: 100,
|
maxParallelDials: 100,
|
||||||
maxDialsPerPeer: 4,
|
maxDialsPerPeer: 4,
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
const duplexPair = require('it-pair/duplex')
|
const duplexPair = require('it-pair/duplex')
|
||||||
const abortable = require('abortable-iterator')
|
const abortable = require('abortable-iterator')
|
||||||
const AbortController = require('abort-controller')
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns both sides of a mocked MultiaddrConnection
|
* Returns both sides of a mocked MultiaddrConnection
|
||||||
|
Reference in New Issue
Block a user