Repository navigation
fix(usage): 用量路由回退候选库,修复状态栏无数据 - #2568
xiaozixiaobei wants to merge 2 commits into
Conversation
主库按「有没有 threads 表」挑选,不检查表里有没有行。机器上存在 ~/.codex/sqlite/state_5.sqlite 这类结构完整但 0 行的历史库时,它会排在真正存 会话的 ~/.codex/state_5.sqlite 之前,codex_thread_rollout 在主库查不到会话即 返回 "Thread rollout path is empty",不再尝试其它候选库, /thread-usage-live 与 /thread-usage-history 稳定失败,用量状态栏停在占位符。 改为按候选库顺序回退:命中有效 rollout 即返回,全部落空才返回失败对象;读取 改只读打开,并在打开前过滤不存在的候选。影响面仅这两条用量路由。 Fixes BigPizzaV3#2567
b7e3fb6 to
ed636f9
Compare
|
复核当前 head 本地重新运行既有用量相关测试 3 项通过;额外隔离验证 3 项也通过,覆盖空主库回退、损坏 SQLite 候选后继续回退、NULL/缺失 rollout 继续回退,以及不存在候选不会被创建。history/live 两条读取路径都已验证。 请将核心回退场景正式保留在 发布前已再次核对当前提交的 CI run 38883283061:Windows artifacts:运行中;macOS DMG (universal):通过。 核心回退回归请正式保留,完成后再进入合并候选。 |
BigPizzaV3
left a comment
There was a problem hiding this comment.
复核当前 head cf4b274f,审核通过。此次相对上轮已审版本只新增正式回归,运行时代码未变;此前要求的空首库/无目标行、NULL/空路径/失效 rollout,以及不存在或损坏候选库等场景均已保留在 storage_adapter.rs。
已从当前 head 的隔离源码执行 cargo test --offline --locked -p codex-plus-data --test storage_adapter thread_usage,实际运行 6 项,全部通过,history/live 两条路径均覆盖,且验证了只读查询不会创建不存在的库。当前与 main 5e2762d9 无合并冲突。
新 head 的 workflow run 38930608623 已获维护者批准;代码审核通过,最终合入仍以该 head 的 Windows artifacts 和 macOS universal DMG 完整结果为准。
Fixes #2567
部分机器上用量状态栏长期停在
-- tok/s/缓存命中 --/--。根因不在渲染,而在选库:codex_session_db_path_from_home取「第一个带threads表」的候选库当主库,只看表存在性,不看表里有没有行。机器上同时存在~/.codex/sqlite/state_5.sqlite(结构完整、0 行的历史库)和真正存会话的~/.codex/state_5.sqlite时,前者排在候选序列前面,codex_thread_rollout在主库查不到会话就直接返回Thread rollout path is empty,不再看其它候选库,于是/thread-usage-live与/thread-usage-history稳定失败。改动
crates/codex-plus-data/src/storage.rs的codex_thread_rollout改为按allowed_db_paths顺序回退(主库在首位),命中有效 rollout 即返回,全部落空时才返回失败对象。读取改用SQLITE_OPEN_READ_ONLY,打开前用is_file()过滤不存在的候选。只影响这两条用量路由,删除会话、导出 Markdown、主题等路径不变。验证
~/.codex-session-delete/codex-plus.log中/thread-usage-live从连续 272 次status=failed变为全部status=ok;同进程的/backend/status、/settings/get前后一直正常,可对照。crates/codex-plus-data/tests/storage_adapter.rs,同时验证 history/live:首库结构完整但没有目标行(空库或只有其他会话)、目标行 rollout 为 NULL/空白/不存在的文件,均继续回退到含目标会话及有效 rollout 的候选库。codex_thread_rollout时,3 项新增回归均失败;恢复本 PR 实现后,cargo test -p codex-plus-data --test storage_adapter全部 32 项通过。成功断言包含目标 rollout 路径,以及 1200 输入 token / 1320 总 token,避免仅检查状态。npm run vite:build、macOScargo build --release -p codex-plus-manager及应用签名检查通过。本轮界面启动验收未完成:Launch Services 返回kLSNoExecutableErr;直接执行在 macOS_RegisterApplication阶段中止,尚未验证应用窗口。已知限制
codex_session_db_path_from_home:它挑主库时只看表存在性。该函数同时被zed_remote注册表、会话删除等路径共用,改动面较大,本 PR 未一并处理;若要根治,建议单独评估选库规则(例如按目标会话评估候选库)。threads行(已知的纯 API 模式情形),本改动不覆盖。whale_rollout_path有按-<thread_id>.jsonl扫描sessions/目录的兜底,用量路由暂无同类兜底。