From 94583c35509c064b62ae3f73013b2ae72574755a Mon Sep 17 00:00:00 2001 From: Friedel Ziegelmayer Date: Wed, 22 Mar 2017 23:51:04 +0100 Subject: [PATCH 1/5] fix: use open method and fork of level-js --- package.json | 4 ++-- src/index.js | 23 +++++++++++++++++++++-- test/repo-test.js | 33 ++++++++++++++++++++++++++------- 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index c7b7f25a..12a01f73 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "debug": "^2.6.3", "interface-datastore": "^0.1.1", "ipfs-block": "~0.6.0", - "level-js": "^2.2.4", + "level-js": "timkuijsten/level.js#idbunwrapper", "leveldown": "^1.6.0", "lock-me": "^1.0.2", "multiaddr": "^2.2.2", @@ -81,4 +81,4 @@ "nginnever ", "npmcdn-to-unpkg-bot " ] -} \ No newline at end of file +} diff --git a/src/index.js b/src/index.js index 334a58f3..26d62e7e 100644 --- a/src/index.js +++ b/src/index.js @@ -54,7 +54,6 @@ class IpfsRepo { lock: 'fs' }, options) this._fsOptions = Object.assign({}, options.fsOptions) - const FsStore = this.options.fs this._fsStore = new FsStore(this.path, Object.assign({}, this._fsOptions, { extension: '' @@ -81,7 +80,14 @@ class IpfsRepo { */ init (config, callback) { log('initializing at: %s', this.path) + series([ + (cb) => this._fsStore.open((err) => { + if (err && err.message === 'Already open') { + return cb() + } + cb(err) + }), (cb) => this.config.set(config, cb), (cb) => this.version.set(repoVersion, cb) ], callback) @@ -102,6 +108,12 @@ class IpfsRepo { // check if the repo is already initialized waterfall([ + (cb) => this._fsStore.open((err) => { + if (err && err.message === 'Already open') { + return cb() + } + cb(err) + }), (cb) => this._isInitialized(cb), (cb) => this._locker.lock(this.path, cb), (lck, cb) => { @@ -155,10 +167,12 @@ class IpfsRepo { * @returns {void} */ _isInitialized (callback) { + log('init check') parallel([ (cb) => this.config.exists(cb), (cb) => this.version.check(repoVersion, cb) ], (err, res) => { + log('init', err, res) if (err) { return callback(err) } @@ -192,10 +206,15 @@ class IpfsRepo { (cb) => this.store.close(cb), (cb) => this._fsStore.close(cb), (cb) => { + log('unlocking') this.closed = true this.lockfile.close(cb) + }, + (cb) => { + this.lockfile = null + cb() } - ], callback) + ], (err) => callback(err)) } /** diff --git a/test/repo-test.js b/test/repo-test.js index 4d48c016..d0340959 100644 --- a/test/repo-test.js +++ b/test/repo-test.js @@ -5,6 +5,7 @@ const chai = require('chai') chai.use(require('dirty-chai')) const expect = chai.expect const series = require('async/series') +const waterfall = require('async/waterfall') const Repo = require('../src') @@ -61,14 +62,32 @@ module.exports = (repo) => { }) it('set version', (done) => { - repo.version.set(9000, (err) => { - expect(err).to.not.exist() - repo.version.get((err, version) => { - expect(err).to.not.exist() + waterfall([ + (cb) => repo.version.set(9000, cb), + (cb) => repo.version.get(cb), + (version, cb) => { expect(version).to.equal(9000) - done() - }) - }) + cb() + }, + (cb) => repo.version.set(5, cb) + ], done) + }) + }) + + describe('lifecycle', () => { + it('close and open', (done) => { + waterfall([ + (cb) => repo.close(cb), + (cb) => repo.open(cb), + (cb) => repo.close(cb), + (cb) => repo.open(cb), + (cb) => repo.version.get(cb), + (version, cb) => { + console.log(version) + expect(version).to.exist() + cb() + } + ], done) }) }) }) From 19b7037fa6a4bf94cd73c483412eeb8854e0880f Mon Sep 17 00:00:00 2001 From: Friedel Ziegelmayer Date: Wed, 22 Mar 2017 23:59:49 +0100 Subject: [PATCH 2/5] test: add empty value test --- test/blockstore-test.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/blockstore-test.js b/test/blockstore-test.js index 4449bed4..5bddc617 100644 --- a/test/blockstore-test.js +++ b/test/blockstore-test.js @@ -43,6 +43,15 @@ module.exports = (repo) => { ], done) }) + it('empty value', (done) => { + const d = new Buffer(0) + multihashing(d, 'sha2-256', (err, multihash) => { + expect(err).to.not.exist() + const empty = new Block(d, new CID(multihash)) + repo.blockstore.put(empty, done) + }) + }) + it('massive multiwrite', (done) => { waterfall([ (cb) => map(_.range(100), (i, cb) => { From 4ee6e8761212b544015c9250a2ada146160c542f Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 23 Mar 2017 00:18:36 +0000 Subject: [PATCH 3/5] chore: update deps --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 12a01f73..901dd95b 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "npm": ">=3.0.0" }, "devDependencies": { - "aegir": "^11.0.0", + "aegir": "^11.0.1", "chai": "^3.5.0", "dirty-chai": "^1.2.2", "lodash": "^4.17.4", @@ -53,11 +53,11 @@ "async": "^2.1.5", "base32.js": "^0.1.0", "cids": "^0.4.2", - "datastore-core": "^0.1.0", - "datastore-fs": "^0.1.1", - "datastore-level": "^0.1.0", + "datastore-core": "^0.2.0", + "datastore-fs": "^0.2.0", + "datastore-level": "^0.3.0", "debug": "^2.6.3", - "interface-datastore": "^0.1.1", + "interface-datastore": "^0.2.0", "ipfs-block": "~0.6.0", "level-js": "timkuijsten/level.js#idbunwrapper", "leveldown": "^1.6.0", From 14e5c5810034634d451fac6dcbdbf19f288ca340 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 23 Mar 2017 00:19:07 +0000 Subject: [PATCH 4/5] chore: cr --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 26d62e7e..5a537102 100644 --- a/src/index.js +++ b/src/index.js @@ -214,7 +214,7 @@ class IpfsRepo { this.lockfile = null cb() } - ], (err) => callback(err)) + ], callback) } /** From 7d9564971609b092aab3ed80c2fa8003182b7e15 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 23 Mar 2017 00:22:37 +0000 Subject: [PATCH 5/5] chore: put callback back --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 5a537102..26d62e7e 100644 --- a/src/index.js +++ b/src/index.js @@ -214,7 +214,7 @@ class IpfsRepo { this.lockfile = null cb() } - ], callback) + ], (err) => callback(err)) } /**