Skip to content

Commit f17ecfa

Browse files
dignifiedquiredaviddias
authored andcommitted
feat: factor notifications out
fix: getMany call feat: add id to loggers feat(engine): improve message sending test: skip webworker tests
1 parent 84add4d commit f17ecfa

25 files changed

+529
-318
lines changed

.circleci/config.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
version: 2
2+
jobs:
3+
build:
4+
working_directory: ~/js-ipfs-bitswap
5+
docker:
6+
- image: circleci/node:6-browsers
7+
environment:
8+
CHROME_BIN: "/usr/bin/google-chrome"
9+
steps:
10+
- checkout
11+
- restore_cache:
12+
key: dependency-cache-{{ checksum "package.json" }}
13+
- run:
14+
name: install-deps
15+
command: npm install
16+
- save_cache:
17+
key: dependency-cache-{{ checksum "package.json" }}
18+
paths:
19+
- ./node_modules
20+
- run:
21+
name: lint
22+
command: npm run lint
23+
- run:
24+
name: test:node
25+
command: npm run test:node
26+
- run:
27+
name: test:browser
28+
command: npm run test:browser
29+
- run:
30+
name: coverage
31+
command: npm run coverage

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# While testing new npm
22
package-lock.json
3+
yarn.lock
34

45
# Logs
56
logs

.travis.yml

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1 @@
1-
sudo: false
2-
language: node_js
3-
4-
matrix:
5-
include:
6-
- node_js: 6
7-
env: CXX=g++-4.8
8-
- node_js: 8
9-
env: CXX=g++-4.8
10-
# - node_js: stable
11-
# env: CXX=g++-4.8
12-
13-
script:
14-
- npm run lint
15-
- npm run test
16-
- npm run coverage
17-
- make test
18-
19-
before_script:
20-
- export DISPLAY=:99.0
21-
- sh -e /etc/init.d/xvfb start
22-
23-
after_success:
24-
- npm run coverage-publish
25-
26-
addons:
27-
firefox: 'latest'
28-
apt:
29-
sources:
30-
- ubuntu-toolchain-r-test
31-
packages:
32-
- g++-4.8
1+
NO, JUST NO

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ src
6969
│   └── ledger.js
7070
├── index.js
7171
├── network.js # Handles peerSet and open new conns
72+
├── notifications.js # Handles tracking of incomning blocks and wants/unwants.
7273
├─── want-manager # Keeps track of all blocks the peer (self) wants
7374
│   ├── index.js
7475
│   └── msg-queue.js # Messages to send queue, one per peer

circle.yml

Lines changed: 0 additions & 14 deletions
This file was deleted.

package.json

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,17 @@
88
"./test/utils/create-temp-repo-nodejs.js": "./test/utils/create-temp-repo-browser.js"
99
},
1010
"scripts": {
11-
"test": "aegir-test",
12-
"test:browser": "aegir-test browser",
13-
"test:node": "aegir-test node",
14-
"lint": "aegir-lint",
15-
"release": "aegir-release --docs",
16-
"release-minor": "aegir-release --type minor --docs",
17-
"release-major": "aegir-release --type major --docs",
11+
"test": "aegir test --target node --target browser",
12+
"test:browser": "aegir test --target browser",
13+
"test:node": "aegir test --target node",
14+
"lint": "aegir lint",
15+
"release": "aegir release",
16+
"release-minor": "aegir release --type minor",
17+
"release-major": "aegir release --type major",
1818
"bench": "node benchmarks/index",
19-
"build": "aegir-build",
20-
"coverage": "aegir-coverage",
21-
"coverage-publish": "aegir-coverage publish",
22-
"docs": "aegir-docs"
19+
"build": "aegir build",
20+
"coverage": "aegir coverage -u",
21+
"docs": "aegir docs"
2322
},
2423
"repository": {
2524
"type": "git",
@@ -38,7 +37,7 @@
3837
},
3938
"homepage": "https://github.com/ipfs/js-ipfs-bitswap#readme",
4039
"devDependencies": {
41-
"aegir": "^11.0.2",
40+
"aegir": "ipfs/aegir",
4241
"benchmark": "^2.1.4",
4342
"chai": "^4.1.1",
4443
"dirty-chai": "^2.0.1",

src/decision-engine/index.js

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
'use strict'
22

3-
const debug = require('debug')
43
const each = require('async/each')
54
const eachSeries = require('async/eachSeries')
65
const waterfall = require('async/waterfall')
@@ -14,17 +13,16 @@ const values = require('lodash.values')
1413
const groupBy = require('lodash.groupby')
1514
const pullAllWith = require('lodash.pullallwith')
1615

17-
const log = debug('bitswap:engine')
18-
log.error = debug('bitswap:engine:error')
19-
2016
const Message = require('../types/message')
2117
const Wantlist = require('../types/wantlist')
2218
const Ledger = require('./ledger')
19+
const logger = require('../utils').logger
2320

2421
const MAX_MESSAGE_SIZE = 512 * 1024
2522

2623
class DecisionEngine {
27-
constructor (blockstore, network) {
24+
constructor (peerId, blockstore, network) {
25+
this._log = logger(peerId, 'engine')
2826
this.blockstore = blockstore
2927
this.network = network
3028

@@ -38,28 +36,38 @@ class DecisionEngine {
3836
this._outbox = debounce(this._processTasks.bind(this), 100)
3937
}
4038

41-
_sendBlocks (env, cb) {
39+
_sendBlocks (peer, blocks, cb) {
4240
// split into messges of max 512 * 1024 bytes
43-
const blocks = env.blocks
4441
const total = blocks.reduce((acc, b) => {
4542
return acc + b.data.byteLength
4643
}, 0)
4744

4845
if (total < MAX_MESSAGE_SIZE) {
49-
return this._sendSafeBlocks(env.peer, blocks, cb)
46+
return this._sendSafeBlocks(peer, blocks, cb)
5047
}
5148

5249
let size = 0
5350
let batch = []
51+
let outstanding = blocks.length
5452

5553
eachSeries(blocks, (b, cb) => {
54+
outstanding--
5655
batch.push(b)
5756
size += b.data.byteLength
5857

59-
if (size >= MAX_MESSAGE_SIZE) {
58+
if (size >= MAX_MESSAGE_SIZE ||
59+
// need to ensure the last remaining items get sent
60+
outstanding === 0) {
6061
const nextBatch = batch.slice()
6162
batch = []
62-
this._sendSafeBlocks(env.peer, nextBatch, cb)
63+
this._sendSafeBlocks(peer, nextBatch, (err) => {
64+
if (err) {
65+
this._log('sendblock error: %s', err.message)
66+
}
67+
// not returning the error, so we send as much as we can
68+
// as otherwise `eachSeries` would cancel
69+
cb()
70+
})
6371
} else {
6472
cb()
6573
}
@@ -68,18 +76,9 @@ class DecisionEngine {
6876

6977
_sendSafeBlocks (peer, blocks, cb) {
7078
const msg = new Message(false)
79+
blocks.forEach((b) => msg.addBlock(b))
7180

72-
blocks.forEach((b) => {
73-
msg.addBlock(b)
74-
})
75-
76-
// console.log('sending %s blocks', msg.blocks.size)
77-
this.network.sendMessage(peer, msg, (err) => {
78-
if (err) {
79-
log('sendblock error: %s', err.message)
80-
}
81-
cb()
82-
})
81+
this.network.sendMessage(peer, msg, cb)
8382
}
8483

8584
_processTasks () {
@@ -105,23 +104,22 @@ class DecisionEngine {
105104
return find(blocks, (b) => b.cid.equals(cid))
106105
})
107106

108-
this._sendBlocks({
109-
peer: peer,
110-
blocks: blockList
111-
}, (err) => {
107+
this._sendBlocks(peer, blockList, (err) => {
112108
if (err) {
113-
log.error('failed to send', err)
109+
// `_sendBlocks` actually doesn't return any errors
110+
this._log.error('should never happen: ', err)
111+
} else {
112+
blockList.forEach((block) => this.messageSent(peer, block))
114113
}
115-
blockList.forEach((block) => {
116-
this.messageSent(peer, block)
117-
})
114+
118115
cb()
119116
})
120117
})
121118
], (err) => {
122119
this._tasks = []
120+
123121
if (err) {
124-
log.error(err)
122+
this._log.error(err)
125123
}
126124
})
127125
}
@@ -208,7 +206,7 @@ class DecisionEngine {
208206
// If we already have the block, serve it
209207
this.blockstore.has(entry.cid, (err, exists) => {
210208
if (err) {
211-
log.error('failed existence check')
209+
this._log.error('failed existence check')
212210
} else if (exists) {
213211
this._tasks.push({
214212
entry: entry.entry,
@@ -226,7 +224,7 @@ class DecisionEngine {
226224
_processBlocks (blocks, ledger, callback) {
227225
const cids = []
228226
blocks.forEach((b, cidStr) => {
229-
log('got block (%s bytes)', b.data.length)
227+
this._log('got block (%s bytes)', b.data.length)
230228
ledger.receivedBytes(b.data.length)
231229
cids.push(b.cid)
232230
})

0 commit comments

Comments
 (0)