问题类型
前端显示或交互异常
部署方式
完整 Docker 方案
CPA 版本
v7.2.92(API commit: 53c1e7e2)
CPA Manager Plus 版本
当前 main,commit 1a622d86(PR #410)
问题描述
打开 /dashboard#/auth-files 后,认证文件列表会与“加载中…”状态持续交替闪烁,OAuth 模型禁用和 OAuth 模型别名区域也会反复进入 loading。
Network 面板显示以下三个接口持续循环请求:
GET /v0/management/auth-files
GET /v0/management/oauth-excluded-models
GET /v0/management/oauth-model-alias
一次复现中,约 5.956 秒产生 391 个 GET 请求(约 65.6 req/s):
| Endpoint |
Requests |
oauth-model-alias |
131 |
auth-files |
130 |
oauth-excluded-models |
130 |
所有接口均返回 200,Console 没有 exception,所以页面不会自行退出循环。
预期行为:进入 AuthFiles 页面时三个初始化接口各请求一次;请求完成后页面保持稳定,除非用户手动刷新或正常轮询触发。
根因定位
回归由提交 f5996d4c 引入。
useAuthFilesOauth.tsx 原先直接返回稳定的 useCallback:
loadExcluded,
loadModelAlias,
该提交改成了每次 render 都会创建新引用的包装函数:
loadExcluded: () => loadExcluded(),
loadModelAlias: () => loadModelAlias(),
而 AuthFilesPage.tsx 的初始化 effect 将它们作为依赖:
useEffect(() => {
if (!isCurrentLayer) return;
loadFiles();
loadExcluded();
loadModelAlias();
}, [isCurrentLayer, loadFiles, loadExcluded, loadModelAlias]);
形成 loader 请求完成 → setState → render → loader 引用变化 → effect 再执行 的循环。由于请求异步完成,不会触发同步的 React “Maximum update depth exceeded”。
本地集成中的两个相关源码 blob 已与上游 1a622d86 做对象级比较,结果均为 diff exit=0;根级构建兼容补丁也不修改这些 hook 或 endpoint。
建议直接恢复稳定 callback:
return {
// ...
loadExcluded,
loadModelAlias,
// ...
};
并增加回归测试:挂载页面并完成首次 loader 后,三个初始化接口仍应各调用一次,两个 loader 引用在普通 rerender 后保持稳定。
复现步骤
- 使用 CPA Manager Plus
1a622d86 构建管理页面。
- 通过 Dashboard 登录 CPA。
- 打开
#/auth-files。
- 观察认证文件列表、“OAuth 模型禁用”和“OAuth 模型别名”区域。
- 在 Network 面板过滤
auth-files、oauth-excluded-models 和 oauth-model-alias。
- 可以看到三个接口持续重复请求,页面反复切换 loading 状态。
关键配置
deployment: full-docker
management_ui: bundled-cpa-manager-plus
management_ui_commit: 1a622d86
cpa_version: v7.2.92
cpa_api_commit: 53c1e7e2
cpa_image: ghcr.io/indieark/cli-proxy-api:latest
reverse_proxy: nginx
manager_server_involved: false
affected_route: /dashboard#/auth-files
Management Key、认证文件、账号和 token 均已脱敏且与复现无关。
/status 返回内容
{
"applicable": false,
"reason": "This is a bundled frontend React effect loop. Manager Server, request monitoring collector, and Docker networking are not involved."
}
日志
GET /v0/management/auth-files status=200
GET /v0/management/oauth-excluded-models status=200
GET /v0/management/oauth-model-alias status=200
Observed window: 5.956 seconds
Total GET requests: 391
Request rate: 65.6 req/s
Console exceptions: 0
Failed requests: 0
Observed write requests (PATCH/PUT/DELETE): 0
没有发现数据损坏证据;当前主要影响是页面不可用、服务端请求负载和日志快速增长。
截图
页面在以下两种状态之间持续切换,难以截取稳定画面:
- 正常认证文件卡片短暂出现。
- 卡片消失,列表及两个 OAuth 配置区域显示“加载中…”。
Network 请求统计和根因代码已在上文提供,可稳定复现。
检查清单
问题类型
前端显示或交互异常
部署方式
完整 Docker 方案
CPA 版本
v7.2.92(API commit:
53c1e7e2)CPA Manager Plus 版本
当前
main,commit1a622d86(PR #410)问题描述
打开
/dashboard#/auth-files后,认证文件列表会与“加载中…”状态持续交替闪烁,OAuth 模型禁用和 OAuth 模型别名区域也会反复进入 loading。Network 面板显示以下三个接口持续循环请求:
GET /v0/management/auth-filesGET /v0/management/oauth-excluded-modelsGET /v0/management/oauth-model-alias一次复现中,约 5.956 秒产生 391 个 GET 请求(约 65.6 req/s):
oauth-model-aliasauth-filesoauth-excluded-models所有接口均返回
200,Console 没有 exception,所以页面不会自行退出循环。预期行为:进入 AuthFiles 页面时三个初始化接口各请求一次;请求完成后页面保持稳定,除非用户手动刷新或正常轮询触发。
根因定位
回归由提交
f5996d4c引入。useAuthFilesOauth.tsx原先直接返回稳定的useCallback:该提交改成了每次 render 都会创建新引用的包装函数:
而
AuthFilesPage.tsx的初始化 effect 将它们作为依赖:形成
loader 请求完成 → setState → render → loader 引用变化 → effect 再执行的循环。由于请求异步完成,不会触发同步的 React “Maximum update depth exceeded”。本地集成中的两个相关源码 blob 已与上游
1a622d86做对象级比较,结果均为diff exit=0;根级构建兼容补丁也不修改这些 hook 或 endpoint。建议直接恢复稳定 callback:
并增加回归测试:挂载页面并完成首次 loader 后,三个初始化接口仍应各调用一次,两个 loader 引用在普通 rerender 后保持稳定。
复现步骤
1a622d86构建管理页面。#/auth-files。auth-files、oauth-excluded-models和oauth-model-alias。关键配置
Management Key、认证文件、账号和 token 均已脱敏且与复现无关。
/status 返回内容
{ "applicable": false, "reason": "This is a bundled frontend React effect loop. Manager Server, request monitoring collector, and Docker networking are not involved." }日志
没有发现数据损坏证据;当前主要影响是页面不可用、服务端请求负载和日志快速增长。
截图
页面在以下两种状态之间持续切换,难以截取稳定画面:
Network 请求统计和根因代码已在上文提供,可稳定复现。
检查清单