Skip to content

Commit ae286c9

Browse files
author
John Luo
committed
React to API change
1 parent 7ed6967 commit ae286c9

File tree

3 files changed

+20
-18
lines changed

3 files changed

+20
-18
lines changed

src/Middleware/RequestLimiter/src/IPAggregatedRateLimiter.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,16 @@ public override long EstimatedCount(HttpContext resourceId)
4040
return _cache.TryGetValue(resourceId.Connection.RemoteIpAddress, out var count) ? count : 0;
4141
}
4242

43-
public override bool TryAcquire(HttpContext resourceId, long requestedCount, [NotNullWhen(true)] out Resource? resource)
43+
public override Resource Acquire(HttpContext resourceId, long requestedCount)
4444
{
45-
resource = Resource.NoopResource;
4645
if (requestedCount > _maxResourceCount)
4746
{
48-
return false;
47+
return Resource.FailNoopResource;
4948
}
5049

5150
if (resourceId.Connection.RemoteIpAddress == null)
5251
{
53-
return true;
52+
return Resource.SuccessNoopResource;
5453
}
5554

5655
var key = resourceId.Connection.RemoteIpAddress;
@@ -59,7 +58,7 @@ public override bool TryAcquire(HttpContext resourceId, long requestedCount, [No
5958
{
6059
if (_cache.TryAdd(key, requestedCount))
6160
{
62-
return true;
61+
return Resource.SuccessNoopResource;
6362
}
6463
}
6564

@@ -70,16 +69,16 @@ public override bool TryAcquire(HttpContext resourceId, long requestedCount, [No
7069
{
7170
if (newCount > _maxResourceCount)
7271
{
73-
return false;
72+
return Resource.FailNoopResource;
7473
}
7574

76-
return true;
75+
return Resource.SuccessNoopResource;
7776
}
7877
if (!_cache.TryGetValue(key, out count))
7978
{
8079
if (_cache.TryAdd(key, requestedCount))
8180
{
82-
return true;
81+
return Resource.SuccessNoopResource;
8382
}
8483
}
8584
}

src/Middleware/RequestLimiter/src/RateLimiter.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,22 @@ public RateLimiter(long resourceCount, long newResourcePerSecond)
2727
_renewTimer = new Timer(Replenish, this, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5));
2828
}
2929

30-
public override bool TryAcquire(long requestedCount, [NotNullWhen(true)] out Resource? resource)
30+
public override Resource Acquire(long requestedCount)
3131
{
32-
resource = Resource.NoopResource;
3332
if (Interlocked.Add(ref _resourceCount, requestedCount) <= _maxResourceCount)
3433
{
35-
return true;
34+
return Resource.SuccessNoopResource;
3635
}
3736

3837
Interlocked.Add(ref _resourceCount, -requestedCount);
39-
return false;
38+
return Resource.FailNoopResource;
4039
}
4140

4241
public override ValueTask<Resource> AcquireAsync(long requestedCount, CancellationToken cancellationToken = default)
4342
{
4443
if (Interlocked.Add(ref _resourceCount, requestedCount) <= _maxResourceCount)
4544
{
46-
return ValueTask.FromResult(Resource.NoopResource);
45+
return ValueTask.FromResult(Resource.SuccessNoopResource);
4746
}
4847

4948
Interlocked.Add(ref _resourceCount, -requestedCount);
@@ -83,7 +82,7 @@ private static void Replenish(object? state)
8382
if (requestToFulfill == request)
8483
{
8584
// If requestToFulfill == request, the fulfillment is successful.
86-
requestToFulfill.TCS.SetResult(Resource.NoopResource);
85+
requestToFulfill.TCS.SetResult(Resource.SuccessNoopResource);
8786
}
8887
else
8988
{

src/Middleware/RequestLimiter/src/RequestLimiterMiddleware.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,30 +95,34 @@ private bool ApplyLimit(RequestLimitRegistration registration, HttpContext conte
9595
{
9696
var limiter = registration.ResolveLimiter(context.RequestServices);
9797
_logger.LogInformation("Resource count: " + limiter.EstimatedCount);
98-
if (!limiter.TryAcquire(out var resource))
98+
// TODO use AcquireAsync to enable queuing
99+
var resource = limiter.Acquire();
100+
if (!resource.IsAcquired)
99101
{
100102
_logger.LogInformation("Resource exhausted");
101103
context.Response.StatusCode = StatusCodes.Status429TooManyRequests;
102104
return false;
103105
}
104106

105107
_logger.LogInformation("Resource obtained");
106-
obtainedResources.Push(resource.Value);
108+
obtainedResources.Push(resource);
107109
return true;
108110
}
109111
if (registration.ResolveAggregatedLimiter != null)
110112
{
111113
var limiter = registration.ResolveAggregatedLimiter(context.RequestServices);
112114
_logger.LogInformation("Resource count: " + limiter.EstimatedCount(context));
113-
if (!limiter.TryAcquire(context, out var resource))
115+
// TODO use AcquireAsync to enable queuing
116+
var resource = limiter.Acquire(context);
117+
if (!resource.IsAcquired)
114118
{
115119
_logger.LogInformation("Resource exhausted");
116120
context.Response.StatusCode = StatusCodes.Status429TooManyRequests;
117121
return false;
118122
}
119123

120124
_logger.LogInformation("Resource obtained");
121-
obtainedResources.Push(resource.Value);
125+
obtainedResources.Push(resource);
122126
return true;
123127
}
124128
throw new InvalidOperationException("Registration couldn't resolve limiter");

0 commit comments

Comments
 (0)