commit c8576b433d8442694e0427301cf061aade0a6f8e
parent d64861acec41927787dbe65ccd2067cd900b1f67
Author: Florian Dold <florian.dold@gmail.com>
Date: Thu, 17 Nov 2016 15:32:08 +0100
per-exchange throttling
Diffstat:
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git 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
@@ -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<void> {
- 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--;
}