Skip to content

Commit a8f59c4

Browse files
dignifiedquiredaviddias
authored andcommitted
fix: use open method and fork of level-js (#128)
* fix: use open method and fork of level-js
1 parent fc2f466 commit a8f59c4

File tree

4 files changed

+63
-16
lines changed

4 files changed

+63
-16
lines changed

package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"npm": ">=3.0.0"
4040
},
4141
"devDependencies": {
42-
"aegir": "^11.0.0",
42+
"aegir": "^11.0.1",
4343
"chai": "^3.5.0",
4444
"dirty-chai": "^1.2.2",
4545
"lodash": "^4.17.4",
@@ -53,13 +53,13 @@
5353
"async": "^2.1.5",
5454
"base32.js": "^0.1.0",
5555
"cids": "^0.4.2",
56-
"datastore-core": "^0.1.0",
57-
"datastore-fs": "^0.1.1",
58-
"datastore-level": "^0.1.0",
56+
"datastore-core": "^0.2.0",
57+
"datastore-fs": "^0.2.0",
58+
"datastore-level": "^0.3.0",
5959
"debug": "^2.6.3",
60-
"interface-datastore": "^0.1.1",
60+
"interface-datastore": "^0.2.0",
6161
"ipfs-block": "~0.6.0",
62-
"level-js": "^2.2.4",
62+
"level-js": "timkuijsten/level.js#idbunwrapper",
6363
"leveldown": "^1.6.0",
6464
"lock-me": "^1.0.2",
6565
"multiaddr": "^2.2.2",
@@ -81,4 +81,4 @@
8181
"nginnever <[email protected]>",
8282
"npmcdn-to-unpkg-bot <[email protected]>"
8383
]
84-
}
84+
}

src/index.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ class IpfsRepo {
5454
lock: 'fs'
5555
}, options)
5656
this._fsOptions = Object.assign({}, options.fsOptions)
57-
5857
const FsStore = this.options.fs
5958
this._fsStore = new FsStore(this.path, Object.assign({}, this._fsOptions, {
6059
extension: ''
@@ -81,7 +80,14 @@ class IpfsRepo {
8180
*/
8281
init (config, callback) {
8382
log('initializing at: %s', this.path)
83+
8484
series([
85+
(cb) => this._fsStore.open((err) => {
86+
if (err && err.message === 'Already open') {
87+
return cb()
88+
}
89+
cb(err)
90+
}),
8591
(cb) => this.config.set(config, cb),
8692
(cb) => this.version.set(repoVersion, cb)
8793
], callback)
@@ -102,6 +108,12 @@ class IpfsRepo {
102108

103109
// check if the repo is already initialized
104110
waterfall([
111+
(cb) => this._fsStore.open((err) => {
112+
if (err && err.message === 'Already open') {
113+
return cb()
114+
}
115+
cb(err)
116+
}),
105117
(cb) => this._isInitialized(cb),
106118
(cb) => this._locker.lock(this.path, cb),
107119
(lck, cb) => {
@@ -155,10 +167,12 @@ class IpfsRepo {
155167
* @returns {void}
156168
*/
157169
_isInitialized (callback) {
170+
log('init check')
158171
parallel([
159172
(cb) => this.config.exists(cb),
160173
(cb) => this.version.check(repoVersion, cb)
161174
], (err, res) => {
175+
log('init', err, res)
162176
if (err) {
163177
return callback(err)
164178
}
@@ -192,10 +206,15 @@ class IpfsRepo {
192206
(cb) => this.store.close(cb),
193207
(cb) => this._fsStore.close(cb),
194208
(cb) => {
209+
log('unlocking')
195210
this.closed = true
196211
this.lockfile.close(cb)
212+
},
213+
(cb) => {
214+
this.lockfile = null
215+
cb()
197216
}
198-
], callback)
217+
], (err) => callback(err))
199218
}
200219

201220
/**

test/blockstore-test.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ module.exports = (repo) => {
4343
], done)
4444
})
4545

46+
it('empty value', (done) => {
47+
const d = new Buffer(0)
48+
multihashing(d, 'sha2-256', (err, multihash) => {
49+
expect(err).to.not.exist()
50+
const empty = new Block(d, new CID(multihash))
51+
repo.blockstore.put(empty, done)
52+
})
53+
})
54+
4655
it('massive multiwrite', (done) => {
4756
waterfall([
4857
(cb) => map(_.range(100), (i, cb) => {

test/repo-test.js

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const chai = require('chai')
55
chai.use(require('dirty-chai'))
66
const expect = chai.expect
77
const series = require('async/series')
8+
const waterfall = require('async/waterfall')
89

910
const Repo = require('../src')
1011

@@ -61,14 +62,32 @@ module.exports = (repo) => {
6162
})
6263

6364
it('set version', (done) => {
64-
repo.version.set(9000, (err) => {
65-
expect(err).to.not.exist()
66-
repo.version.get((err, version) => {
67-
expect(err).to.not.exist()
65+
waterfall([
66+
(cb) => repo.version.set(9000, cb),
67+
(cb) => repo.version.get(cb),
68+
(version, cb) => {
6869
expect(version).to.equal(9000)
69-
done()
70-
})
71-
})
70+
cb()
71+
},
72+
(cb) => repo.version.set(5, cb)
73+
], done)
74+
})
75+
})
76+
77+
describe('lifecycle', () => {
78+
it('close and open', (done) => {
79+
waterfall([
80+
(cb) => repo.close(cb),
81+
(cb) => repo.open(cb),
82+
(cb) => repo.close(cb),
83+
(cb) => repo.open(cb),
84+
(cb) => repo.version.get(cb),
85+
(version, cb) => {
86+
console.log(version)
87+
expect(version).to.exist()
88+
cb()
89+
}
90+
], done)
7291
})
7392
})
7493
})

0 commit comments

Comments
 (0)