From c8576b433d8442694e0427301cf061aade0a6f8e Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 17 Nov 2016 15:32:08 +0100 Subject: per-exchange throttling --- src/types.ts | 2 +- src/wallet.ts | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/types.ts b/src/types.ts index 9de769dfe..b04453767 100644 --- a/src/types.ts +++ b/src/types.ts @@ -509,7 +509,7 @@ export type PayCoinInfo = Array<{ updatedCoin: CoinRecord, sig: CoinPaySig }>; export namespace Amounts { - export const fractionalBase = 1e6; + export const fractionalBase = 1e8; export interface Result { amount: AmountJson; diff --git a/src/wallet.ts b/src/wallet.ts index 354072130..fc9fd823b 100644 --- a/src/wallet.ts +++ b/src/wallet.ts @@ -380,6 +380,7 @@ export class Wallet { public cryptoApi: CryptoApi; private processPreCoinConcurrent = 0; + private processPreCoinThrottle: {[url: string]: number} = {}; /** * Set of identifiers for running operations. @@ -728,7 +729,7 @@ export class Wallet { private async processPreCoin(preCoin: PreCoinRecord, retryDelayMs = 200): Promise { - if (this.processPreCoinConcurrent >= 1) { + if (this.processPreCoinConcurrent >= 4 || this.processPreCoinThrottle[preCoin.exchangeBaseUrl]) { console.log("delaying processPreCoin"); setTimeout(() => this.processPreCoin(preCoin, retryDelayMs * 2), retryDelayMs); @@ -793,6 +794,8 @@ export class Wallet { let nextRetryDelayMs = Math.min(retryDelayMs * 2, 1000 * 60); setTimeout(() => this.processPreCoin(preCoin, nextRetryDelayMs), retryDelayMs); + this.processPreCoinThrottle[preCoin.exchangeBaseUrl] = (this.processPreCoinThrottle[preCoin.exchangeBaseUrl] || 0) + 1; + setTimeout(() => {this.processPreCoinThrottle[preCoin.exchangeBaseUrl]--; }, retryDelayMs); } finally { this.processPreCoinConcurrent--; } -- cgit v1.2.3