Skip to content

Commit c764010

Browse files
add token bucket
1 parent f433e11 commit c764010

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

src/token_bucket.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class TokenBucket {
2+
private budget: number;
3+
constructor(allowance: number) {
4+
this.budget = allowance;
5+
}
6+
deposit(tokens: number) {
7+
this.budget += tokens;
8+
}
9+
10+
consume(tokens: number): boolean {
11+
if (tokens > this.budget) return false;
12+
13+
this.budget -= tokens;
14+
return true;
15+
}
16+
}
17+
18+
const TOKEN_REFRESH_RATE = 0.1;
19+
const INITIAL_SIZE = 1000;
20+
const RETRY_COST = 1;
21+
22+
export class RetryTokenBucket {
23+
private bucket = new TokenBucket(INITIAL_SIZE);
24+
25+
onCommandSuccess(retry: boolean) {
26+
this.bucket.deposit(TOKEN_REFRESH_RATE);
27+
28+
if (retry) {
29+
this.bucket.deposit(RETRY_COST);
30+
}
31+
}
32+
33+
canRetry() {
34+
return this.bucket.consume(RETRY_COST);
35+
}
36+
}

0 commit comments

Comments
 (0)