Skip to content
This repository was archived by the owner on Dec 2, 2024. It is now read-only.
/ party Public archive
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -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
27 changes: 8 additions & 19 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Comment thread
vweevers marked this conversation as resolved.

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);
Expand All @@ -62,29 +53,27 @@ 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);

function shutdown (cb) {
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();
});
Expand Down
14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
41 changes: 0 additions & 41 deletions test/bytewise_sublevel.js

This file was deleted.

41 changes: 0 additions & 41 deletions test/sublevel.js

This file was deleted.

42 changes: 42 additions & 0 deletions test/subleveldown.js
Original file line number Diff line number Diff line change
@@ -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();
});
});