mirror of
https://github.com/pgsty/minio.git
synced 2026-09-15 23:14:04 +03:00
docs: record R4-R8 integration review and validation
Signed-off-by: Feng Ruohang <rh@vonng.com>
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
# R4–R8 集成核验
|
||||
|
||||
## 结论与范围
|
||||
|
||||
2026-09-16,R5、R6、R8 的修复在已包含 R4、R7 的 main 基线上完成集成。
|
||||
本地完整 `cmd`、`internal` 测试、相关 race 检查、仓库 verifiers、构建和
|
||||
HTTP 超时进程探针均通过。环境中的真实 `claude-opus-5`(effort `max`)独立
|
||||
阅读合并差异与调用链,结论为 **GO_WITH_NONBLOCKING_NOTES,零阻断项**。
|
||||
|
||||
本记录对应 main 合并前的代码核验。最终 PR 的 Linux CI、DCO 和合并结果以该
|
||||
PR 的实际提交及检查为准;这里的本地结果不代表发布、部署或多站点生产验收。
|
||||
|
||||
## 提交对应关系
|
||||
|
||||
基线:`9f3037e941a49ab4cd8a0eed7c0f01083fbe4bbe`。
|
||||
|
||||
| 问题 | 原修复提交 | 集成提交 | 行为 |
|
||||
| --- | --- | --- | --- |
|
||||
| R4 | PR [#193](https://github.com/pgsty/silo/pull/193),已在基线 | `af2b1794d38d9e70e1d2c3ee692426e4b6cab4bd`(merge) | SSE-KMS 复制保留标签修订时间 |
|
||||
| R7 | PR [#194](https://github.com/pgsty/silo/pull/194),已在基线 | `9f3037e941a49ab4cd8a0eed7c0f01083fbe4bbe`(merge) | 复制元数据恢复不再重新写入传输用 aws-chunked |
|
||||
| R5 | `115fe8b12329d147adbaf817faa1737392ecbf9b` | `680eac66e40b0980bc20e70d7ad34185096e63f5` | 删除标签推进修订,接收端抵御乱序事件,重试及 ACK 保留新状态 |
|
||||
| R6 | `cf381a7151ef25fc95ace5fedcd767fa19410de2` | `0c61128d23f05ce6b37e7ace713c3ffbfb68f4cb` | 旧形态 marker purge 正确分类,MRF 恢复 marker 并保留重试次数 |
|
||||
| R6 核验记录 | `d38edb2c46182d3a8fa96e040604493d20a4b478` | `aea3882c95d16ec5598a07b40d593e04054137a9` | 保存 v3 共识及验证边界 |
|
||||
| R8 | `0d48d32d7e038ae1ea5966f3d7e0cb86780a6311` | `055030ea53ca92ee22ce1e601ef4757c247edde8` | 配置绑定到读头绝对超时,正文继续采用滚动空闲超时 |
|
||||
|
||||
各原任务先取得 Opus 方案共识,再实施修复。原始方案、实现复核及验证记录保留在
|
||||
[R5](../r5/verification.md)、[R6](../r6/README.md)、[R8](../r8/README.md)。
|
||||
R5、R6、R8 原任务又分别只读核验了集成后的交叉影响,未发现新增生产阻断项。
|
||||
|
||||
集成使用 `git cherry-pick -x -s`,保留原作者、来源及 DCO。后续
|
||||
`80684fed59f556d579e268c5a855d936c1347b68` 仅处理两类贡献规范问题:
|
||||
|
||||
- 六个新建测试文件统一使用实际贡献者姓名及 AGPL-3.0-or-later 头部;从
|
||||
`package` 开始的内容逐字节不变,Linux build tag 保留。
|
||||
- 按 CONTRIBUTING 的规则更新兼容标识清单。唯一新增条目是 R6 测试拼接既有
|
||||
replication ARN 所用的 `arn:minio:replication::`,没有新增协议名称或生产行为。
|
||||
|
||||
22 个源码/测试文件的最终哈希见 [manifest.json](manifest.json)。共享文件中的
|
||||
R5、R6 补丁与原修复具有相同稳定 patch ID;其余源文件直接比较,六个测试仅允许
|
||||
上述头部差异。[等价检查](evidence/integration-equivalence.json)全部通过。
|
||||
|
||||
## Opus 集成复核与处置
|
||||
|
||||
实际 CLI 为 2.1.270,显式指定 `claude-opus-5 --effort max`;只允许 Read、Grep、
|
||||
Glob,未执行测试或修改代码。实际返回模型为 `claude-opus-5`,进程和结果均成功。
|
||||
复核基于 `055030ea53ca92ee22ce1e601ef4757c247edde8` 的 22 个文件及完整差异;
|
||||
此后的代码变化仅为上文已证明等价的头部与兼容清单调整。
|
||||
|
||||
原文、调用元数据及提示词分别见 [复核结果](evidence/opus-review.md)、
|
||||
[metadata](evidence/opus-integration.metadata.json)、[prompt](evidence/opus-integration.prompt.md)。
|
||||
保留原文中的判断,再用直接证据逐项处置,避免把模型意见当作测试结果:
|
||||
|
||||
| 非阻断意见 | 核验与决定 |
|
||||
| --- | --- |
|
||||
| 非法或空的历史标签时间戳可能使复制失败并重试 | 保留 R5 共识中的失败关闭行为;历史异常数据修复另行处理 |
|
||||
| 带标签修订的版本在 resync 时可能多一次 metadata COPY | R5 已接受的可靠性成本;正常 COMPLETED 路径保持原有门控 |
|
||||
| purge 审计状态由 COMPLETE 规范为 COMPLETED,统计开始记录实际目标结果 | R6 的预期行为;后续发布说明应告知审计/指标使用者 |
|
||||
| 配置的较短 ReadHeaderTimeout 同时缩短 TLS 握手窗口 | Go net/http 的预期语义,已在 R8 共识中说明 |
|
||||
| 新增多池标签测试单独运行可能缺少全局初始化 | **未成立**:精确单独运行通过;`consistencyPools` 经 `prepareErasurePoolsWithContext` → `initObjectLayer` → `newTestObjectLayer` 调用 `initAllSubsystems`。保留测试原样 |
|
||||
| 审计 fixture 重复取消可能输出栈信息 | 本地完整及 race 测试通过;不扩大本次生产修复范围 |
|
||||
| 新测试文件头部应按实际贡献者整理 | 已在 `80684fed` 修正,测试代码及 build tag 不变 |
|
||||
|
||||
## 本地直接验证
|
||||
|
||||
下表全部针对 `80684fed59f556d579e268c5a855d936c1347b68`,未使用额外的源码或
|
||||
容量 overlay;测试代码自身的容量 fixture 保留。限制并行度仅为
|
||||
`GOMAXPROCS=4`、`GOFLAGS=-p=2`,并使用
|
||||
仓库 CI 的 `MINIO_API_REQUESTS_MAX=10000`。详细命令、时间和日志哈希在
|
||||
[validation-results.json](evidence/validation-results.json)。
|
||||
|
||||
| 检查 | 结果 |
|
||||
| --- | --- |
|
||||
| `make verifiers`:lint、生成文件、rebrand guard | 通过,76.9 秒;可选 typos 工具按现有 Makefile 规则跳过 |
|
||||
| `make build`、`./silo --version` | 通过,产物为 silo |
|
||||
| `CGO_ENABLED=0 go test -p 2 ./cmd ./internal/... -count=1 -timeout=30m` | 全部通过,340.2 秒,50 个有测试的包 |
|
||||
| `CGO_ENABLED=1 go test -race`,cmd/deadlineconn/http 中变更测试的函数集合 | 通过,46.3 秒;Linux build tag 用例由最终 Linux CI 覆盖 |
|
||||
| `TestAPIPoolsTaggingReplicaDeletion` 精确单独执行 | 通过,无需其他测试预先运行 |
|
||||
| 实际 silo 进程的 CLI/环境变量读头超时探针 | 两种配置均在 100ms 读头限制下拒绝 400ms 才完成的请求头;空闲超时为 2s,随后健康请求成功 |
|
||||
|
||||
进程探针使用二进制 SHA-256
|
||||
`1cc536f1a3c8d8372ff2d5b140b1fd2bc98a299324fea0f73f67288d48104ce4`。
|
||||
原始输出见 [runtime-probe.json](evidence/runtime-probe.json)。
|
||||
|
||||
各子任务较早遇到的磁盘容量不足或筛选测试初始化问题,不作为这次通过的证据。
|
||||
本地完整测试已重新执行并成功;原失败记录仍保留在各自调查档案。
|
||||
|
||||
## 验收边界
|
||||
|
||||
- 最终 PR 必须通过实际提交的全部仓库检查,尤其 Linux internal 测试、完整 cmd
|
||||
测试、构建/vet、lint/生成文件、交叉编译、S3 Select race、DCO 和漏洞检查。
|
||||
- 既有无时间戳对象、异常时间戳、标签筛选的目标选择、任意站点时钟偏差等不由本次
|
||||
修复追溯重建。共享状态解析器的历史限制按 R6 v3 共识在写入点规避。
|
||||
- R8 原先未完成的 S3 长传输脚本不计为通过;本次进程探针验证配置生效,不替代
|
||||
S3 长传输、独立多进程、多节点或跨区域生产验收。
|
||||
- 本次不引入依赖变更或上游 MinIO 兼容硬门槛;R9 不属于这五项修复。
|
||||
@@ -0,0 +1,79 @@
|
||||
ok github.com/minio/minio/cmd 320.458s
|
||||
ok github.com/minio/minio/internal/amztime 1.605s
|
||||
ok github.com/minio/minio/internal/arn 0.392s
|
||||
ok github.com/minio/minio/internal/auth 0.440s
|
||||
ok github.com/minio/minio/internal/bpool 0.422s
|
||||
ok github.com/minio/minio/internal/bucket/bandwidth 0.450s
|
||||
ok github.com/minio/minio/internal/bucket/cors 0.484s
|
||||
ok github.com/minio/minio/internal/bucket/encryption 0.644s
|
||||
ok github.com/minio/minio/internal/bucket/lifecycle 0.647s
|
||||
ok github.com/minio/minio/internal/bucket/object/lock 0.653s
|
||||
ok github.com/minio/minio/internal/bucket/replication 0.496s
|
||||
ok github.com/minio/minio/internal/bucket/versioning 0.449s
|
||||
ok github.com/minio/minio/internal/cachevalue 5.457s
|
||||
? github.com/minio/minio/internal/color [no test files]
|
||||
ok github.com/minio/minio/internal/config 0.656s
|
||||
? github.com/minio/minio/internal/config/api [no test files]
|
||||
? github.com/minio/minio/internal/config/batch [no test files]
|
||||
? github.com/minio/minio/internal/config/browser [no test files]
|
||||
? github.com/minio/minio/internal/config/callhome [no test files]
|
||||
ok github.com/minio/minio/internal/config/compress 0.624s
|
||||
ok github.com/minio/minio/internal/config/dns 0.731s
|
||||
? github.com/minio/minio/internal/config/drive [no test files]
|
||||
ok github.com/minio/minio/internal/config/etcd 1.015s
|
||||
? github.com/minio/minio/internal/config/heal [no test files]
|
||||
ok github.com/minio/minio/internal/config/identity/ldap 0.593s
|
||||
ok github.com/minio/minio/internal/config/identity/openid 0.675s
|
||||
? github.com/minio/minio/internal/config/identity/openid/provider [no test files]
|
||||
? github.com/minio/minio/internal/config/identity/plugin [no test files]
|
||||
? github.com/minio/minio/internal/config/identity/tls [no test files]
|
||||
ok github.com/minio/minio/internal/config/ilm 1.057s
|
||||
? github.com/minio/minio/internal/config/lambda [no test files]
|
||||
ok github.com/minio/minio/internal/config/lambda/event 0.485s
|
||||
? github.com/minio/minio/internal/config/lambda/target [no test files]
|
||||
ok github.com/minio/minio/internal/config/notify 0.752s
|
||||
? github.com/minio/minio/internal/config/policy/opa [no test files]
|
||||
? github.com/minio/minio/internal/config/policy/plugin [no test files]
|
||||
? github.com/minio/minio/internal/config/scanner [no test files]
|
||||
ok github.com/minio/minio/internal/config/storageclass 0.585s
|
||||
ok github.com/minio/minio/internal/config/subnet 0.582s
|
||||
ok github.com/minio/minio/internal/crypto 0.843s
|
||||
ok github.com/minio/minio/internal/deadlineconn 4.934s
|
||||
ok github.com/minio/minio/internal/disk 0.418s
|
||||
ok github.com/minio/minio/internal/dsync 131.144s
|
||||
ok github.com/minio/minio/internal/etag 0.504s
|
||||
ok github.com/minio/minio/internal/event 0.595s
|
||||
ok github.com/minio/minio/internal/event/target 0.957s
|
||||
ok github.com/minio/minio/internal/grid 7.616s
|
||||
ok github.com/minio/minio/internal/handlers 0.717s
|
||||
ok github.com/minio/minio/internal/hash 0.700s
|
||||
? github.com/minio/minio/internal/hash/sha256 [no test files]
|
||||
ok github.com/minio/minio/internal/http 13.643s
|
||||
? github.com/minio/minio/internal/init [no test files]
|
||||
ok github.com/minio/minio/internal/ioutil 1.921s
|
||||
ok github.com/minio/minio/internal/jwt 0.423s
|
||||
ok github.com/minio/minio/internal/kms 0.538s
|
||||
ok github.com/minio/minio/internal/lock 1.077s
|
||||
ok github.com/minio/minio/internal/logger 0.546s
|
||||
? github.com/minio/minio/internal/logger/message/audit [no test files]
|
||||
? github.com/minio/minio/internal/logger/target/console [no test files]
|
||||
? github.com/minio/minio/internal/logger/target/http [no test files]
|
||||
? github.com/minio/minio/internal/logger/target/kafka [no test files]
|
||||
? github.com/minio/minio/internal/logger/target/loggertypes [no test files]
|
||||
? github.com/minio/minio/internal/logger/target/testlogger [no test files]
|
||||
ok github.com/minio/minio/internal/lsync 10.501s
|
||||
? github.com/minio/minio/internal/mcontext [no test files]
|
||||
? github.com/minio/minio/internal/mountinfo [no test files]
|
||||
? github.com/minio/minio/internal/net [no test files]
|
||||
? github.com/minio/minio/internal/once [no test files]
|
||||
ok github.com/minio/minio/internal/pubsub 0.511s
|
||||
ok github.com/minio/minio/internal/rest 0.525s
|
||||
ok github.com/minio/minio/internal/ringbuffer 1.316s
|
||||
ok github.com/minio/minio/internal/s3select 0.603s
|
||||
ok github.com/minio/minio/internal/s3select/csv 0.446s
|
||||
ok github.com/minio/minio/internal/s3select/json 0.439s
|
||||
ok github.com/minio/minio/internal/s3select/jstream 0.417s
|
||||
? github.com/minio/minio/internal/s3select/parquet [no test files]
|
||||
? github.com/minio/minio/internal/s3select/simdj [no test files]
|
||||
ok github.com/minio/minio/internal/s3select/sql 0.425s
|
||||
ok github.com/minio/minio/internal/store 1.451s
|
||||
@@ -0,0 +1,50 @@
|
||||
[
|
||||
{
|
||||
"file": "cmd/replication-delete-mrf_test.go",
|
||||
"before_sha256": "5e160f7e19cbbb8cd5fa4e7ffd9cff9e09361b3fc4c5ee5ae61458f99c777781",
|
||||
"after_sha256": "6fcfaf505d28f98e42dff9c0d965895be2c2d112e9e996220d424aea1f76d691",
|
||||
"body_sha256": "5b3cecec74273540f4a5f82ca55e8a28545d0252822af3568f7e36b19011bda8",
|
||||
"body_identical": true,
|
||||
"build_prefix_preserved": true
|
||||
},
|
||||
{
|
||||
"file": "cmd/replication-delete-operation_test.go",
|
||||
"before_sha256": "2888a04a543324776041316de2821f388d28c3c1a6f5d0031e5ac9d34f58d504",
|
||||
"after_sha256": "2e674cab5ca4dbc38cb2c1ddcca117269276e6419e1869c154c3bd6a05676715",
|
||||
"body_sha256": "7921af42a9f123450e3e567d0bf65cd030678404709c77fde4a9cbb366230c35",
|
||||
"body_identical": true,
|
||||
"build_prefix_preserved": true
|
||||
},
|
||||
{
|
||||
"file": "cmd/server_deadline_config_test.go",
|
||||
"before_sha256": "1013157f83baa5f7882ec2d41c7b1fccb9e05fb418d0fa61263953037c9698c4",
|
||||
"after_sha256": "a8259d273922a8973b44d9a468791761d373fe265fff8b2b53871e4626b11405",
|
||||
"body_sha256": "5714a9275aee7230d54ba8ed03e3705a3cf6e150bda122929a9131b4b2b8dd5c",
|
||||
"body_identical": true,
|
||||
"build_prefix_preserved": true
|
||||
},
|
||||
{
|
||||
"file": "internal/deadlineconn/deadlineconn_strict_test.go",
|
||||
"before_sha256": "f405690c9ff044595f48323d68f4a9b33ce695b3ad6820f54f17151067bfae5e",
|
||||
"after_sha256": "b4aec28c5daddb36e6ebb98dd8af2a44b7a2c48f0660068534f69669609f67a7",
|
||||
"body_sha256": "ab2b54e29ed34de6e59ba2fa4984d61ed5f93d74ae4f6cd22dd44ba77a37e569",
|
||||
"body_identical": true,
|
||||
"build_prefix_preserved": true
|
||||
},
|
||||
{
|
||||
"file": "internal/http/dial_deadline_linux_test.go",
|
||||
"before_sha256": "0939d05b72a09760d53fcdf249775989e3f89bca824b9961d0b2a657ebfdf41e",
|
||||
"after_sha256": "c4c83bda92ba9bac53166453920456134b3d8265cd59101b4203067c67eca59e",
|
||||
"body_sha256": "fac091ef08f29fe32c2668eccd8cd505106c9fe3c4715e4c3ed9063d4b71c86e",
|
||||
"body_identical": true,
|
||||
"build_prefix_preserved": true
|
||||
},
|
||||
{
|
||||
"file": "internal/http/server_deadline_test.go",
|
||||
"before_sha256": "a6e687b3904a876fa92a4c5b86453159f3e5a38a4b9412dc213c7772f47fbf0b",
|
||||
"after_sha256": "87303cc389bf1cf759898489f06b001073de2dd9c4b3687c4eca14aa186b62ab",
|
||||
"body_sha256": "20b238f34090c356b2254388e863d77d0a316f33b849291d15d94fad260f23dd",
|
||||
"body_identical": true,
|
||||
"build_prefix_preserved": true
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"head": "80684fed59f556d579e268c5a855d936c1347b68",
|
||||
"checks": {
|
||||
"r6_shared_file_patch": true,
|
||||
"r5_shared_file_patch": true,
|
||||
"cmd/erasure-object.go": true,
|
||||
"cmd/erasure-server-pool-consistency.go": true,
|
||||
"cmd/erasure-server-pool.go": true,
|
||||
"cmd/object-handlers-common.go": true,
|
||||
"cmd/object-handlers.go": true,
|
||||
"cmd/object-multipart-handlers.go": true,
|
||||
"cmd/replication-tagging-order_test.go": true,
|
||||
"cmd/replication-tagging-sender_test.go": true,
|
||||
"cmd/bucket-replication-utils.go": true,
|
||||
"cmd/replication-delete-marker_test.go": true,
|
||||
"cmd/replication-delete-operation_test.go": true,
|
||||
"cmd/replication-delete-mrf_test.go": true,
|
||||
"cmd/common-main.go": true,
|
||||
"cmd/server-main.go": true,
|
||||
"internal/deadlineconn/deadlineconn.go": true,
|
||||
"internal/http/listener.go": true,
|
||||
"internal/http/server.go": true,
|
||||
"cmd/server_deadline_config_test.go": true,
|
||||
"internal/deadlineconn/deadlineconn_strict_test.go": true,
|
||||
"internal/http/dial_deadline_linux_test.go": true,
|
||||
"internal/http/server_deadline_test.go": true,
|
||||
"only_reviewed_hygiene_changes": true,
|
||||
"dco:80684fed59f556d579e268c5a855d936c1347b68": true,
|
||||
"dco:055030ea53ca92ee22ce1e601ef4757c247edde8": true,
|
||||
"dco:aea3882c95d16ec5598a07b40d593e04054137a9": true,
|
||||
"dco:0c61128d23f05ce6b37e7ace713c3ffbfb68f4cb": true,
|
||||
"dco:680eac66e40b0980bc20e70d7ad34185096e63f5": true
|
||||
},
|
||||
"all_pass": true
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
ok github.com/minio/minio/cmd 1.583s
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"command": [
|
||||
"go",
|
||||
"test",
|
||||
"-p",
|
||||
"2",
|
||||
"./cmd",
|
||||
"-run",
|
||||
"^TestAPIPoolsTaggingReplicaDeletion$",
|
||||
"-count=1",
|
||||
"-timeout=2m"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"seconds": 5.096,
|
||||
"log": "/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/isolated-pools-before.log",
|
||||
"log_sha256": "f014a1a72dda7b973cd1e0b7e77c70b470eeebca0d04805d98f07c2622c87b1e"
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
Checking dependencies
|
||||
Building Silo binary to './silo'
|
||||
@@ -0,0 +1,7 @@
|
||||
Running lint check
|
||||
0 issues.
|
||||
typos binary is not found.. skipping..
|
||||
compatibility manifest: imports=119 env=428 metrics=19 headers=87 routes=224 roots=1 grid=3 storage=16 policy=59 brand=181 sha256=ad05829578cf879b462a12fa65f3c10c8c7c6aa8d6c329e04779459eec2645be
|
||||
Silo rebrand compatibility baseline is unchanged
|
||||
Silo delivery and runtime rebrand checks passed
|
||||
docker entrypoint argv compatibility tests passed
|
||||
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"candidate": "055030ea53ca92ee22ce1e601ef4757c247edde8",
|
||||
"base": "9f3037e941a49ab4cd8a0eed7c0f01083fbe4bbe",
|
||||
"requested_model": "claude-opus-5",
|
||||
"requested_effort": "max",
|
||||
"cli_version": "2.1.270",
|
||||
"command": [
|
||||
"/opt/homebrew/bin/claude",
|
||||
"--print",
|
||||
"--model",
|
||||
"claude-opus-5",
|
||||
"--effort",
|
||||
"max",
|
||||
"--safe-mode",
|
||||
"--permission-mode",
|
||||
"plan",
|
||||
"--tools",
|
||||
"Read,Grep,Glob",
|
||||
"--strict-mcp-config",
|
||||
"--no-session-persistence",
|
||||
"--add-dir",
|
||||
"/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab",
|
||||
"--add-dir",
|
||||
"/Users/vonng/pgsty/silo",
|
||||
"--output-format",
|
||||
"stream-json",
|
||||
"--verbose"
|
||||
],
|
||||
"source_sha256": {
|
||||
"cmd/bucket-replication-utils.go": "365641c760901641e8320cc5123697ab92a46f1add612048b991ed2d1cfad43b",
|
||||
"cmd/bucket-replication.go": "2e766c5946dcabaea79455b50a8e426f404e55c92dcbccbe28d55906e2e43843",
|
||||
"cmd/common-main.go": "f8777fe8a07d175aceee07b4dd13792b2384449c404c004c38a06893be997843",
|
||||
"cmd/erasure-object.go": "4bc848685ea714d88cabbd5d1b8585fbcc06f7b19c775e1a811030e783d0e1a4",
|
||||
"cmd/erasure-server-pool-consistency.go": "d2736ef6bffbb5c5758eba8df38f8d4ecb888a838ab0de8ad3cf015c051f8ad7",
|
||||
"cmd/erasure-server-pool.go": "87ad0b25dfa3081d0e63d0073b788614a9c88e2498a2ce0956b93f8a0a03ef53",
|
||||
"cmd/object-handlers-common.go": "101bd7d7447072d13fed50983b69b562e4725632645e623d7fdd490f388ecdec",
|
||||
"cmd/object-handlers.go": "61897a260f3f5f660f41edcb50956c60e914ef98f9a987da824f16d78171fde2",
|
||||
"cmd/object-multipart-handlers.go": "d9622c69c540ab32dd23916e3f534b6886473a98370c9dd17673e69a423b2a7e",
|
||||
"cmd/replication-delete-marker_test.go": "d967787804d558ac6266b113228fdf4a4f9fcb7cab39138a4fb07558814ccca4",
|
||||
"cmd/replication-delete-mrf_test.go": "5e160f7e19cbbb8cd5fa4e7ffd9cff9e09361b3fc4c5ee5ae61458f99c777781",
|
||||
"cmd/replication-delete-operation_test.go": "2888a04a543324776041316de2821f388d28c3c1a6f5d0031e5ac9d34f58d504",
|
||||
"cmd/replication-tagging-order_test.go": "c8260b4ccf82fa615e1e24b35a07f2d1aacbcf776e5c6f9dadffea4a09ad6ea8",
|
||||
"cmd/replication-tagging-sender_test.go": "3770a1a48a6efe58fe8127e1e4fdf6bd7cf171e17db20f15222ea2f7b85db1af",
|
||||
"cmd/server-main.go": "04c265de211412ba0297396928096d7f2d971244a957a3126154846035263514",
|
||||
"cmd/server_deadline_config_test.go": "1013157f83baa5f7882ec2d41c7b1fccb9e05fb418d0fa61263953037c9698c4",
|
||||
"internal/deadlineconn/deadlineconn.go": "b9272ef640f1d4403b3d0af6cdbaba9186c51ad9a0226dfe449e8ef738e1ec4b",
|
||||
"internal/deadlineconn/deadlineconn_strict_test.go": "f405690c9ff044595f48323d68f4a9b33ce695b3ad6820f54f17151067bfae5e",
|
||||
"internal/http/dial_deadline_linux_test.go": "0939d05b72a09760d53fcdf249775989e3f89bca824b9961d0b2a657ebfdf41e",
|
||||
"internal/http/listener.go": "49628575367f6ab9b6986caf594726d74d370f7d2ac4eed582903600b6eb3fa2",
|
||||
"internal/http/server.go": "b7b0355f2781f8c5f7c77bc910cd4180cd3e5f22a87de41bd35ef119d36b4cdf",
|
||||
"internal/http/server_deadline_test.go": "a6e687b3904a876fa92a4c5b86453159f3e5a38a4b9412dc213c7772f47fbf0b"
|
||||
},
|
||||
"diff_sha256": "d8c4e60f9e4a5b1338f3e6e07b758b1bb279db80eec26847e3b35fde0d049485",
|
||||
"prompt_sha256": "f95edcf71afedceab190ff57bfbec812b06c8c18b5370d887131a760228c2b2c",
|
||||
"started_at": "2026-09-15T16:41:37.757693+00:00",
|
||||
"status": "completed",
|
||||
"exit_code": 0,
|
||||
"actual_models": [
|
||||
"claude-opus-5"
|
||||
],
|
||||
"finished_at": "2026-09-15T16:53:09.761932+00:00",
|
||||
"raw_sha256": "3e1a45ebdf3f4420fb05647bb383c00d0a86452a6c357a92679485c99d8f4eb3",
|
||||
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"result_subtype": "success",
|
||||
"is_error": false
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
Independently review the complete SILO R4-R8 integration candidate for a user-authorized merge to main. You are the real Claude Opus reviewer; provide your own conclusion from source inspection. Read-only: no edits, no GitHub actions, no test execution claims.
|
||||
|
||||
Exact candidate: 055030ea53ca92ee22ce1e601ef4757c247edde8; integration branch codex/merge-r4-r8. Base: 9f3037e941a49ab4cd8a0eed7c0f01083fbe4bbe, already contains separately reviewed and CI-accepted R4 (SSE-KMS tag timestamp) and R7 (replication metadata/aws-chunked). This candidate adds the final R5, R6, and R8 local repairs, cherry-picked without conflicts and with provenance/DCO preserved.
|
||||
|
||||
Read /Users/vonng/pgsty/silo/AGENTS.md and CONTRIBUTING.md. The maintained PGSTY stack is the release target; upstream MinIO compatibility is best effort. Read /Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/integration-code.diff and /Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/reviewed-source.json, then inspect complete relevant functions and tests in this worktree. Each repair already has real same-version Opus plan consensus: docs/investigations/r5/plan-v2.md and consensus.md; r6/plan-v3.md and consensus.md; r8/plan-v2.md and consensus.md. Prior implementation reviews and validation reports are supporting evidence, not substitutes for this integration review. The R6 v2 multi-target parser proof was disproved by a real storage counterexample and fixed only after v3 consensus; verify the final empty creation-update invariant.
|
||||
|
||||
Focus on concrete integration correctness:
|
||||
1. R5 tag revision persistence and empty/nonempty ordering through COPY, PUT, multipart, retries and source ACK, with R6 purge/MRF state writes and shared bucket-replication.go functions.
|
||||
2. R7 restores only six replication-specific fields. Verify tag values/timestamps remain handled correctly and aws-chunked is not reintroduced, including R4 KMS options.
|
||||
3. R6 marker creation versus canonical/legacy purge, all exits, per-target statistics, disk creation/replica metadata preservation, identity-checked marker 405 recovery, retry counts and bounded scanner fallback.
|
||||
4. R8 absolute request-header deadlines and CLI/env propagation, HTTP/1 streaming bodies, keep-alive/TLS/h2 boundaries, default DeadlineConn callers and effects on replication I/O.
|
||||
5. Full-package test global state, cleanup/initialization ordering and any compile/dependency conflicts that separate scoped tests would miss.
|
||||
|
||||
Current local make verifiers is running; full candidate runtime tests and actual PR CI are still pending. Do not label them as passed. The host previously had ENOSPC; it now has more than 700 GiB free, so standard full-package tests can run without capacity overlays. Historical reports accurately retain earlier environment limits and incomplete multi-process deployment acceptance.
|
||||
|
||||
Two new R6 and four new R8 test files have boilerplate copyright headers queued for repository-policy normalization, after confirming original authorship. They will be header-only changes with package-and-body byte equivalence checked; do not conflate them with production semantic edits. Any actual implementation blocker will be fixed and re-reviewed as needed.
|
||||
|
||||
Return GO_WITH_NONBLOCKING_NOTES or REQUEST_CHANGES, number of blocking findings, exact candidate identity and inspected scope. For each blocker give path/line, real triggering conditions, impact and smallest compatible correction. Clearly distinguish inherited out-of-scope limitations from newly introduced defects and required CI from optional further deployment tests. Do not invent a blocker merely from absence of production deployment. This request is main merge, not release/deploy.
|
||||
@@ -0,0 +1,49 @@
|
||||
The plan file can't be written (Write is disabled this session), so here is the complete review inline.
|
||||
|
||||
# SILO R4–R8 integration review — independent, source-only
|
||||
|
||||
**Verdict: GO_WITH_NONBLOCKING_NOTES — 0 blocking findings.**
|
||||
|
||||
**Candidate identity:** head `055030ea53ca92ee22ce1e601ef4757c247edde8`, branch `codex/merge-r4-r8`, base `9f3037e941a49ab4cd8a0eed7c0f01083fbe4bbe`, worktree `/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/silo`. Scope of this review is a **main merge**, not a release or deployment. I executed nothing — no tests, no builds; every statement below is from reading source.
|
||||
|
||||
**Inspected scope:** `integration-code.diff` in full (3367 lines) and all 22 files in `reviewed-source.json`, then the complete surrounding functions in the worktree: `cmd/bucket-replication.go` (`replicateDelete`, `replicateDeleteToTarget`, `replicateObject`, `replicateAll`, `putReplicationOpts`, `getReplicationAction`, `queueMRFHeal`, `queueReplicaDeleteTask`, `queueMRFSave`, `queueReplicationHeal`), `bucket-replication-utils.go`, `bucket-replication-stats.go`, `xl-storage-format-v2.go DeleteVersion`, `erasure-object.go`, `erasure-multipart.go`, `erasure-server-pool.go`, `erasure-server-pool-consistency.go`, `object-handlers.go`, `object-handlers-common.go`, `object-multipart-handlers.go`, `handler-utils.go`, `object-api-options.go`, `bucket-handlers.go`, `common-main.go`, `server-main.go`, `internal/http/{server,listener}.go`, `internal/deadlineconn/deadlineconn.go`, all six new test files plus the base tests they interact with, `Makefile`, `.golangci.yml`, `AGENTS.md`, `CONTRIBUTING.md`, and the r5/r6/r8 plan + consensus records. Cross-checked against Go 1.27.1 `net/http/server.go` and pinned `minio-go/v7 v7.3.1-0.20260910142817-60bd07042d49`.
|
||||
|
||||
## Independent confirmation of the key claims
|
||||
|
||||
**R6 final empty creation-update invariant (the disproved-v2 point).** The v2 proof fails exactly as recorded: `replStatusRegex` (`bucket-replication-utils.go:168`) matches `arn1=;arn2=;` yielding `{arn1: ";arn2="}` — non-empty — while single-target `arn1=;` does not match at all. The v3 fix at `bucket-replication.go:575-582` sets `ReplicationStatusInternal=""`, `Targets=nil`, `ReplicaStatus=""`; `CompositeReplicationStatus` (`bucket-replication-utils.go:356-379`) then returns empty via both the internal string and the replica fallback, so `xlMetaV2.DeleteVersion` (`xl-storage-format-v2.go:1396-1405`, `1438-1447`) skips the creation/replica write while still writing `VersionPurgeStatusKey` (`1406-1408`, `1448-1450`). `ReplicationTimeStamp` is therefore inert (consensus N5 holds). I also confirmed the counterexample's precondition independently: `erasure-object.go:2099-2105` leaves `deleteMarker=true` when the stored marker carries no purge status, which is what sets `fi.Deleted=true` and reaches the rewriting branch. COMPLETE purges still remove the version (`1379-1393`, `1457-1459`).
|
||||
|
||||
**R6 classification / all exits.** `isVersionPurge()` (`1954-1956`) parses as `VersionID != "" || (DeleteMarkerVersionID != "" && !VersionPurgeStatus().Empty())`. Every live producer emits only one shape (`object-handlers.go:3232-3248`, `bucket-replication.go:3362-3378`, `3814-3836`), and the dir-object `nullVersionID` re-add (`bucket-handlers.go:552-555`, `679-681`) classifies as a purge under both old and new code, so no wire-form change there. All exits of `replicateDeleteToTarget` select the purge field consistently, HEAD probing is creation-only, `ReplicationDeleteMarker` is false for purges. `purgeReplicationStatus` maps only the legacy `COMPLETE` spelling; `ReplicationStats.Update` (`bucket-replication-stats.go:179-237`) consumes the passed status and never `rinfo.ReplicationStatus`, with `ri.Size == 0` giving count-only/zero-byte deltas. The `ResetStatusesMap` nil guard fixes a genuine nil-map assignment panic, since `ObjectToDelete.ReplicationState()` never initialises that map.
|
||||
|
||||
**R6 MRF recovery / budget.** `queueMRFHeal:4118-4125` parses as `(err != nil && !validMarker) || oi.Name == ""`; `decodeDirObject` is identity for both `obj` and `dir/`, matching `GetObjectInfo`'s decoded name, and `erasure-server-pool-consistency.go:143-145` is what returns a populated marker `ObjectInfo` with `MethodNotAllowed`. `RetryCount int` matches the persisted `MRFReplicateEntry.RetryCount` and `QueueReplicationHeal`'s parameter — no on-disk format change. All three increment sites feed the existing `> mrfRetryLimit` drop accounting (`3926-3931`), and the scanner fallback restarts with a fresh budget.
|
||||
|
||||
**R5 tag revision flow.** Sender: `replicationTaggingTimestamp` (`804-812`) serves both the full retransmit and the metadata-COPY branch, the latter now failing closed symmetrically (`1720-1725`). `getCopyObjMetadata:765-766` always emits `X-Amz-Tagging` (possibly empty) + `REPLACE`; minio-go `copyObjectDo` forwards empty header values; the receiver's `getRequestHeaderOrQueryValue` (`handler-utils.go:160-171`) treats presence-with-empty-value as authoritative — so an ordered deletion is genuinely representable on the wire. Receiver: `CopyObjectHandler:1799-1840` captures the stored stamp before REPLACE rebuilds the map, every branch writes or deletes the key explicitly, and the unconditional `delete(encMetadata, …)` is safe *because* of that, blocking the SSE-C rotation snapshot (`1655-1659`) from re-merging at `1910`. `PutObjectHandler:2323-2325` and `NewMultipartUploadHandler:315-318` mutate the same map that becomes `opts.UserDefined` (`object-api-options.go:451`), and the header is parsed only under trusted replication (`388-396`). Ordering is re-applied under the write lock by the existing `reconcileStoredObjectTags` callers (`erasure-object.go:136-139`, `1312-1315`; `erasure-multipart.go:1161-1189`; `erasure-server-pool.go:1443-1456`) — which is also what keeps the base R4 KMS test's `missing-timestamp` expectation intact. Dropping the `ri.UserTags` re-injection in the source ACK (`1294-1304`) is right: `cleanMetadata` strips the tagging key from `UserDefined`, so stored tags are now left alone, and the pools path re-derives them from merged `UserTags`.
|
||||
|
||||
**R7 boundary.** `replicationToInternalHeaders` has exactly six entries (`handler-utils.go:106-114`); `extractReplicationMetadataFromMime` restores only those and re-extracts no ordinary metadata, so the `aws-chunked` normalisation in `extractMetadata:225-241` is not undone. R5 touches neither, and R4's KMS options (`object-api-options.go:449-460`) still carry the three replication timestamps unmodified.
|
||||
|
||||
**R8 deadlines.** Against Go 1.27.1: header window set at `server.go:2038`/`2177`, whole-request deadline unconditionally at `1103`, `StateActive` at `2056-2058` firing after *every* successful `readRequest` because `readRequest` calls `setInfiniteReadLimit()` at `1067`. That is the one place where the naive reading of the `c.r.remain` comment is wrong — the pipelined/fully-buffered request does get the strict→rolling flip, so consensus N2 is correct. `startBackgroundRead` (`741`) and `hijackLocked` zero the deadline, which `infReads` honours — that is why background reads and hijacked grid/websocket conns still work. The strict cap only shortens, never extends; zero/past semantics unchanged; `readExplicit`/`readDeadlineStrict` only touched under `mu`. The h2 skip is defensive rather than load-bearing (net/http uses `skipHooks` for ALPN h2; the h2 server zeroes the conn deadline), and a nil `raw` fails the type assertion safely. Strict mode is opt-in, so every other `DeadlineConn` caller — the optional Linux internode dialer (`dial_linux.go:126-131`, currently disabled at `server-main.go:422`) and all outbound replication transports — keeps legacy rolling reads. The real fix is propagation: flag, field and `UseReadHeaderTimeout` already existed; `ctxt.ReadHeaderTimeout` was simply never populated before `common-main.go:448`.
|
||||
|
||||
**Full-package test state.** No duplicate symbols (`tagTestCapacityDisk` defined once in base `erasure-server-pool-tags_test.go:258`); no helper collisions in `internal/http`; `testdata/config/1.yaml`, `fmtGenFlags`, `serverCmd.Flags` all exist; `buildServerCtxt` mutates no globals. Globals are swapped/restored, and `prepareFS`/`prepareErasure`/`initAPIHandlerTest` re-run `initAllSubsystems` between backends, so leaked target-sys entries can't cross a fixture boundary. `logger.UpdateAuditWebhooks(ctx, nil)` really clears the list (`targets.go:227-273`), so the audit fixture is re-enterable across the SD and Erasure passes. `make verifiers` = lint + check-gen + rebrand-guard, and `.golangci.yml` enables no header linter.
|
||||
|
||||
## Blocking findings
|
||||
|
||||
**None.**
|
||||
|
||||
## Non-blocking notes (newly introduced here)
|
||||
|
||||
1. `bucket-replication.go:804-812` — an unparseable stored tagging timestamp now fails replication for *untagged* objects too. Trigger: a corrupt/legacy value, or the empty value `erasure-server-pool-consistency.go:211-214` can persist when a non-primary pool holds a malformed stamp. Fail-closed (FAILED + MRF retry), never silent divergence. Optional hardening: treat missing-or-empty as absent, keeping the hard error for non-empty malformed values.
|
||||
2. `bucket-replication.go:1031-1036` — any version with a tag revision now resolves to `replicateMetadata` instead of `replicateNone`; since `object-handlers.go:1835-1836` gives every non-replica COPY a revision, large resyncs issue one extra metadata COPY per object. Steady state is unaffected (COMPLETED gate at `3810`). Accepted in r5 consensus; flagged as operational cost.
|
||||
3. `bucket-replication.go:435-445`, `551-566`, `1958-1964` — purge audit status changes from legacy `COMPLETE` to `COMPLETED`, and per-target purge outcomes now reach `globalReplicationStats` where the empty creation status previously recorded nothing. Intended (r6 dispositions 1–2); worth one release-note line for audit/metric consumers.
|
||||
4. `common-main.go:448` — now that `ReadHeaderTimeout` is populated it also participates in `net/http`'s `tlsHandshakeTimeout()` minimum. No change at defaults (30s vs 30s); a small configured header timeout also shortens the TLS handshake window. Documented in r8 consensus N1.
|
||||
5. `replication-tagging-order_test.go:1805-1814` — `TestAPIPoolsTaggingReplicaDeletion` calls `globalBucketMetadataSys.Update` after `consistencyPools`, which (unlike `initAPIHandlerTest`) does not run `initAllSubsystems`; run in isolation with `-run` it would nil-dereference. Harmless in full-package CI. Smallest fix: use `initAPIHandlerTest`, as the neighbouring consistency tests do.
|
||||
6. `replication-delete-mrf_test.go:1208-1215` — the audit cleanup cancels targets twice; non-panicking because `SafeClose(nil)` only prints a stack (`internal/ioutil/ioutil.go:463-471`), but it can add stderr noise.
|
||||
7. Headers (already queued, header-only): the two new R6 test files use `Copyright (c) 2026 PGSTY` + SPDX-only, and the four new R8 test files carry `Copyright (c) 2015-2021 MinIO, Inc.` despite being new original work; CONTRIBUTING.md asks new original files to name their actual holders with AGPL boilerplate (the two new R5 files already comply). No verifier enforces headers, so this does not gate CI and is distinct from production semantics.
|
||||
|
||||
## Inherited / out-of-scope limitations (not introduced by this candidate)
|
||||
|
||||
Purge-target subset merging under narrowed fan-out; nil/missing target clients cannot restore already-lost tracking; the `ResetStatusesMap` key asymmetry between `targetResetHeader(arn)` writes and bare-`arn` reads (`bucket-replication-utils.go:392-399` vs `419-426`) — the candidate only adds the panic-preventing nil guard; the shared `replStatusRegex` still mis-parses serialized empty statuses (R6 deliberately works around it at the write site); unqualified (no `versionId`) replica PUT has no stored-tag reconcile (`object-handlers.go:2442`); TLS handshake *write* deadlines keep rolling behaviour (r8 N9); historical objects without a revision, tag-filter target selection and real multi-site clock skew remain unsolved (r5 consensus).
|
||||
|
||||
## Verification still owed (I ran nothing; nothing below is "passed")
|
||||
|
||||
**Required for this merge — repository gates only:** `make verifiers` (lint, check-gen, rebrand-guard), `make build` producing `silo`, and full-package tests, at minimum `./cmd`, `./internal/http`, `./internal/deadlineconn`; a Linux CI leg to compile and run the build-tagged `TestInternodeDialReadDeadline`; DCO sign-off/authorship checks on the cherry-picked commits. With >700 GiB free, no capacity overlay is needed.
|
||||
|
||||
**Optional, explicitly not a merge gate:** `SILO_TEST_LONG_UPLOAD=1` (>30s default-idle transfer regressions), multi-process/multi-node deployment acceptance, cross-region replication mesh. Their absence is a coverage boundary, not a defect; I do not treat missing production deployment as a blocker.
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"binary": "/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/silo/silo",
|
||||
"binary_sha256": "1cc536f1a3c8d8372ff2d5b140b1fd2bc98a299324fea0f73f67288d48104ce4",
|
||||
"expected_rejection": true,
|
||||
"cases": [
|
||||
{
|
||||
"source": "flag",
|
||||
"header_timeout_ms": 100,
|
||||
"idle_timeout_ms": 2000,
|
||||
"header_completion_delay_ms": 400,
|
||||
"rejected": true,
|
||||
"status": "",
|
||||
"elapsed_seconds": 0.403,
|
||||
"still_alive": true
|
||||
},
|
||||
{
|
||||
"source": "environment",
|
||||
"header_timeout_ms": 100,
|
||||
"idle_timeout_ms": 2000,
|
||||
"header_completion_delay_ms": 400,
|
||||
"rejected": true,
|
||||
"status": "",
|
||||
"elapsed_seconds": 0.402,
|
||||
"still_alive": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"command": [
|
||||
"python3",
|
||||
"docs/investigations/r8/evidence/runtime_probe.py",
|
||||
"/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/silo/silo",
|
||||
"fixed",
|
||||
"/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/runtime-probe"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"seconds": 1.638,
|
||||
"stdout_sha256": "e493d9757c130c2531072dc0eaee42b8fc1fa0f45fc43d0d0e098aac55f0d387"
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
silo version DEVELOPMENT.2026-09-15T16-44-34Z (commit-id=80684fed59f556d579e268c5a855d936c1347b68)
|
||||
Runtime: go1.27.1 darwin/arm64
|
||||
License: GNU AGPLv3 - https://www.gnu.org/licenses/agpl-3.0.html
|
||||
Copyright: 2015-2025 MinIO, Inc.
|
||||
Modifications: Copyright 2025-2026 PGSTY
|
||||
Source compatibility: based on MinIO technology
|
||||
@@ -0,0 +1,3 @@
|
||||
ok github.com/minio/minio/cmd 13.654s
|
||||
ok github.com/minio/minio/internal/deadlineconn 2.528s
|
||||
ok github.com/minio/minio/internal/http 14.301s
|
||||
@@ -0,0 +1,175 @@
|
||||
{
|
||||
"head": "80684fed59f556d579e268c5a855d936c1347b68",
|
||||
"baseline": "9f3037e941a49ab4cd8a0eed7c0f01083fbe4bbe",
|
||||
"source_sha256": {
|
||||
"cmd/bucket-replication-utils.go": "365641c760901641e8320cc5123697ab92a46f1add612048b991ed2d1cfad43b",
|
||||
"cmd/bucket-replication.go": "2e766c5946dcabaea79455b50a8e426f404e55c92dcbccbe28d55906e2e43843",
|
||||
"cmd/common-main.go": "f8777fe8a07d175aceee07b4dd13792b2384449c404c004c38a06893be997843",
|
||||
"cmd/erasure-object.go": "4bc848685ea714d88cabbd5d1b8585fbcc06f7b19c775e1a811030e783d0e1a4",
|
||||
"cmd/erasure-server-pool-consistency.go": "d2736ef6bffbb5c5758eba8df38f8d4ecb888a838ab0de8ad3cf015c051f8ad7",
|
||||
"cmd/erasure-server-pool.go": "87ad0b25dfa3081d0e63d0073b788614a9c88e2498a2ce0956b93f8a0a03ef53",
|
||||
"cmd/object-handlers-common.go": "101bd7d7447072d13fed50983b69b562e4725632645e623d7fdd490f388ecdec",
|
||||
"cmd/object-handlers.go": "61897a260f3f5f660f41edcb50956c60e914ef98f9a987da824f16d78171fde2",
|
||||
"cmd/object-multipart-handlers.go": "d9622c69c540ab32dd23916e3f534b6886473a98370c9dd17673e69a423b2a7e",
|
||||
"cmd/replication-delete-marker_test.go": "d967787804d558ac6266b113228fdf4a4f9fcb7cab39138a4fb07558814ccca4",
|
||||
"cmd/replication-delete-mrf_test.go": "6fcfaf505d28f98e42dff9c0d965895be2c2d112e9e996220d424aea1f76d691",
|
||||
"cmd/replication-delete-operation_test.go": "2e674cab5ca4dbc38cb2c1ddcca117269276e6419e1869c154c3bd6a05676715",
|
||||
"cmd/replication-tagging-order_test.go": "c8260b4ccf82fa615e1e24b35a07f2d1aacbcf776e5c6f9dadffea4a09ad6ea8",
|
||||
"cmd/replication-tagging-sender_test.go": "3770a1a48a6efe58fe8127e1e4fdf6bd7cf171e17db20f15222ea2f7b85db1af",
|
||||
"cmd/server-main.go": "04c265de211412ba0297396928096d7f2d971244a957a3126154846035263514",
|
||||
"cmd/server_deadline_config_test.go": "a8259d273922a8973b44d9a468791761d373fe265fff8b2b53871e4626b11405",
|
||||
"internal/deadlineconn/deadlineconn.go": "b9272ef640f1d4403b3d0af6cdbaba9186c51ad9a0226dfe449e8ef738e1ec4b",
|
||||
"internal/deadlineconn/deadlineconn_strict_test.go": "b4aec28c5daddb36e6ebb98dd8af2a44b7a2c48f0660068534f69669609f67a7",
|
||||
"internal/http/dial_deadline_linux_test.go": "c4c83bda92ba9bac53166453920456134b3d8265cd59101b4203067c67eca59e",
|
||||
"internal/http/listener.go": "49628575367f6ab9b6986caf594726d74d370f7d2ac4eed582903600b6eb3fa2",
|
||||
"internal/http/server.go": "b7b0355f2781f8c5f7c77bc910cd4180cd3e5f22a87de41bd35ef119d36b4cdf",
|
||||
"internal/http/server_deadline_test.go": "87303cc389bf1cf759898489f06b001073de2dd9c4b3687c4eca14aa186b62ab"
|
||||
},
|
||||
"no_capacity_overlay": true,
|
||||
"race_test_selection": [
|
||||
"TestAPILocalTaggingAlwaysAdvancesRevision",
|
||||
"TestAPIPoolsTaggingReplicaDeletion",
|
||||
"TestAPITaggingMultipartCommitRechecksRevision",
|
||||
"TestAPITaggingReplicationOrdering",
|
||||
"TestAPITaggingReplicationOrderingKMS",
|
||||
"TestAPITaggingSSECRotationPreservesDeletionRevision",
|
||||
"TestAPITaggingUnqualifiedCopyOrdering",
|
||||
"TestConcurrentStrictReadDeadline",
|
||||
"TestDefaultReadDeadlineStillRenews",
|
||||
"TestInternodeDialReadDeadline",
|
||||
"TestLocalTaggingCommitCannotRegressRevision",
|
||||
"TestReplicateDeleteMarkerPurge",
|
||||
"TestReplicateDeleteMarkerTargetSemantics",
|
||||
"TestReplicateDeleteOperationExits",
|
||||
"TestReplicateDeletePurgeMissingTargetState",
|
||||
"TestReplicationDeleteQueueFullRetryBudget",
|
||||
"TestReplicationMRFMarkerRecovery",
|
||||
"TestServerBackgroundReadNoDeadline",
|
||||
"TestServerConnStateHook",
|
||||
"TestServerContinuousDownload",
|
||||
"TestServerContinuousUpload",
|
||||
"TestServerDefaultIdleLongDownload",
|
||||
"TestServerDefaultIdleLongUpload",
|
||||
"TestServerEarlyBodyClose",
|
||||
"TestServerHTTP2Deadlines",
|
||||
"TestServerHijackedDeadline",
|
||||
"TestServerIdleBodyDeadline",
|
||||
"TestServerKeepAliveDeadline",
|
||||
"TestServerPipelinedDeadline",
|
||||
"TestServerReadHeaderDeadline",
|
||||
"TestServerReadHeaderTimeoutConfig",
|
||||
"TestServerTLSHandshakeReadDeadline",
|
||||
"TestStrictExpiredFutureReadDeadline",
|
||||
"TestStrictReadDeadline",
|
||||
"TestStrictReadDeadlineRepeatedRenewal",
|
||||
"TestTaggingProductionCopyWireShape",
|
||||
"TestTaggingRepeatedValueNeedsRevisionDelivery",
|
||||
"TestTaggingReplicaContentDuplicateGuard",
|
||||
"TestTaggingReplicationSenderRetryAndAcknowledgment",
|
||||
"TestTaggingTimestampWire"
|
||||
],
|
||||
"started_at": "2026-09-15T16:45:09.640646+00:00",
|
||||
"checks": [
|
||||
{
|
||||
"name": "make-verifiers-final",
|
||||
"command": [
|
||||
"make",
|
||||
"verifiers",
|
||||
"GOLANGCI=/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/golangci-serial"
|
||||
],
|
||||
"env": {
|
||||
"GOMAXPROCS": "4",
|
||||
"GOFLAGS": "-p=2",
|
||||
"MINIO_API_REQUESTS_MAX": "10000"
|
||||
},
|
||||
"exit_code": 0,
|
||||
"seconds": 76.933,
|
||||
"log": "/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/make-verifiers-final.log",
|
||||
"log_sha256": "54c906cff1d33d0148fbc4cac918c0785a3bcc8f7a4eb7e04a2f774c2f010bb4"
|
||||
},
|
||||
{
|
||||
"name": "make-build",
|
||||
"command": [
|
||||
"make",
|
||||
"build"
|
||||
],
|
||||
"env": {
|
||||
"GOMAXPROCS": "4",
|
||||
"GOFLAGS": "-p=2",
|
||||
"MINIO_API_REQUESTS_MAX": "10000"
|
||||
},
|
||||
"exit_code": 0,
|
||||
"seconds": 19.366,
|
||||
"log": "/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/make-build.log",
|
||||
"log_sha256": "6ba9b545236be964861749c72e7609edf12b8f470df30d1ede8fd62f497e629b"
|
||||
},
|
||||
{
|
||||
"name": "silo-version",
|
||||
"command": [
|
||||
"./silo",
|
||||
"--version"
|
||||
],
|
||||
"env": {
|
||||
"GOMAXPROCS": "4",
|
||||
"GOFLAGS": "-p=2",
|
||||
"MINIO_API_REQUESTS_MAX": "10000"
|
||||
},
|
||||
"exit_code": 0,
|
||||
"seconds": 1.259,
|
||||
"log": "/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/silo-version.log",
|
||||
"log_sha256": "ada27f2be570c33df5712e86782a7be2ce3acfef54c8bb22a9230db3606513af"
|
||||
},
|
||||
{
|
||||
"name": "full-tests",
|
||||
"command": [
|
||||
"go",
|
||||
"test",
|
||||
"-p",
|
||||
"2",
|
||||
"./cmd",
|
||||
"./internal/...",
|
||||
"-count=1",
|
||||
"-timeout=30m"
|
||||
],
|
||||
"env": {
|
||||
"GOMAXPROCS": "4",
|
||||
"GOFLAGS": "-p=2",
|
||||
"MINIO_API_REQUESTS_MAX": "10000",
|
||||
"CGO_ENABLED": "0"
|
||||
},
|
||||
"exit_code": 0,
|
||||
"seconds": 340.193,
|
||||
"log": "/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/full-tests.log",
|
||||
"log_sha256": "24b986e2f5aef0e668116abaab5024bf19ac664aec010ca7aa5ef56886f47ad1"
|
||||
},
|
||||
{
|
||||
"name": "targeted-race",
|
||||
"command": [
|
||||
"go",
|
||||
"test",
|
||||
"-race",
|
||||
"-p",
|
||||
"2",
|
||||
"./cmd",
|
||||
"./internal/deadlineconn",
|
||||
"./internal/http",
|
||||
"-run",
|
||||
"^(TestAPILocalTaggingAlwaysAdvancesRevision|TestAPIPoolsTaggingReplicaDeletion|TestAPITaggingMultipartCommitRechecksRevision|TestAPITaggingReplicationOrdering|TestAPITaggingReplicationOrderingKMS|TestAPITaggingSSECRotationPreservesDeletionRevision|TestAPITaggingUnqualifiedCopyOrdering|TestConcurrentStrictReadDeadline|TestDefaultReadDeadlineStillRenews|TestInternodeDialReadDeadline|TestLocalTaggingCommitCannotRegressRevision|TestReplicateDeleteMarkerPurge|TestReplicateDeleteMarkerTargetSemantics|TestReplicateDeleteOperationExits|TestReplicateDeletePurgeMissingTargetState|TestReplicationDeleteQueueFullRetryBudget|TestReplicationMRFMarkerRecovery|TestServerBackgroundReadNoDeadline|TestServerConnStateHook|TestServerContinuousDownload|TestServerContinuousUpload|TestServerDefaultIdleLongDownload|TestServerDefaultIdleLongUpload|TestServerEarlyBodyClose|TestServerHTTP2Deadlines|TestServerHijackedDeadline|TestServerIdleBodyDeadline|TestServerKeepAliveDeadline|TestServerPipelinedDeadline|TestServerReadHeaderDeadline|TestServerReadHeaderTimeoutConfig|TestServerTLSHandshakeReadDeadline|TestStrictExpiredFutureReadDeadline|TestStrictReadDeadline|TestStrictReadDeadlineRepeatedRenewal|TestTaggingProductionCopyWireShape|TestTaggingRepeatedValueNeedsRevisionDelivery|TestTaggingReplicaContentDuplicateGuard|TestTaggingReplicationSenderRetryAndAcknowledgment|TestTaggingTimestampWire)$",
|
||||
"-count=1",
|
||||
"-timeout=15m"
|
||||
],
|
||||
"env": {
|
||||
"GOMAXPROCS": "4",
|
||||
"GOFLAGS": "-p=2",
|
||||
"MINIO_API_REQUESTS_MAX": "10000",
|
||||
"CGO_ENABLED": "1"
|
||||
},
|
||||
"exit_code": 0,
|
||||
"seconds": 46.286,
|
||||
"log": "/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/targeted-race.log",
|
||||
"log_sha256": "7d021e57e513ea81617df44a6253703622145bf5e72e6180de84c2bd3c7186d3"
|
||||
}
|
||||
],
|
||||
"source_unchanged": true,
|
||||
"finished_at": "2026-09-15T16:53:13.682876+00:00"
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"baseline": "9f3037e941a49ab4cd8a0eed7c0f01083fbe4bbe",
|
||||
"reviewed_code_commit": "055030ea53ca92ee22ce1e601ef4757c247edde8",
|
||||
"tested_commit": "80684fed59f556d579e268c5a855d936c1347b68",
|
||||
"integration_branch": "codex/merge-r4-r8",
|
||||
"current_source_matches_tested_commit": true,
|
||||
"production_or_test_body_changes_after_review": false,
|
||||
"source_sha256": {
|
||||
"cmd/bucket-replication-utils.go": "365641c760901641e8320cc5123697ab92a46f1add612048b991ed2d1cfad43b",
|
||||
"cmd/bucket-replication.go": "2e766c5946dcabaea79455b50a8e426f404e55c92dcbccbe28d55906e2e43843",
|
||||
"cmd/common-main.go": "f8777fe8a07d175aceee07b4dd13792b2384449c404c004c38a06893be997843",
|
||||
"cmd/erasure-object.go": "4bc848685ea714d88cabbd5d1b8585fbcc06f7b19c775e1a811030e783d0e1a4",
|
||||
"cmd/erasure-server-pool-consistency.go": "d2736ef6bffbb5c5758eba8df38f8d4ecb888a838ab0de8ad3cf015c051f8ad7",
|
||||
"cmd/erasure-server-pool.go": "87ad0b25dfa3081d0e63d0073b788614a9c88e2498a2ce0956b93f8a0a03ef53",
|
||||
"cmd/object-handlers-common.go": "101bd7d7447072d13fed50983b69b562e4725632645e623d7fdd490f388ecdec",
|
||||
"cmd/object-handlers.go": "61897a260f3f5f660f41edcb50956c60e914ef98f9a987da824f16d78171fde2",
|
||||
"cmd/object-multipart-handlers.go": "d9622c69c540ab32dd23916e3f534b6886473a98370c9dd17673e69a423b2a7e",
|
||||
"cmd/replication-delete-marker_test.go": "d967787804d558ac6266b113228fdf4a4f9fcb7cab39138a4fb07558814ccca4",
|
||||
"cmd/replication-delete-mrf_test.go": "6fcfaf505d28f98e42dff9c0d965895be2c2d112e9e996220d424aea1f76d691",
|
||||
"cmd/replication-delete-operation_test.go": "2e674cab5ca4dbc38cb2c1ddcca117269276e6419e1869c154c3bd6a05676715",
|
||||
"cmd/replication-tagging-order_test.go": "c8260b4ccf82fa615e1e24b35a07f2d1aacbcf776e5c6f9dadffea4a09ad6ea8",
|
||||
"cmd/replication-tagging-sender_test.go": "3770a1a48a6efe58fe8127e1e4fdf6bd7cf171e17db20f15222ea2f7b85db1af",
|
||||
"cmd/server-main.go": "04c265de211412ba0297396928096d7f2d971244a957a3126154846035263514",
|
||||
"cmd/server_deadline_config_test.go": "a8259d273922a8973b44d9a468791761d373fe265fff8b2b53871e4626b11405",
|
||||
"internal/deadlineconn/deadlineconn.go": "b9272ef640f1d4403b3d0af6cdbaba9186c51ad9a0226dfe449e8ef738e1ec4b",
|
||||
"internal/deadlineconn/deadlineconn_strict_test.go": "b4aec28c5daddb36e6ebb98dd8af2a44b7a2c48f0660068534f69669609f67a7",
|
||||
"internal/http/dial_deadline_linux_test.go": "c4c83bda92ba9bac53166453920456134b3d8265cd59101b4203067c67eca59e",
|
||||
"internal/http/listener.go": "49628575367f6ab9b6986caf594726d74d370f7d2ac4eed582903600b6eb3fa2",
|
||||
"internal/http/server.go": "b7b0355f2781f8c5f7c77bc910cd4180cd3e5f22a87de41bd35ef119d36b4cdf",
|
||||
"internal/http/server_deadline_test.go": "87303cc389bf1cf759898489f06b001073de2dd9c4b3687c4eca14aa186b62ab"
|
||||
},
|
||||
"compatibility_inventory_sha256": "208c78a9e9fc98d6de7f1e0f03cfec97d8491df65ad4de3d88f04c36c555f819",
|
||||
"evidence_sha256": {
|
||||
"evidence/full-tests.log": "24b986e2f5aef0e668116abaab5024bf19ac664aec010ca7aa5ef56886f47ad1",
|
||||
"evidence/header-equivalence.json": "0aee56aa978515579aa59215152b685f614cd5bda323fe26690a4c21f837f109",
|
||||
"evidence/integration-equivalence.json": "473711fa8660504275242b70e80622277a32c73e0c7df1de6f5ba2d6bbfcc54e",
|
||||
"evidence/isolated-pools-before.log": "f014a1a72dda7b973cd1e0b7e77c70b470eeebca0d04805d98f07c2622c87b1e",
|
||||
"evidence/isolated-pools-before.result.json": "3a761d8a6fd1869a9a9d2b3d506ddec4fdaaad098da2b6a2f85252acf9561774",
|
||||
"evidence/make-build.log": "6ba9b545236be964861749c72e7609edf12b8f470df30d1ede8fd62f497e629b",
|
||||
"evidence/make-verifiers-final.log": "54c906cff1d33d0148fbc4cac918c0785a3bcc8f7a4eb7e04a2f774c2f010bb4",
|
||||
"evidence/opus-integration.metadata.json": "c468e952e2364625ffe04a7221489185705857ad073f6fdb8dee3fe6aad9345c",
|
||||
"evidence/opus-integration.prompt.md": "f95edcf71afedceab190ff57bfbec812b06c8c18b5370d887131a760228c2b2c",
|
||||
"evidence/opus-review.md": "463f6b97e8d19929187242724e6bcfc2406217cd82702739716b65e19a8f2360",
|
||||
"evidence/runtime-probe.json": "e493d9757c130c2531072dc0eaee42b8fc1fa0f45fc43d0d0e098aac55f0d387",
|
||||
"evidence/runtime-probe.result.json": "d8703c201493cf865d758d53cbc6d92b71535345dafe3c2f27ca2a29ad53e353",
|
||||
"evidence/silo-version.log": "ada27f2be570c33df5712e86782a7be2ce3acfef54c8bb22a9230db3606513af",
|
||||
"evidence/targeted-race.log": "7d021e57e513ea81617df44a6253703622145bf5e72e6180de84c2bd3c7186d3",
|
||||
"evidence/validation-results.json": "29182a752a8ffb75367e8cce51e1f2ef080e453a059248ae2c868aa66627aede"
|
||||
},
|
||||
"original_raw_review": {
|
||||
"path": "/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/opus-integration.jsonl",
|
||||
"sha256": "3e1a45ebdf3f4420fb05647bb383c00d0a86452a6c357a92679485c99d8f4eb3"
|
||||
},
|
||||
"original_review_diff": {
|
||||
"path": "/Users/vonng/tmp/silo-r4-r8-main-20260916-01a0a5ab/integration-code.diff",
|
||||
"sha256": "d8c4e60f9e4a5b1338f3e6e07b758b1bb279db80eec26847e3b35fde0d049485"
|
||||
},
|
||||
"scope": "Local integration validation and independent source review. Final PR checks and remote merge are recorded separately."
|
||||
}
|
||||
Reference in New Issue
Block a user