aboutsummaryrefslogtreecommitdiff
path: root/src/wallet.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-11-17 15:32:08 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-11-17 15:32:08 +0100
commitc8576b433d8442694e0427301cf061aade0a6f8e (patch)
tree6dd5544d7a41fbd73dd99c676735a4b6d06c5591 /src/wallet.ts
parentd64861acec41927787dbe65ccd2067cd900b1f67 (diff)
downloadwallet-core-c8576b433d8442694e0427301cf061aade0a6f8e.tar.xz
per-exchange throttling
Diffstat (limited to 'src/wallet.ts')
-rw-r--r--src/wallet.ts5
1 files changed, 4 insertions, 1 deletions
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<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--;
}