in src/dotnet/AzureAI.Proxy/ReverseProxy/ThrottlingHealthPolicy.cs [18:43]
public void RequestProxied(HttpContext context, ClusterState cluster, DestinationState destination)
{
var headers = context.Response.Headers;
if (context.Response.StatusCode is 429 or >= 500)
{
var retryAfterSeconds = 10;
if (headers.TryGetValue("retry-after", out var retryAfterHeader) && retryAfterHeader.Count > 0 && int.TryParse(retryAfterHeader[0], out var retryAfter))
{
retryAfterSeconds = retryAfter;
}
else
if (headers.TryGetValue("x-ratelimit-reset-requests", out var ratelimiResetRequests) && ratelimiResetRequests.Count > 0 && int.TryParse(ratelimiResetRequests[0], out var ratelimiResetRequest))
{
retryAfterSeconds = ratelimiResetRequest;
}
else
if (headers.TryGetValue("x-ratelimit-reset-tokens", out var ratelimitResetTokens) && ratelimitResetTokens.Count > 0 && int.TryParse(ratelimitResetTokens[0], out var ratelimitResetToken))
{
retryAfterSeconds = ratelimitResetToken;
}
_healthUpdater.SetPassive(cluster, destination, DestinationHealth.Unhealthy, TimeSpan.FromSeconds(retryAfterSeconds));
}
}