diff --git a/.travis.yml b/.travis.yml index 7e841a0..d72655c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,5 @@ language: node_js node_js: - - '0.10' - - '0.12' - - '4.0' -before_install: - - npm install -g npm@~1.4.6 + - 8 + - 10 + - 12 diff --git a/index.js b/index.js index e21ca0b..907f8a2 100644 --- a/index.js +++ b/index.js @@ -32,28 +32,19 @@ module.exports = function (dir, opts) { pump(socket, client.createRpcStream({ref: socket}), socket, function () { if (!client.isOpen()) return; - var db = level(dir, opts); + var db = level(dir, opts, onopen); - db.on('error', onerror); - db.on('open', onopen); - - function onerror (err) { - db.removeListener('open', onopen); - if (err.type === 'OpenError') { + function onopen (err) { + if (err) { if (connected) return tryConnect(); - setTimeout(tryConnect, 100); + return setTimeout(tryConnect, 100); } - } - function onopen () { - db.removeListener('error', onerror); fs.unlink(sockPath, function (err) { if (err && err.code !== 'ENOENT') return db.emit('error', err); if (!client.isOpen()) return; var sockets = []; - var down = client.db; - var server = net.createServer(function (sock) { if (sock.unref) sock.unref(); sockets.push(sock); @@ -62,10 +53,9 @@ module.exports = function (dir, opts) { }); }); - client.db = db.db; client.close = shutdown; client.emit('leader'); - down.forward(db.db); + client.forward(db); server.listen(sockPath, onlistening); @@ -73,18 +63,17 @@ module.exports = function (dir, opts) { sockets.forEach(function (sock) { sock.destroy(); }); - server.on('close', function () { + server.close(function () { db.close(cb); }); - server.close(); } function onlistening () { if (server.unref) server.unref(); - if (down.isFlushed()) return; + if (client.isFlushed()) return; var sock = net.connect(sockPath); - pump(sock, down.createRpcStream(), sock); + pump(sock, client.createRpcStream(), sock); client.once('flush', function () { sock.destroy(); }); diff --git a/package.json b/package.json index c4784f9..86c0f80 100644 --- a/package.json +++ b/package.json @@ -5,15 +5,15 @@ "main": "index.js", "dependencies": { "has": "^1.0.0", - "level": "^1.4.0", - "multileveldown": "^2.1.1", - "pump": "^1.0.0" + "level": "^6.0.0", + "multileveldown": "^3.0.0", + "pump": "^3.0.0" }, "devDependencies": { - "tape": "^3.0.0", - "bytewise": "~0.7.1", - "level-sublevel": "^6.3.11", - "osenv": "~0.1.0" + "bytewise": "^1.1.0", + "osenv": "~0.1.0", + "subleveldown": "^4.1.4", + "tape": "^4.11.0" }, "scripts": { "test": "tape test/*.js" diff --git a/test/bytewise_sublevel.js b/test/bytewise_sublevel.js deleted file mode 100644 index 015e395..0000000 --- a/test/bytewise_sublevel.js +++ /dev/null @@ -1,41 +0,0 @@ -var test = require('tape'); -var level = require('../'); -var path = require('path'); -var bsub = require('level-sublevel/bytewise'); -var os = require('os'); -var tmpdir = require('osenv').tmpdir(); -var datadir = path.join(tmpdir, 'level-party-' + Math.random()); -var bytewise = require('bytewise'); - -var lopts = { keyEncoding: bytewise, valueEncoding: 'json' }; - -test('bytewise sublevel', function (t) { - t.plan(5); - var a = level(datadir); - var b = level(datadir); - var adb = bsub(a, lopts); - var bdb = bsub(b, lopts); - var value = Math.floor(Math.random() * 100000); - - adb.put([ 'a' ], value, function (err) { - if (err) t.fail(err); - var times = 0; - - bdb.get([ 'a' ], function (err, x) { - t.equal(x, value); - }); - adb.createReadStream().on('data', function (row) { - t.deepEqual(row.key, [ 'a' ]); - t.deepEqual(row.value, value); - }); - bdb.createReadStream().on('data', function (row) { - t.deepEqual(row.key, [ 'a' ]); - t.deepEqual(row.value, value); - }); - }); - - t.on('end', function () { - a.close(); - b.close(); - }); -}); diff --git a/test/sublevel.js b/test/sublevel.js deleted file mode 100644 index 83d622e..0000000 --- a/test/sublevel.js +++ /dev/null @@ -1,41 +0,0 @@ -var test = require('tape'); -var level = require('../'); -var path = require('path'); -var sub = require('level-sublevel'); -var os = require('os'); -var tmpdir = require('osenv').tmpdir(); -var datadir = path.join(tmpdir, 'level-party-' + Math.random()); - -test('sublevel', function (t) { - t.plan(6); - var db = level(datadir); - var sdb = sub(db); - var a = sdb.sublevel('aaa', { valueEncoding: 'json' }); - var b = sdb.sublevel('bbb', { valueEncoding: 'json' }); - - var value = Math.floor(Math.random() * 100000); - - a.put('x', value, function (err) { - t.ifError(err); - - a.get('x', function (err, x) { - t.ifError(err); - t.equal(x, value); - }); - b.get('x', function (err, x) { - t.ok(err); - }); - - a.createReadStream().on('data', function (row) { - t.deepEqual(row.key, 'x'); - t.deepEqual(row.value, value); - }); - b.createReadStream().on('data', function (row) { - t.fail('b should not have rows'); - }); - }); - - t.on('end', function () { - db.close(); - }); -}); diff --git a/test/subleveldown.js b/test/subleveldown.js new file mode 100644 index 0000000..a54cd5e --- /dev/null +++ b/test/subleveldown.js @@ -0,0 +1,42 @@ +var test = require('tape'); +var level = require('../'); +var path = require('path'); +var sub = require('subleveldown'); +var tmpdir = require('osenv').tmpdir(); +var datadir = path.join(tmpdir, 'level-party-' + Math.random()); + +test('subleveldown on level-party', function (t) { + t.plan(9); + + var a = level(datadir); + var b = level(datadir); + var asub = sub(a, 'test', { valueEncoding: 'json' }); + var bsub = sub(b, 'test'); + var obj = { test: Math.floor(Math.random() * 100000) }; + + asub.put('a', obj, function (err) { + t.ifError(err); + + asub.get('a', function (err, value) { + t.ifError(err); + t.deepEqual(value, obj); + }); + bsub.get('a', function (err, value) { + t.ifError(err); + t.deepEqual(value, JSON.stringify(obj)); + }); + asub.createReadStream().on('data', function (row) { + t.deepEqual(row.key, 'a'); + t.deepEqual(row.value, obj); + }); + bsub.createReadStream().on('data', function (row) { + t.deepEqual(row.key, 'a'); + t.deepEqual(row.value, JSON.stringify(obj)); + }); + }); + + t.on('end', function () { + a.close(); + b.close(); + }); +});