用途:把 unoptimized-query-oracle roachtest 的失败日志缩减为最小可复现 SQL 用例。该 roachtest 会生成随机数据集并两次执行同一“Query of Interest”(不同优化设置),结果不一致即表示 CockroachDB 存在 bug。
主要能力:定位 artifacts 目录中的 params.log、test.log、failure*.log、unoptimized-query-oracle*.log 等文件;从 cockroach.log 提取 git commit,判断是否启用 runtime assertions、metamorphic 设置、环境变量及是否多区域测试;按 commit 构建(./dev build short,必要时加 -- --crdb_test);用 ./cockroach demo 复现;用 ./bin/reduce 缩减;手动简化并统计复现率;最后生成 reduced.sql 与 bisect_run.sh,并可选执行 git bisect。
使用方式:先确认 artifacts 路径,再按步骤执行。关键命令包括 grep "binary: CockroachDB" cockroach.log、git checkout <commit-hash>、./dev build short、./dev build reduce、./bin/reduce -unoptimized-query-oracle -multi-region -chunk 25 -v -file <cleaned-log>,以及 ./cockroach demo --multitenant=false --nodes=9 --insecure --set=errexit=false --no-example-database --format=tsv -f <full-sql-log-file>。reduce 工具须在仓库根目录运行。
适用场景:处理该 roachtest 的 oracle 失败、内部错误、断言失败、panic 或超时,并需要最小复现与定位引入/修复提交时。
限制:许多失败是非确定性的,首次不复现需重试至多 10 次;reduce 可能耗时约一小时;多区域测试需 --nodes=9 并移除 \connect 行;部分设置(如 testing_optimizer_random_seed)通常不可删除;若无法复现或找不到一年内的 good commit,应停止并报告用户。