taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit ccaac89c3b90ca6d1cce4813fd273f675d6f5802
parent 8139608a3bf11bc6b5c6d83781ccab9c16584692
Author: Florian Dold <florian.dold@gmail.com>
Date:   Fri,  4 Sep 2020 16:17:32 +0530

fix utterly broken throttling logic

Diffstat:
Mpackages/taler-wallet-core/src/util/RequestThrottler.ts | 17+++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/packages/taler-wallet-core/src/util/RequestThrottler.ts b/packages/taler-wallet-core/src/util/RequestThrottler.ts @@ -21,7 +21,7 @@ /** * Imports. */ -import { getTimestampNow, timestampDifference } from "../util/time"; +import { getTimestampNow, timestampDifference, timestampCmp } from "../util/time"; import { URL } from "./url"; import { Logger } from "./logging"; @@ -53,25 +53,26 @@ class OriginState { private refill(): void { const now = getTimestampNow(); + if (timestampCmp(now, this.lastUpdate) < 0) { + // Did the system time change? + this.lastUpdate = now; + return; + } const d = timestampDifference(now, this.lastUpdate); if (d.d_ms === "forever") { throw Error("assertion failed"); } - if (d.d_ms < 0) { - return; - } - const d_s = d.d_ms / 1000; this.tokensSecond = Math.min( MAX_PER_SECOND, - this.tokensSecond + d_s / 1000, + this.tokensSecond + d.d_ms / 1000, ); this.tokensMinute = Math.min( MAX_PER_MINUTE, - this.tokensMinute + (d_s / 1000) * 60, + this.tokensMinute + d.d_ms / 1000 / 60, ); this.tokensHour = Math.min( MAX_PER_HOUR, - this.tokensHour + (d_s / 1000) * 60 * 60, + this.tokensHour + d.d_ms / 1000 / 60 / 60, ); this.lastUpdate = now; }