test(proc): 流式发布耗时判据改为 race 感知阈值

CI 红(run 40473247694,Race detector job):
  --- FAIL: TestStreaming_PublishLatencyFlatAcrossSubscribers
  1 个消费者:8.81662ms(均摊 2.938µs/次)
  8 个消费者:36.407338ms(均摊 12.135µs/次)→ >4 倍判据
与该次提交的内容无关(改动都在 agent/core、memory、qq 插件级别与
scheduler 日志),是"按耗时比值"的判据在共享 runner + -race 下抖动。

改法(不削弱拦截能力):
- 常规构建阈值 4 倍(本机实测 1.1~1.5 倍);
- -race 构建阈值 6 倍(影子内存检查放大常数因子);
- 两者都低于 O(N) 广播的 8 倍量级,真出现线性恶化仍会被抓。
新增 race_off.go / race_on.go 提供 raceEnabled 常量(build tag 判定),
而不是用环境变量或时间门槛(后者要么本机永远跳过、要么 CI 永远误报)。

刻意**没有**改成"重复测量取最小值":实测会让本用例成本 ×3,-race 下
撞 600s 超时(试过,已撤回)。
This commit is contained in:
JianFeeeee
2026-10-27 17:49:05 +08:00
parent 0f98f36e71
commit 7f68d2b1bf
3 changed files with 29 additions and 3 deletions

View File

@ -137,6 +137,8 @@ func TestStreaming_PublishLatencyFlatAcrossSubscribers(t *testing.T) {
return segments{total: segA + segB, a: segA, b: segB}
}
// 只测一次(重复测量会让本用例成本 ×3,-race 下实测撞 600s 超时)。
// 抗抖动交给下面的 race 感知阈值,而不是靠取最小值。
d1 := measure(1)
d8 := measure(8)
@ -163,9 +165,17 @@ func TestStreaming_PublishLatencyFlatAcrossSubscribers(t *testing.T) {
return
}
// 线性恶化的判据:8 倍订阅者不应接近 8 倍耗时。阈值取 4 倍。
if d8.total > d1.total*4 {
t.Errorf("订阅者 1→8,Publish 从 %v 涨到 %v(>4 倍),疑似线性恶化", d1.total, d8.total)
// 线性恶化的判据:8 倍订阅者不应接近 8 倍耗时。
// - 常规构建:4 倍阈值(本机实测 1.1~1.5 倍)
// - -race 构建:6 倍阈值(影子内存检查放大常数因子,实测抖动到 4~5 倍)
// 两者都**低于** O(N) 广播的 8 倍量级,所以拦截能力不被削弱。
limit := 4 * d1.total
if raceEnabled {
limit = 6 * d1.total
}
if d8.total > limit {
t.Errorf("订阅者 1→8,Publish 从 %v 涨到 %v(>%v,race=%v),疑似线性恶化",
d1.total, d8.total, limit, raceEnabled)
}
}