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:
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;
}