diff --git a/src/polygateway/config.py b/src/polygateway/config.py index cee290f..f5e94e8 100644 --- a/src/polygateway/config.py +++ b/src/polygateway/config.py @@ -149,9 +149,11 @@ class GatewaySettings: def _normalize(self) -> None: """把 `from_env` 一直在做的规范化补到构造路上,两条路必须产出同一个值。 - `scope` 最要紧: 它直接进 Redis key(`pgw:limit:{scope}:…`/`pgw:gate:{scope}:…`)。 - 一个进程走 `from_env("LLM")` 拿到 "llm"、另一个直接构造传 "LLM",同一逻辑 - scope 的限流与熔断状态会分裂到两套命名空间,各记各的,治理静默失效且不报错。 + `scope` 的 strip 才是要紧的那一半: 它进 Redis key(`pgw:limit:{scope}:…` + /`pgw:gate:{scope}:…`),而两个 Redis 后端在构造函数里只 `.lower()` **不 strip** + ——`"llm "` 会产出 `pgw:limit:llm :…`,与 `from_env` 路的进程分裂成两套命名空间。 + 大小写则不会: 后端自 v1.0.0 起各自 lower,`from_settings` 传 "LLM" 也落在同一 + 套 key 上(此处 lower 只为让 `GatewaySettings.scope` 属性两路取值一致)。 空串归 None 同理: 留着空串会骗过 `is None` 判断,把错误推迟到 redis 客户端 抛连接串解析异常。`telemetry_pg_dsn` 的驱动后缀因为要看 backend 且需告警,