Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.

Commit 9ced27c

Browse files
committed
fix: ETOOMANYSTREAMS 😢
1 parent b3b512d commit 9ced27c

File tree

2 files changed

+37
-11
lines changed

2 files changed

+37
-11
lines changed

src/core/components/ping.js

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ const promisify = require('promisify-es6')
44
const OFFLINE_ERROR = require('../utils').OFFLINE_ERROR
55
const PeerId = require('peer-id')
66
const PeerInfo = require('peer-info')
7-
const Readable = require('readable-stream').Readable
7+
const pull = require('pull-stream/pull')
8+
const take = require('pull-stream/throughs/take')
9+
const Pushable = require('pull-pushable')
10+
const ndjson = require('pull-ndjson')
811

912
function getPacket (msg) {
1013
// Default msg
1114
const basePacket = {Success: false, Time: 0, Text: ''}
12-
// ndjson
13-
return `${JSON.stringify(Object.assign({}, basePacket, msg))}\n`
15+
return Object.assign({}, basePacket, msg)
1416
}
1517

1618
module.exports = function ping (self) {
@@ -19,10 +21,15 @@ module.exports = function ping (self) {
1921
return cb(new Error(OFFLINE_ERROR))
2022
}
2123

22-
const source = new Readable({
23-
read: function () {}
24+
const source = Pushable(function (err) {
25+
console.log('stream closed!', err)
2426
})
2527

28+
const response = pull(
29+
source,
30+
ndjson.serialize()
31+
)
32+
2633
let peer
2734
try {
2835
peer = self._libp2pNode.peerBook.get(peerId)
@@ -34,21 +41,33 @@ module.exports = function ping (self) {
3441
}
3542

3643
self._libp2pNode.ping(peer, (err, p) => {
44+
if (err) {
45+
console.log('ERROR', err)
46+
return source.abort(err)
47+
}
3748
let packetCount = 0
3849
let totalTime = 0
3950
source.push(getPacket({Success: true, Text: `PING ${peerId}`}))
4051
p.on('ping', (time) => {
52+
console.log('ON PING')
4153
source.push(getPacket({ Success: true, Time: time }))
4254
totalTime += time
4355
packetCount++
56+
console.log(packetCount, count)
4457
if (packetCount >= count) {
4558
const average = totalTime/count
4659
p.stop()
4760
source.push(getPacket({ Success: false, Text: `Average latency: ${average}ms`}))
48-
source.push(null)
61+
source.end()
4962
}
5063
})
64+
console.log('Setup handler')
65+
p.on('error', (err) => {
66+
console.log('ERROR BATATA', err)
67+
source.abort(err)
68+
})
5169
})
52-
cb(null, source)
70+
71+
cb(null, response)
5372
})
5473
}

src/http/api/resources/ping.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
const Joi = require('joi')
44
const boom = require('boom')
55
const toStream = require('pull-stream-to-stream')
6+
const PassThrough = require('readable-stream').PassThrough
7+
const pump = require('pump')
68

79
exports = module.exports
810

@@ -24,13 +26,18 @@ exports.get = {
2426
// Default count to 10
2527
const count = request.query.n || request.query.count || 10
2628

27-
ipfs.ping(peerId, count, (err, sourceStream) => {
29+
ipfs.ping(peerId, count, (err, pullStream) => {
2830
if (err) {
2931
return reply(boom.badRequest(err))
3032
}
31-
console.log(sourceStream)
32-
33-
return reply(sourceStream).type('application/json').header('x-chunked-output', '1')
33+
// Streams from pull-stream-to-stream don't seem to be compatible
34+
// with the stream2 readable interface
35+
// see: https://github.com/hapijs/hapi/blob/c23070a3de1b328876d5e64e679a147fafb04b38/lib/response.js#L533
36+
// and: https://github.com/pull-stream/pull-stream-to-stream/blob/e436acee18b71af8e71d1b5d32eee642351517c7/index.js#L28
37+
const responseStream = toStream.source(pullStream)
38+
const stream2 = new PassThrough()
39+
pump(responseStream, stream2)
40+
return reply(stream2).type('application/json').header('x-chunked-output', '1')
3441
})
3542
}
3643
}

0 commit comments

Comments
 (0)