mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-01 12:52:11 +03:00
fix(combo): add 429 to PROVIDER_FAILURE_ERROR_CODES to prevent infinite retry loop (#3366)
Integrated into release/v3.8.15. Comment block reconciled on the contributor's branch to remove the contradictory 'intentionally excluded' text that remained from the original code.
This commit is contained in:
committed by
GitHub
parent
08bbd66b5f
commit
0bb4290100
@@ -79,12 +79,12 @@ function toJsonRecord(value: unknown): JsonRecord {
|
||||
}
|
||||
|
||||
// Provider-level failure tracking for circuit breaker behavior
|
||||
// Error codes that count toward provider-level failure threshold
|
||||
// 429 (rate limit) is intentionally excluded: rate limits are connection-scoped
|
||||
// and handled via Connection Cooldown, not provider-wide circuit breaker.
|
||||
// Counting 429 toward provider failure causes cascading provider trips at scale
|
||||
// when many connections hit rate limits simultaneously (Issue #1846).
|
||||
const PROVIDER_FAILURE_ERROR_CODES = new Set([408, 500, 502, 503, 504]);
|
||||
// Error codes that count toward provider-level failure threshold.
|
||||
// 429 is included: per-error-type cooldowns (rate_limit: 60s, quota_exhausted: 1h)
|
||||
// prevent cascading provider trips at scale (Issue #1846 concern addressed),
|
||||
// while still allowing the circuit breaker to open on sustained 429s and
|
||||
// prevent infinite combo retries (Issue #3200).
|
||||
const PROVIDER_FAILURE_ERROR_CODES = new Set([408, 429, 500, 502, 503, 504]);
|
||||
|
||||
// Per-connection failure deduplication: prevents rapid-fire failures from the
|
||||
// same connection from counting multiple times toward the provider breaker.
|
||||
|
||||
@@ -173,7 +173,7 @@ function intersectAllowedConnectionIds(primary: unknown, secondary: unknown): st
|
||||
return first || second || null;
|
||||
}
|
||||
|
||||
const PROVIDER_BREAKER_FAILURE_STATUSES = new Set([408, 500, 502, 503, 504]);
|
||||
const PROVIDER_BREAKER_FAILURE_STATUSES = new Set([408, 429, 500, 502, 503, 504]);
|
||||
|
||||
/**
|
||||
* Handle chat completion request
|
||||
|
||||
@@ -536,7 +536,7 @@ test("recordModelLockoutFailure uses provider profile cooldowns, backoff, and re
|
||||
|
||||
// Provider-level failure circuit breaker tests
|
||||
test("isProviderFailureCode correctly identifies provider-wide transient error codes", () => {
|
||||
assert.equal(isProviderFailureCode(429), false);
|
||||
assert.equal(isProviderFailureCode(429), true);
|
||||
assert.equal(isProviderFailureCode(408), true);
|
||||
assert.equal(isProviderFailureCode(500), true);
|
||||
assert.equal(isProviderFailureCode(502), true);
|
||||
|
||||
Reference in New Issue
Block a user