Skip to content
This repository was archived by the owner on Mar 23, 2023. It is now read-only.

Commit 845316d

Browse files
authored
fix: sharding and query for windows interop (#6)
* fix: sharding and query for windows interop * chore: update CI and deps * another circle CI * Update package.json * chore(lint): new Buffer is deprecated * chore(lint): new Buffer is deprecated, forget one file
1 parent 2f42acc commit 845316d

11 files changed

+98
-75
lines changed

.appveyor.yml

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
environment:
2+
matrix:
3+
- nodejs_version: "6"
4+
- nodejs_version: "8"
5+
6+
# cache:
7+
# - node_modules
8+
9+
platform:
10+
- x64
11+
12+
install:
13+
- ps: Install-Product node $env:nodejs_version $env:platform
14+
- npm install
15+
16+
test_script:
17+
- node --version
18+
- npm --version
19+
- npm test
20+
21+
build: off
22+
23+
version: "{build}"

.flowconfig

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
.*/radium/.*
33
.*/standard-changelog/.*
44
.*/conventional-changelog-core/.*
5+
.*/node_modules/.*
56

67
[include]
78

.travis.yml

+10-8
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,26 @@ language: node_js
33

44
matrix:
55
include:
6-
- node_js: 4
7-
env: CXX=g++-4.8
86
- node_js: 6
9-
env:
10-
- SAUCE=true
11-
- CXX=g++-4.8
12-
- node_js: stable
137
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
1412

1513
script:
1614
- npm run lint
17-
- npm run flow
18-
- npm test
15+
- npm run test
16+
- npm run coverage
17+
- make test
1918

2019
before_script:
2120
- export DISPLAY=:99.0
2221
- sh -e /etc/init.d/xvfb start
2322

23+
after_success:
24+
- npm run coverage-publish
25+
2426
addons:
2527
firefox: 'latest'
2628
apt:

circle.yml

+9-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@ machine:
22
node:
33
version: stable
44

5+
test:
6+
post:
7+
- npm run coverage -- --upload
8+
59
dependencies:
610
pre:
711
- google-chrome --version
8-
- wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
9-
- sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
12+
- curl -L -o google-chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
13+
- sudo dpkg -i google-chrome.deb || true
1014
- sudo apt-get update
11-
- sudo apt-get --only-upgrade install google-chrome-stable
15+
- sudo apt-get install -f
16+
- sudo apt-get install --only-upgrade lsb-base
17+
- sudo dpkg -i google-chrome.deb
1218
- google-chrome --version

package.json

+18-18
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@
44
"description": "Wrapper implmentation for interface-datastore",
55
"main": "src/index.js",
66
"scripts": {
7-
"lint": "aegir-lint",
8-
"build": "aegir-build",
9-
"test": "aegir-test",
7+
"lint": "aegir lint",
8+
"build": "aegir build",
9+
"test": "aegir test",
1010
"flow": "flow",
11-
"test:node": "aegir-test --env node",
12-
"test:browser": "aegir-test --env browser",
13-
"release": "aegir-release --docs",
14-
"release-minor": "aegir-release --type minor --docs",
15-
"release-major": "aegir-release --type major --docs",
16-
"coverage": "aegir-coverage",
17-
"coverage-publish": "aegir-coverage publish",
18-
"docs": "aegir-docs"
11+
"test:node": "aegir test --target node",
12+
"test:browser": "aegir test --target browser",
13+
"release": "aegir release --docs",
14+
"release-minor": "aegir release --type minor --docs",
15+
"release-major": "aegir release --type major --docs",
16+
"coverage": "aegir coverage",
17+
"coverage-publish": "aegir coverage --provider coveralls",
18+
"docs": "aegir docs"
1919
},
2020
"repository": {
2121
"type": "git",
@@ -34,24 +34,24 @@
3434
},
3535
"homepage": "https://github.com/ipfs/js-datastore-core#readme",
3636
"devDependencies": {
37-
"aegir": "^11.0.2",
38-
"chai": "^4.1.0",
37+
"aegir": "^12.1.3",
38+
"chai": "^4.1.2",
3939
"dirty-chai": "^2.0.1",
40-
"flow-bin": "^0.51.0"
40+
"flow-bin": "^0.58.0"
4141
},
4242
"dependencies": {
4343
"async": "^2.5.0",
44-
"interface-datastore": "^0.3.0",
44+
"interface-datastore": "~0.4.0",
4545
"left-pad": "^1.1.3",
4646
"pull-many": "^1.0.8",
47-
"pull-stream": "^3.6.0"
47+
"pull-stream": "^3.6.1"
4848
},
4949
"engines": {
50-
"node": ">=4.0.0",
50+
"node": ">=6.0.0",
5151
"npm": ">=3.0.0"
5252
},
5353
"contributors": [
5454
"David Dias <[email protected]>",
5555
"Friedel Ziegelmayer <[email protected]>"
5656
]
57-
}
57+
}

src/sharding.js

+22-30
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
const waterfall = require('async/waterfall')
55
const parallel = require('async/parallel')
6-
const pull = require('pull-stream')
76
const Key = require('interface-datastore').Key
87

98
const sh = require('./shard')
@@ -86,8 +85,8 @@ class ShardingDatastore {
8685
if (!exists) {
8786
const put = typeof store.putRaw === 'function' ? store.putRaw.bind(store) : store.put.bind(store)
8887
return parallel([
89-
(cb) => put(shardKey, new Buffer(shard.toString() + '\n'), cb),
90-
(cb) => put(shardReadmeKey, new Buffer(sh.readme), cb)
88+
(cb) => put(shardKey, Buffer.from(shard.toString() + '\n'), cb),
89+
(cb) => put(shardReadmeKey, Buffer.from(sh.readme), cb)
9190
], err => callback(err))
9291
}
9392

@@ -129,51 +128,44 @@ class ShardingDatastore {
129128

130129
query (q /* : Query<Buffer> */) /* : QueryResult<Buffer> */ {
131130
const tq/* : Query<Buffer> */ = {
132-
keysOnly: q.keysOnly
131+
keysOnly: q.keysOnly,
132+
offset: q.offset,
133+
limit: q.limit,
134+
filters: [
135+
(e, cb) => cb(null, e.key.toString() !== shardKey.toString()),
136+
(e, cb) => cb(null, e.key.toString() !== shardReadmeKey.toString())
137+
]
133138
}
134139

135140
if (q.prefix != null) {
136-
// TODO: transform
137-
tq.prefix = q.prefix
141+
tq.filters.push((e, cb) => {
142+
cb(null, this._invertKey(e.key).toString().startsWith(q.prefix))
143+
})
138144
}
139145

140146
if (q.filters != null) {
141-
tq.filters = q.filters.map((f) => (e, cb) => {
147+
const filters = q.filters.map((f) => (e, cb) => {
142148
f(Object.assign({}, e, {
143149
key: this._invertKey(e.key)
144150
}), cb)
145151
})
152+
tq.filters = tq.filters.concat(filters)
146153
}
147154

148155
if (q.orders != null) {
149156
tq.orders = q.orders.map((o) => (res, cb) => {
150-
const m = res.map((e) => {
151-
return Object.assign({}, e, {
152-
key: this._invertKey(e.key)
153-
})
157+
res.forEach((e) => { e.key = this._invertKey(e.key) })
158+
o(res, (err, ordered) => {
159+
if (err) {
160+
return cb(err)
161+
}
162+
ordered.forEach((e) => { e.key = this._convertKey(e.key) })
163+
cb(null, ordered)
154164
})
155-
o(m, cb)
156165
})
157166
}
158167

159-
if (q.offset != null) {
160-
tq.offset = q.offset + 2
161-
}
162-
163-
if (q.limit != null) {
164-
tq.limit = q.limit + 2
165-
}
166-
167-
return pull(
168-
this.child.query(tq),
169-
pull.filter((e) => {
170-
if (e.key.toString() === shardKey.toString() ||
171-
e.key.toString() === shardReadmeKey.toString()) {
172-
return false
173-
}
174-
return true
175-
})
176-
)
168+
return this.child.query(tq)
177169
}
178170

179171
close (callback /* : Callback<void> */) /* : void */ {

test/keytransform.spec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ describe('KeyTransformDatastore', () => {
4444

4545
series([
4646
(cb) => each(keys, (k, cb) => {
47-
kStore.put(k, new Buffer(k.toString()), cb)
47+
kStore.put(k, Buffer.from(k.toString()), cb)
4848
}, cb),
4949
(cb) => parallel([
5050
(cb) => map(keys, (k, cb) => {

test/mount.spec.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe('MountStore', () => {
1818
it('put - no mount', (done) => {
1919
const m = new MountStore([])
2020

21-
m.put(new Key('hello'), new Buffer('foo'), (err) => {
21+
m.put(new Key('hello'), Buffer.from('foo'), (err) => {
2222
expect(err).to.be.an('Error')
2323
done()
2424
})
@@ -30,7 +30,7 @@ describe('MountStore', () => {
3030
prefix: new Key('cool')
3131
}])
3232

33-
m.put(new Key('/fail/hello'), new Buffer('foo'), (err) => {
33+
m.put(new Key('/fail/hello'), Buffer.from('foo'), (err) => {
3434
expect(err).to.be.an('Error')
3535
done()
3636
})
@@ -43,7 +43,7 @@ describe('MountStore', () => {
4343
prefix: new Key('cool')
4444
}])
4545

46-
const val = new Buffer('hello')
46+
const val = Buffer.from('hello')
4747
series([
4848
(cb) => m.put(new Key('/cool/hello'), val, cb),
4949
(cb) => mds.get(new Key('/hello'), (err, res) => {
@@ -61,7 +61,7 @@ describe('MountStore', () => {
6161
prefix: new Key('cool')
6262
}])
6363

64-
const val = new Buffer('hello')
64+
const val = Buffer.from('hello')
6565
series([
6666
(cb) => mds.put(new Key('/hello'), val, cb),
6767
(cb) => m.get(new Key('/cool/hello'), (err, res) => {
@@ -79,7 +79,7 @@ describe('MountStore', () => {
7979
prefix: new Key('cool')
8080
}])
8181

82-
const val = new Buffer('hello')
82+
const val = Buffer.from('hello')
8383
series([
8484
(cb) => mds.put(new Key('/hello'), val, cb),
8585
(cb) => m.has(new Key('/cool/hello'), (err, exists) => {
@@ -97,7 +97,7 @@ describe('MountStore', () => {
9797
prefix: new Key('cool')
9898
}])
9999

100-
const val = new Buffer('hello')
100+
const val = Buffer.from('hello')
101101
series([
102102
(cb) => m.put(new Key('/cool/hello'), val, cb),
103103
(cb) => m.delete(new Key('/cool/hello'), cb),
@@ -121,7 +121,7 @@ describe('MountStore', () => {
121121
prefix: new Key('cool')
122122
}])
123123

124-
const val = new Buffer('hello')
124+
const val = Buffer.from('hello')
125125
series([
126126
(cb) => m.put(new Key('/cool/hello'), val, cb),
127127
(cb) => {

test/namespace.spec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ describe('KeyTransformDatastore', () => {
3636

3737
series([
3838
(cb) => each(keys, (k, cb) => {
39-
store.put(k, new Buffer(k.toString()), cb)
39+
store.put(k, Buffer.from(k.toString()), cb)
4040
}, cb),
4141
(cb) => parallel([
4242
(cb) => map(keys, (k, cb) => {

test/sharding.spec.js

+3-4
Original file line numberDiff line numberDiff line change
@@ -74,18 +74,17 @@ describe('ShardingStore', () => {
7474
const store = ss
7575

7676
series([
77-
(cb) => store.put(new Key('hello'), new Buffer('test'), cb),
77+
(cb) => store.put(new Key('hello'), Buffer.from('test'), cb),
7878
(cb) => ms.get(new Key('ll').child(new Key('hello')), (err, res) => {
7979
expect(err).to.not.exist()
80-
expect(res).to.eql(new Buffer('test'))
80+
expect(res).to.eql(Buffer.from('test'))
8181
cb()
8282
})
8383
], done)
8484
})
8585
})
8686

87-
// TODO: fix query prefix and orders
88-
describe.skip('interface-datastore', () => {
87+
describe('interface-datastore', () => {
8988
require('interface-datastore/src/tests')({
9089
setup (callback) {
9190
const shard = new sh.NextToLast(2)

test/tiered.spec.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ describe('Tiered', () => {
2626

2727
it('put', (done) => {
2828
const k = new Key('hello')
29-
const v = new Buffer('world')
29+
const v = Buffer.from('world')
3030
series([
3131
(cb) => store.put(k, v, cb),
3232
(cb) => parallel([
@@ -44,7 +44,7 @@ describe('Tiered', () => {
4444

4545
it('get and has, where available', (done) => {
4646
const k = new Key('hello')
47-
const v = new Buffer('world')
47+
const v = Buffer.from('world')
4848

4949
series([
5050
(cb) => ms[1].put(k, v, cb),
@@ -63,7 +63,7 @@ describe('Tiered', () => {
6363

6464
it('has and delete', (done) => {
6565
const k = new Key('hello')
66-
const v = new Buffer('world')
66+
const v = Buffer.from('world')
6767
series([
6868
(cb) => store.put(k, v, cb),
6969
(cb) => parallel([

0 commit comments

Comments
 (0)