mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
fix: 治理 Prometheus 指标基数爆炸和内存缓存无界增长
- 移除 token/latency Prometheus 指标的 model 标签,避免 provider x model 笛卡尔积 - HealthMonitor 滑动窗口从 DB JSON 迁移至进程内存,减少写放大 - ModelCostService 三层缓存增加 500 条上限,超限时清空 - StickyPriority 粘性缓存和健康状态字典增加容量淘汰 - AffinityManager 请求锁字典增加 500 条上限,淘汰空闲锁 - 配额刷新/探测查询使用 defer/load_only 避免加载大 JSON 列 - Alembic 迁移清理 DB 中遗留的 request_results_window 数据 - 同步更新测试适配 batch_get_cooldowns 返回值和批量删除异步化
This commit is contained in:
@@ -40,7 +40,7 @@ async def test_trace_attached_to_first_candidate() -> None:
|
||||
patch(
|
||||
"src.services.provider.pool.redis_ops.batch_get_cooldowns",
|
||||
new_callable=AsyncMock,
|
||||
return_value={"key-1": (None, None), "key-2": (None, None)},
|
||||
return_value={"key-1": None, "key-2": None},
|
||||
),
|
||||
patch(
|
||||
"src.services.provider.pool.redis_ops.get_lru_scores",
|
||||
@@ -72,7 +72,7 @@ async def test_pool_extra_data_on_selected_candidate() -> None:
|
||||
patch(
|
||||
"src.services.provider.pool.redis_ops.batch_get_cooldowns",
|
||||
new_callable=AsyncMock,
|
||||
return_value={"key-1": (None, None)},
|
||||
return_value={"key-1": None},
|
||||
),
|
||||
patch(
|
||||
"src.services.provider.pool.redis_ops.get_lru_scores",
|
||||
@@ -103,8 +103,8 @@ async def test_pool_extra_data_on_skipped_candidate() -> None:
|
||||
"src.services.provider.pool.redis_ops.batch_get_cooldowns",
|
||||
new_callable=AsyncMock,
|
||||
return_value={
|
||||
"key-1": ("rate_limited_429", 120),
|
||||
"key-2": (None, None),
|
||||
"key-1": "rate_limited_429",
|
||||
"key-2": None,
|
||||
},
|
||||
),
|
||||
patch(
|
||||
@@ -122,7 +122,8 @@ async def test_pool_extra_data_on_skipped_candidate() -> None:
|
||||
assert extra is not None
|
||||
assert extra["pool_skip"]["type"] == "cooldown"
|
||||
assert extra["pool_skip"]["cooldown_reason"] == "rate_limited_429"
|
||||
assert extra["pool_skip"]["cooldown_ttl"] == 120
|
||||
# TTL is not fetched on the scheduling hot path (include_ttl=False)
|
||||
assert "cooldown_ttl" not in extra["pool_skip"]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -142,9 +143,9 @@ async def test_trace_build_summary_matches() -> None:
|
||||
"src.services.provider.pool.redis_ops.batch_get_cooldowns",
|
||||
new_callable=AsyncMock,
|
||||
return_value={
|
||||
"key-1": ("overloaded_529", 60),
|
||||
"key-2": (None, None),
|
||||
"key-3": (None, None),
|
||||
"key-1": "overloaded_529",
|
||||
"key-2": None,
|
||||
"key-3": None,
|
||||
},
|
||||
),
|
||||
patch(
|
||||
@@ -181,7 +182,7 @@ async def test_trace_build_summary_uses_attempted_key_ids_when_provided() -> Non
|
||||
patch(
|
||||
"src.services.provider.pool.redis_ops.batch_get_cooldowns",
|
||||
new_callable=AsyncMock,
|
||||
return_value={"key-1": (None, None), "key-2": (None, None)},
|
||||
return_value={"key-1": None, "key-2": None},
|
||||
),
|
||||
patch(
|
||||
"src.services.provider.pool.redis_ops.get_lru_scores",
|
||||
@@ -218,7 +219,7 @@ async def test_sticky_trace_info() -> None:
|
||||
patch(
|
||||
"src.services.provider.pool.redis_ops.batch_get_cooldowns",
|
||||
new_callable=AsyncMock,
|
||||
return_value={"key-1": (None, None), "key-2": (None, None)},
|
||||
return_value={"key-1": None, "key-2": None},
|
||||
),
|
||||
patch(
|
||||
"src.services.provider.pool.redis_ops.get_lru_scores",
|
||||
|
||||
Reference in New Issue
Block a user