|
32 | 32 | | cross-validate | 多 section 跨运行时校验 | go-test + java-test + cpp-build | |
33 | 33 | | differential-fuzz | CI 模式 100 轮三引擎差异模糊测试 | go-test + java-test + cpp-build | |
34 | 34 |
|
35 | | -另有独立 nightly workflow: |
| 35 | +另有独立 nightly / daily workflow: |
36 | 36 |
|
37 | 37 | - **Nightly differential-fuzz**(`.github/workflows/nightly-diff-fuzz.yml`):nightly 运行三引擎差异比对,固定 10000 轮(手动触发可通过 `inputs.rounds` 覆盖);不再按工作日/周末分流,CI 通过 shell `timeout` 在 340min 处保护 step 流程,发现分歧或 cancelled 时均会自动创建 GitHub issue |
| 38 | +- **Daily sanitized-fuzz**(`.github/workflows/daily-sanitized-fuzz.yml`):每日运行 pine-cpp 的 ASan/UBSan + TSan 两个 sanitizer-instrumented differential-fuzz pass,与 Nightly differential-fuzz 互补分工——后者用 Release 二进制追求原始吞吐(10k 轮/不同 seed 覆盖),前者用 sanitizer 加持换取"内存/竞态类 bug 在首次触发时就能拿到完整栈"的深度诊断能力。两 pass 均采用两层 timeout 设计:`differential-fuzz.py` 的 `--time-budget-seconds` 是内层 pacing 机制,预算耗尽即停止发起新轮、仍正常输出 `Results:` 汇总(标注为部分覆盖),外层 CI `timeout` 降级为纯 hang 保护(只在进程真正卡死或脚本崩溃时触发)。因此 evaluate step 判定的 incomplete 状态语义单一化:不再包含"慢但健康"的情况,只意味着真实 wedge 或脚本 crash。具体轮数/预算分钟数以 `.github/workflows/daily-sanitized-fuzz.yml` 文件注释为准(禁止在本指南中硬编码,历史标定值已在该文件多次因 runner 吞吐方差重新校准)。 |
38 | 39 | - **Nightly cross-runtime benchmark**(`.github/workflows/nightly-benchmark.yml`):每日 22:30 UTC+8 运行 `scripts/bench-cross-runtime.sh`,对比 Go/Java/C++ 三运行时在多维矩阵下的最大吞吐:DAG 规模(默认 `5,50,100,200`)× 存储模式(`row,column`)× 算子类型(`cpu,io,mixed`,对应新增的 `transform_bench_cpu` / `transform_bench_sleep` 与 lua 混合管道)× 可选 fan-out 并行度。仅运行最大吞吐阶段(不再有顺序延迟与固定 QPS=500 阶段)。Job 超时提升为 90min,自动下载上次成功 artifact 并通过 `scripts/bench-compare.py` 生成 delta 报告,`scripts/bench-analyze.py` 提供单次运行的多维度分析(runtime ranking / parallelism effect / storage effect)。完成后通过 Bark 推送通知,运行前停止 runner 上非必要服务以提升隔离性 |
39 | 40 |
|
40 | 41 | 所有质量检查集中在 CI workflow 中。Release workflow 通过 `workflow_run` 依赖 CI 结果,不重复任何检查。 |
@@ -146,6 +147,16 @@ CI 中 fuzz 运行时间为 30s/入口,并使用 `-run=^$ -parallel=4` 固定 |
146 | 147 | - **跨存储模式比较**:每个 fixture 自动在 row 和 column 两种 storage_mode 下执行,输出在同一引擎内进行 row-vs-column 等价比较 |
147 | 148 | - **Stabilize sort 条件收紧**:仅在 operator 有非 skip 的 `common_input` 时才附加 skip 字段,避免不必要的 skip 导致非确定性 |
148 | 149 | - **Stratified 报告**:summary 输出 `row=A/B column=C/D` pass/fail 分布 + per-dimension 覆盖计数 |
| 150 | +- **`--time-budget-seconds`(wall-clock 优雅停止开关)**:默认 0(关闭),CI 模式与 Nightly 模式行为不受影响。非 0 时一旦耗尽即停止发起新轮,仍正常输出 `Results:` 汇总(标注为 `N/M rounds (time budget)` 而非 `M rounds`),使慢 runner 降级为"轮数变少但信号完整"而非丢失整个 pass。当前唯一消费者是 `daily-sanitized-fuzz.yml`(见下)。**改动 `Results:` 输出格式前必须先 grep 所有消费者**(当前含 `nightly-diff-fuzz.yml` 与 `daily-sanitized-fuzz.yml` 的 evaluate step),确认改动只在 `^Results:` 前缀之后扩展,不能变动前缀本身。 |
| 151 | + |
| 152 | +### Daily sanitized-fuzz(ASan/TSan 深度诊断) |
| 153 | + |
| 154 | +`.github/workflows/daily-sanitized-fuzz.yml` 每日 schedule 运行 pine-cpp 的 ASan+UBSan 与 TSan 两个 sanitizer-instrumented differential-fuzz pass,复用同一份 `scripts/differential-fuzz.py`: |
| 155 | + |
| 156 | +- **与 Nightly differential-fuzz 的分工**:Nightly 用 Release 二进制追求原始吞吐覆盖(10k 轮/不同 seed),本 workflow 用 sanitizer 加持换取"内存越界/UAF/竞态类 bug 在首次触发时即可拿到完整栈"的深度诊断能力,二者互补而非替代关系。 |
| 157 | +- **两层 timeout 设计**:内层 `--time-budget-seconds` 是 pacing 机制,预算耗尽即停止发起新轮并正常输出 `Results:` 汇总;外层 CI `timeout` 降级为纯 hang 保护,只在进程真正卡死或脚本崩溃时才触发。 |
| 158 | +- **incomplete 信号语义单一化**:evaluate step 判定某个 pass "incomplete"(无 `Results:` 汇总行)现在只意味着真实 wedge 或脚本 crash——"慢但健康"的 runner 已经被内层 budget 兜住,不再落入 incomplete 分支。evaluate step 会从 `Results:` 行 parse 实际轮数(`N/M` 形式)写入 summary 表,使部分覆盖在报告中可见。 |
| 159 | +- 具体的 schedule cron、ASan/TSan 轮数、in-script budget / 外层 timeout / step timeout / job 超时的分钟数以 `.github/workflows/daily-sanitized-fuzz.yml` 文件本身(含其头部注释的标定依据)为准,禁止在本指南中硬编码——这些数值已因 runner 吞吐方差多次重新校准,注释里记录了数据来源的观测窗口。 |
149 | 160 |
|
150 | 161 | ### DAG 差异模糊测试(DAG Differential Fuzz) |
151 | 162 |
|
@@ -279,6 +290,7 @@ Pine-Java 通过 Sonatype Central Portal 发布到 Maven Central(release profi |
279 | 290 |
|
280 | 291 | - CI 配置:`.github/workflows/ci.yml` |
281 | 292 | - Nightly differential-fuzz:`.github/workflows/nightly-diff-fuzz.yml` |
| 293 | +- Daily sanitized-fuzz:`.github/workflows/daily-sanitized-fuzz.yml` |
282 | 294 | - Nightly cross-runtime benchmark:`.github/workflows/nightly-benchmark.yml` |
283 | 295 | - Release 配置:`.github/workflows/release.yml` |
284 | 296 | - Go lint 配置:`.golangci.yml` |
|
0 commit comments