fix(discord): prune remapped rest buckets · openclaw/openclaw@32db9ff
steipete
·
2026-04-29
·
via Recent Commits to openclaw:main
File tree
extensions/discord/src/internal
| Original file line number | Diff line number | Diff line change |
|---|
@@ -144,6 +144,11 @@ export class RestScheduler<TData> {
|
144 | 144 | return false; |
145 | 145 | } |
146 | 146 | |
| 147 | +private shouldPruneIdleBucket(key: string): boolean { |
| 148 | +const mappedBucketKey = this.routeBuckets.get(key); |
| 149 | +return mappedBucketKey !== key && !this.hasBucketReference(key); |
| 150 | +} |
| 151 | + |
147 | 152 | private bindRouteToBucket(routeKey: string, bucketKey: string): BucketState<TData> { |
148 | 153 | const target = this.getBucket(bucketKey); |
149 | 154 | target.routeKeys.add(routeKey); |
@@ -262,7 +267,7 @@ export class RestScheduler<TData> {
|
262 | 267 | break; |
263 | 268 | } |
264 | 269 | if (bucket.pending.length === 0) { |
265 | | -if (bucket.active === 0 && !this.routeBuckets.has(key) && !this.hasBucketReference(key)) { |
| 270 | +if (bucket.active === 0 && this.shouldPruneIdleBucket(key)) { |
266 | 271 | this.buckets.delete(key); |
267 | 272 | } |
268 | 273 | continue; |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -83,6 +83,22 @@ describe("RequestClient", () => {
|
83 | 83 | ]); |
84 | 84 | }); |
85 | 85 | |
| 86 | +it("prunes idle route buckets after Discord bucket remapping", async () => { |
| 87 | +const client = new RequestClient("test-token", { |
| 88 | +fetch: async () => |
| 89 | +new Response(JSON.stringify({ id: "first" }), { |
| 90 | +status: 200, |
| 91 | +headers: { "X-RateLimit-Bucket": "channel-messages" }, |
| 92 | +}), |
| 93 | +}); |
| 94 | + |
| 95 | +await expect(client.get("/channels/c1/messages")).resolves.toEqual({ id: "first" }); |
| 96 | + |
| 97 | +const metrics = client.getSchedulerMetrics(); |
| 98 | +expect(metrics.activeBuckets).toBe(1); |
| 99 | +expect(metrics.buckets.map((bucket) => bucket.key)).toEqual(["channel-messages:channels/c1"]); |
| 100 | +}); |
| 101 | + |
86 | 102 | it("waits for a learned bucket reset before dispatching the next request", async () => { |
87 | 103 | vi.useFakeTimers(); |
88 | 104 | vi.setSystemTime(0); |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。