Skip to content

Commit dcd2cba

Browse files
committed
impr(CLDSRV-852): Change RateLimitClient.grantTokens() to accept resourceClass, resourceId, and measure
1 parent b995e4d commit dcd2cba

2 files changed

Lines changed: 12 additions & 10 deletions

File tree

lib/api/apiUtils/rateLimit/client.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,16 @@ class RateLimitClient {
3838
*
3939
* Used by token reservation system to request capacity in advance.
4040
*
41-
* @param {string} bucketName - Bucket name
41+
* @param {string} resourceClass - Resource class name e.g. 'account' or 'bucket'
42+
* @param {string} resourceId - Unique resource ID e.g. bucket name or account ID
43+
* @param {string} measure - ID of rate limit measure e.g. 'rps'
4244
* @param {number} requested - Number of tokens requested
4345
* @param {number} interval - Interval per request in ms
4446
* @param {number} burstCapacity - Burst capacity in ms
4547
* @param {RateLimitClient~grantTokens} cb - Callback
4648
*/
47-
grantTokens(bucketName, requested, interval, burstCapacity, cb) {
48-
const key = `ratelimit:bucket:${bucketName}:rps:emptyAt`;
49+
grantTokens(resourceClass, resourceId, measure, requested, interval, burstCapacity, cb) {
50+
const key = `ratelimit:${resourceClass}:${resourceId}:${measure}:emptyAt`;
4951
const now = Date.now();
5052

5153
this.redis.grantTokens(

tests/functional/aws-node-sdk/test/rateLimit/client.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ skipIfRateLimitDisabled('RateLimitClient', () => {
1919
after(async () => client.redis.quit().catch(() => {}));
2020

2121
beforeEach(async () => {
22-
const keys = await client.redis.keys('ratelimit:bucket:*');
22+
const keys = await client.redis.keys('ratelimit:*');
2323
if (keys.length > 0) {
2424
await client.redis.del(...keys);
2525
}
@@ -42,7 +42,7 @@ skipIfRateLimitDisabled('RateLimitClient', () => {
4242
const interval = 100; // 100ms per request = 10 req/s
4343
const burstCapacity = 1000; // 1000ms burst capacity
4444

45-
client.grantTokens(testBucket, requested, interval, burstCapacity, (err, granted) => {
45+
client.grantTokens('bucket', testBucket, 'rps', requested, interval, burstCapacity, (err, granted) => {
4646
assert.ifError(err);
4747
assert.strictEqual(granted, requested);
4848
done();
@@ -55,12 +55,12 @@ skipIfRateLimitDisabled('RateLimitClient', () => {
5555
const burstCapacity = 1000; // 1000ms burst capacity
5656

5757
// First request
58-
client.grantTokens(testBucket, requested, interval, burstCapacity, (err, granted1) => {
58+
client.grantTokens('bucket', testBucket, 'rps', requested, interval, burstCapacity, (err, granted1) => {
5959
assert.ifError(err);
6060
assert.strictEqual(granted1, requested);
6161

6262
// Second request immediately after
63-
client.grantTokens(testBucket, requested, interval, burstCapacity, (err, granted2) => {
63+
client.grantTokens('bucket', testBucket, 'rps', requested, interval, burstCapacity, (err, granted2) => {
6464
assert.ifError(err);
6565
assert.strictEqual(granted2, requested);
6666
done();
@@ -73,7 +73,7 @@ skipIfRateLimitDisabled('RateLimitClient', () => {
7373
const burstCapacity = 500; // 500ms burst capacity = max 5 tokens
7474

7575
// Request more tokens than available in burst
76-
client.grantTokens(testBucket, 10, interval, burstCapacity, (err, granted) => {
76+
client.grantTokens('bucket', testBucket, 'rps', 10, interval, burstCapacity, (err, granted) => {
7777
assert.ifError(err);
7878
// Should grant partial tokens (5 tokens max with 500ms burst)
7979
assert(granted > 0, 'Should grant at least some tokens');
@@ -87,12 +87,12 @@ skipIfRateLimitDisabled('RateLimitClient', () => {
8787
const burstCapacity = 100; // 100ms burst capacity = max 1 token
8888

8989
// First request consumes the burst capacity
90-
client.grantTokens(testBucket, 1, interval, burstCapacity, (err, granted1) => {
90+
client.grantTokens('bucket', testBucket, 'rps', 1, interval, burstCapacity, (err, granted1) => {
9191
assert.ifError(err);
9292
assert.strictEqual(granted1, 1);
9393

9494
// Second request immediately after should be denied
95-
client.grantTokens(testBucket, 1, interval, burstCapacity, (err, granted2) => {
95+
client.grantTokens('bucket', testBucket, 'rps', 1, interval, burstCapacity, (err, granted2) => {
9696
assert.ifError(err);
9797
assert.strictEqual(granted2, 0, 'Should deny tokens when quota exhausted');
9898
done();

0 commit comments

Comments
 (0)