optimize fetching of tx proposals for history

This commit is contained in:
Ivan Socolsky 2017-01-05 15:13:10 -03:00
parent 5d5f887edb
commit 82e02e2d49
No known key found for this signature in database
GPG Key ID: FAECE6A05FAA4F56
2 changed files with 34 additions and 13 deletions

View File

@ -2778,26 +2778,47 @@ WalletService.prototype.getTxHistory = function(opts, cb) {
var from = opts.skip || 0;
var to = from + opts.limit;
async.parallel([
async.waterfall([
function(next) {
getNormalizedTxs(addresses, from, to, next);
},
function(next) {
self.storage.fetchTxs(self.walletId, {}, next);
},
function(next) {
self.storage.fetchTxNotes(self.walletId, {}, next);
function(txs, next) {
// Fetch all proposals in [t - 7 days, t + 1 day]
var minTs = _.min(txs.items, 'time').time - 7 * 24 * 3600;
var maxTs = _.max(txs.items, 'time').time + 1 * 24 * 3600;
async.parallel([
function(done) {
self.storage.fetchTxs(self.walletId, {
minTs: minTs,
maxTs: maxTs
}, done);
},
function(done) {
self.storage.fetchTxNotes(self.walletId, {
minTs: minTs
}, done);
},
], function(err, res) {
return next(err, {
txs: txs,
txps: res[0],
notes: res[1]
});
});
},
], function(err, res) {
if (err) return cb(err);
var finalTxs = decorate(res[0].items, addresses, res[1], res[2]);
var finalTxs = decorate(res.txs.items, addresses, res.txps, res.notes);
if (res[0].fromCache)
if (res.txs.fromCache)
log.debug("History from cache for:", self.walletId, from, to);
return cb(null, finalTxs, !!res[0].fromCache);
return cb(null, finalTxs, !!res.txs.fromCache);
});
});
};

View File

@ -5619,7 +5619,7 @@ describe('Wallet service', function() {
txid: '1',
confirmations: 1,
fees: 100,
time: 1,
time: 12345,
inputs: [{
address: mainAddresses[0].address,
amount: 500,
@ -5638,7 +5638,7 @@ describe('Wallet service', function() {
tx.action.should.equal('sent');
tx.amount.should.equal(400);
tx.fees.should.equal(100);
tx.time.should.equal(1);
tx.time.should.equal(12345);
done();
});
});
@ -5648,7 +5648,7 @@ describe('Wallet service', function() {
txid: '1',
confirmations: 1,
fees: 100,
time: 1,
time: Date.now() / 1000,
inputs: [{
address: mainAddresses[0].address,
amount: 500,
@ -5715,7 +5715,7 @@ describe('Wallet service', function() {
txid: txp.txid,
confirmations: 1,
fees: 5460,
time: 1,
time: Date.now() / 1000,
inputs: [{
address: tx.inputs[0].address,
amount: utxos[0].satoshis,