Browse Source

add multilevel support

activeAddress
Matias Alejo Garcia 10 years ago
parent
commit
fdb8285759
  1. 10
      config.js
  2. 57
      lib/storage.js
  3. 14
      multilevel/start.js
  4. 2
      package.json

10
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,
},
*/
},
},
};

57
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));
})

14
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);

2
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",

Loading…
Cancel
Save