Skip to content

test(logging): 日志窗口测试等待期限与租约时钟,更正 LSP 日志性能说明 - #1715

Merged
xiaoyumuxi merged 3 commits into
previewfrom
fix/log-window-test-deadlines
Nov 4, 2026
Merged

xiaoyumuxi merged 3 commits into
previewfrom
fix/log-window-test-deadlines

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Collaborator

概要

#1712 合入后的收尾:修复日志窗口相关测试在本机负载高时偶发失败,并更正 Agent Note 里一句不准确的性能说明。生产代码没有改动。

改动

1. 日志窗口真实查询的等待期限改为 10 秒(LogWindowTests.swift、LogWindowReviewTests.swift)

问题:这两个文件里,等待真实 MacLogStore 查询结果的门闩都用 TestGate.waitUntilOpen() 的默认 2 秒。日志窗口的一次查询要在存储的 I/O 队列上依次完成通道解析、过滤解析、写入排空、读文件和 Core 查询。本机同时编译另一个工作树时,LogWindowReviewTests.serverTabShowsOneServerAndClearsOnlyThatServer 在第一次加载服务器日志时等满 2 秒失败(同一测试平时 0.1 秒左右通过)。

修复:

  • LogWindowTests.swift 新增 Duration.logStoreQuery(10 秒),与存储自身的操作租约(MacLogStore.perform 默认 10 秒)一致。
  • 只替换等待真实存储查询结果的门闩:LogWindowTests 14 处、LogWindowReviewTests 4 处。
  • 门闩仍在状态送达时立即打开,通过的测试不会等满期限;测试自己控制释放的门闩(WindowQueryGate.release、防抖测试的 delayRelease 等)保持原期限。

2. 大数据量日志查询测试改用固定租约时钟(LogWindowTests.swift、MacLogStoreTests.swift)

问题:MacLogStoreTests.collectionBudgetKeepsActiveChannelsBeforeOldRotations 读取约 12 MB 的轮转文件,LogWindowTests.realtimeWatermarkCapPauseAndReference 连续查询三批各 10000 条记录。两者用真实 systemUptime 计算 10 秒控制租约,负载高时超过期限,抛出 NSCocoaErrorDomain 3072(操作已取消)。本机复现过一次:44 秒后失败。

修复:这两个测试给 MacLogStore 注入固定的 diagnosticNow: { 0 },租约期限不再取决于机器速度;生产代码的 10 秒期限和取消检查不变。

这个提交与 git 命令轨迹分支(fix/git-command-logging)里的同一提交内容完全相同,两个 PR 先合哪个都不会冲突。

3. Agent Note 更正(2026-11-03-structured-logging-log-window.md)

“LSP 日志标签页”一节原来写“每批耗时随批次大小增长,而不是随缓冲大小增长”,不准确:格式化和文本拼接只随批次增长,但确认缓冲里的记录没变仍要逐条比较身份(整数和共享字符串比较)。改为说明这一点,并写入实测基线作为不移到后台线程的依据。

性能基线(#1712 的 LSP 日志增量文本)

2026-11-04 在本机用 release(-O)构建测得,20000 条记录、约 3.4 MB 文本:

场景 耗时
原来:每次状态发布都全量格式化 58–96 ms
现在:整份重建(打开、切换服务器或级别、新查询、清空时各一次) 约 93 ms
现在:记录不变的发布(状态、摘要、选中) 约 2–4 ms
现在:淘汰 100 条并追加 100 条 约 2 ms

内存:常驻一份约 3.4 MB 的文本,加上每条记录的身份与字节长度索引(20000 × 48 B ≈ 0.96 MB,路径和时间字符串与记录共享存储);原来每次发布都会新分配一份 3.4 MB 的字符串。

验证

  • 通过:
    • .agents/skills/write-stable-tests/scripts/verify-test-stability.sh
    • scripts/agent-notes/verify-agent-notes.sh
    • node scripts/platform-feature-matrix/verify-platform-feature-matrix-change.mjs origin/preview HEAD(没有平台实现路径变化)
    • git diff --check
  • macOS 定向测试(--filter 'LogWindowTests|LogWindowReviewTests|collectionBudgetKeepsActiveChannelsBeforeOldRotations'):
    • scripts/macos/test/test-macos.sh:3 个套件 21 个测试全部通过。
    • test-stability-macos.sh(热构建):21 个测试全部通过,用时 4.1 秒。标为 SLOW 的两个测试是本来就处理大数据量的 realtimeWatermarkCapPauseAndReference(2.1 秒)和 collectionBudgetKeepsActiveChannelsBeforeOldRotations(1.7 秒)。这次只改了它们的租约时钟,测试的数据量和查询都没变。

LogWindowTests 和 LogWindowReviewTests 里等待真实 MacLogStore 查询结果的
门闩都用默认 2 秒。一次查询要在存储的 I/O 队列上依次完成通道解析、过滤
解析、写入排空、读文件和 Core 查询,本机负载高时会超过 2 秒,
serverTabShowsOneServerAndClearsOnlyThatServer 因此超时失败。

新增 Duration.logStoreQuery(10 秒,与存储自身的操作租约一致),只用于
等待真实存储查询的门闩;门闩仍在状态送达时打开,通过的测试不会等满期限。
测试自己控制释放的门闩保持原期限。
MacLogStoreTests.collectionBudgetKeepsActiveChannelsBeforeOldRotations 读取
约 12 MB 的轮转文件,LogWindowTests.realtimeWatermarkCapPauseAndReference
连续查询三批各 10000 条记录。两者都用真实 systemUptime 计算 10 秒控制租约,
本机负载高时超过期限,抛出 NSCocoaErrorDomain 3072(操作已取消)。

为这两个测试注入固定的 diagnosticNow,使租约期限不再取决于机器速度;
生产代码的 10 秒期限和取消检查不变。
原文写“每批耗时随批次大小增长,而不是随缓冲大小增长”,不准确:格式化
和拼接只随批次增长,但确认记录没变仍要逐条比较身份。改为说明这一点,
并写入 2026-11-04 本机 release 构建的实测数字(20000 条、约 3.4 MB):
原来每次发布 58–96 ms,整份重建约 93 ms 只发生一次,记录不变的发布
约 2–4 ms,淘汰 100 条并追加 100 条约 2 ms,作为不移到后台线程的依据。
@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Nov 4, 2026
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 4, 2026 05:25
@lithe-code-review

lithe-code-review Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Lithe Review

结论: ✅ 通过
范围: preview ← fix/log-window-test-deadlines · head: 1d16cd4

未发现需要阻塞合并的问题。

Scope Check

  • 未找到可验证的关联 Issue;按 PR 描述核对测试稳定性修复和性能说明更正。
  • 完整检查了清单中的 4 个文件。查询等待仍由有期限、可取消的门闩控制;两处固定时钟注入未改变数据规模和行为断言。
  • 生产代码、共享契约和用户界面均未修改,不涉及新增上游能力或跨平台实现。

Summary

改动范围集中,等待期限调整保留了事件驱动同步;固定租约时钟消除了这两个数据量测试对机器速度的依赖。独立的租约过期测试仍然保留。性能说明补充了记录身份比较的成本及作者提供的测量数据。

Verification

  • 静态对比了 5705732...1d16cd4 的全部变更,并追踪 TestGate、LogWindowModel、MacLogStore.perform / LogOperation、文本增量更新和 macOS CI 测试入口。
  • PR 正文报告:定向 21 项测试通过,计时运行通过,测试稳定性、Agent Notes、平台矩阵变更检查及 diff 检查通过;这些结果未由本次审查重新执行。
  • 已提供的检查状态中,Verify Agent Notes 成功;Swift tests、CI tooling tests 仍有进行中或已取消记录,尚无完整成功结果。
  • 本次严格只读,未运行仓库代码、测试或性能测量;高负载稳定性及性能数字未独立验证。

@xiaoyumuxi
xiaoyumuxi merged commit 1d46283 into preview Nov 4, 2026
14 of 27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: high ghfind author score; see https://ghfind.com

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant