From eeb62ff85ed5cf4b147322c32bb816b7ec0a3258 Mon Sep 17 00:00:00 2001 From: Ivan Tivonenko Date: Fri, 23 Oct 2015 07:11:21 +0300 Subject: [PATCH] add timeout logic to Remote.getLedgerSequence --- src/api/ledger/balance-sheet.js | 18 ++++++++++-------- src/core/remote.js | 16 +++++++++++++--- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/api/ledger/balance-sheet.js b/src/api/ledger/balance-sheet.js index 796ffe63..7eb83631 100644 --- a/src/api/ledger/balance-sheet.js +++ b/src/api/ledger/balance-sheet.js @@ -64,18 +64,20 @@ function getBalanceSheetAsync(address: string, options: BalanceSheetOptions, const requestCallback = composeAsync( formatBalanceSheet, convertErrors(callback)); - this.remote.getLedgerSequence((err, ledgerVersion) => { - if (err) { - callback(err); - return; - } + if (_.isUndefined(request.ledger_index)) { + this.remote.getLedgerSequence((err, ledgerVersion) => { + if (err) { + convertErrors(callback)(err); + return; + } - if (_.isUndefined(request.ledger_index)) { request.ledger_index = ledgerVersion; - } + this.remote.rawRequest(request, requestCallback); + }); + } else { this.remote.rawRequest(request, requestCallback); - }); + } } function getBalanceSheet(address: string, options: BalanceSheetOptions = {} diff --git a/src/core/remote.js b/src/core/remote.js index bdbbf0b4..f31ec4f5 100644 --- a/src/core/remote.js +++ b/src/core/remote.js @@ -535,13 +535,23 @@ Remote.prototype.getLedgerSequence = function(callback = function() {}) { return; } + let timeout = null; + function onLedgerClosed() { + clearTimeout(timeout); + callback(null, this._ledger_current_index - 1); + } + if (_.isFinite(this._ledger_current_index)) { // the "current" ledger is the one after the most recently closed ledger callback(null, this._ledger_current_index - 1); } else { - this.once('ledger_closed', () => { - callback(null, this._ledger_current_index - 1); - }); + this.once('ledger_closed', onLedgerClosed); + + timeout = setTimeout(() => { + this.removeListener('ledger_closed', onLedgerClosed); + callback(new RippleError('timeout', + 'Timed out waiting for ledger to close.')); + }, this.pathfind_timeout); } };