From fdb8285759bec264cca42337df240452568620fa Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Sun, 5 Apr 2015 15:42:56 -0300 Subject: [PATCH] add multilevel support --- config.js | 10 ++++---- lib/storage.js | 57 ++++++++++++++++++++++++++++----------------- multilevel/start.js | 14 +++++++++++ package.json | 2 ++ 4 files changed, 57 insertions(+), 26 deletions(-) create mode 100755 multilevel/start.js diff --git a/config.js b/config.js index d017e77..c13db93 100644 --- a/config.js +++ b/config.js @@ -14,10 +14,12 @@ var config = { WalletService: { storageOpts: { dbPath: './db', - /* - dbHost: 'http://db.host.org', - dbPort: '8188', - */ + /* To use multilevel, uncomment this: + multiLevel: { + host: 'localhost', + port: 3002, + }, + */ }, }, }; diff --git a/lib/storage.js b/lib/storage.js index 37db926..32583c8 100644 --- a/lib/storage.js +++ b/lib/storage.js @@ -2,6 +2,8 @@ var _ = require('lodash'); var levelup = require('levelup'); +var multilevel = require('multilevel'); +var net = require('net'); var async = require('async'); var $ = require('preconditions').singleton(); var log = require('npmlog'); @@ -16,9 +18,20 @@ var Notification = require('./model/notification'); var Storage = function(opts) { opts = opts || {}; - this.db = opts.db || levelup(opts.dbPath || './db/bws.db', { - valueEncoding: 'json' - }); + this.db = opts.db; + + if (!this.db) { + if (opts.multiLevel) { + this.db = multilevel.client(); + var con = net.connect(opts.multiLevel); + con.pipe(this.db.createRpcStream()).pipe(con); + console.log('Connected to multilevel server at:', opts.multiLevel); + } else { + this.db = levelup(opts.dbPath || './db/bws.db', { + valueEncoding: 'json' + }); + } + } }; var zeroPad = function(x, length) { @@ -134,9 +147,9 @@ Storage.prototype.fetchPendingTxs = function(walletId, cb) { var txs = []; var key = KEY.PENDING_TXP(walletId); this.db.createReadStream({ - gte: key, - lt: key + '~' - }) + gte: key, + lt: key + '~' + }) .on('data', function(data) { txs.push(TxProposal.fromObj(data.value)); }) @@ -170,11 +183,11 @@ Storage.prototype.fetchTxs = function(walletId, opts, cb) { var endkey = KEY.TXP(walletId, opts.maxTs); this.db.createReadStream({ - gt: key, - lt: endkey + '~', - reverse: true, - limit: opts.limit, - }) + gt: key, + lt: endkey + '~', + reverse: true, + limit: opts.limit, + }) .on('data', function(data) { txs.push(TxProposal.fromObj(data.value)); }) @@ -207,11 +220,11 @@ Storage.prototype.fetchNotifications = function(walletId, opts, cb) { var endkey = KEY.NOTIFICATION(walletId, opts.maxTs); this.db.createReadStream({ - gt: key, - lt: endkey + '~', - reverse: opts.reverse, - limit: opts.limit, - }) + gt: key, + lt: endkey + '~', + reverse: opts.reverse, + limit: opts.limit, + }) .on('data', function(data) { txs.push(Notification.fromObj(data.value)); }) @@ -271,9 +284,9 @@ Storage.prototype._delByKey = function(key, cb) { var self = this; var keys = []; this.db.createKeyStream({ - gte: key, - lt: key + '~', - }) + gte: key, + lt: key + '~', + }) .on('data', function(key) { keys.push(key); }) @@ -328,9 +341,9 @@ Storage.prototype.fetchAddresses = function(walletId, cb) { var addresses = []; var key = KEY.ADDRESS(walletId); this.db.createReadStream({ - gte: key, - lt: key + '~' - }) + gte: key, + lt: key + '~' + }) .on('data', function(data) { addresses.push(Address.fromObj(data.value)); }) diff --git a/multilevel/start.js b/multilevel/start.js new file mode 100755 index 0000000..591ccd2 --- /dev/null +++ b/multilevel/start.js @@ -0,0 +1,14 @@ +var multilevel = require('multilevel'); +var net = require('net'); +var level = require('levelup'); + +var db = level('./db', { + valueEncoding: 'json' +}); +var PORT = 3002; + + +console.log('Server started at port ' + PORT + '...'); +net.createServer(function(con) { + con.pipe(multilevel.server(db)).pipe(con); +}).listen(PORT); diff --git a/package.json b/package.json index 0f45b2d..1729ada 100644 --- a/package.json +++ b/package.json @@ -26,11 +26,13 @@ "coveralls": "^2.11.2", "express": "^4.10.0", "inherits": "^2.0.1", + "level": "^0.18.0", "leveldown": "^0.10.0", "levelup": "^0.19.0", "lodash": "^3.3.1", "mocha-lcov-reporter": "0.0.1", "morgan": "*", + "multilevel": "^6.1.0", "npmlog": "^0.1.1", "preconditions": "^1.0.7", "read": "^1.0.5",