mirror of
https://github.com/pgsty/minio.git
synced 2026-09-26 04:45:59 +03:00
114dc10529
Signed-off-by: Feng Ruohang <rh@vonng.com>
3.2 KiB
3.2 KiB
v2 对抗复审意见与 v3 处置
第二轮由相同 Claude Code / claude-opus-5 --effort max 执行,仅有 Read/Grep/Glob 工具,耗时约 11 分钟。结论 NO_GO,1 个新增阻断;明确确认首轮 R1/R2/R3 已全部关闭,并承认首轮 R3 关于 RawMessage 的部分依据错误。见 第二轮原文、调用证据。
P1-1:历史桶字段时间等于 Created
接受阻断。源码核对确认历史配置可合法带 UpdatedAt == Created,MakeBucketHook 还会把同一 Created 传给新站点。v2 把等号也拒绝,会阻断初次同步,并因 heal 过滤 baseline 而无法补救。
对评审中的小处事实作校正:当前 applyLegacyConfigs 末尾已经调用 defaultTimestamps(),因此“迁移后磁盘字段仍为零”不普遍成立;字段等于 Created 的反例成立,不影响阻断判断。
v3 的最小修订是保留 baseline 的弱初值语义,不引入新 wire 字段或重盖到达时间:
| 输入/目标 | v3 行为 |
|---|---|
| 历史 live@Created → 空 baseline | 接受初始化,保存相同源时间;初次同步和 heal 一致 |
| baseline-live → baseline-live | 稳定比较键较大者胜;全 baseline-live 也能收敛 |
| baseline-live → 真实 live/tombstone | 不覆盖;真实状态优先级先于时间比较 |
| 空/nil@Created → 任意已有配置 | 不能作为删除,不清空 |
| 非零时间严格早于目标 Created | 原有创建保护,成功/no-op 与有界诊断 |
| 全为空 baseline | found=false,安静不写入 |
T7/T8 新增上述用例,特别是历史桶从初次同步到完整一轮 heal 的验收;六类类型约束、删除 parse=false、旧事件不能复活 tombstone 均保留。
四条 P2
- Policy 稳定键:接受目标,不叠加第二种判等。 v3 明确对已解析策略完整 JSON 树做递归排序,覆盖 NotAction/NotResource 与 Condition,保留数字精度,并由两站点独立解析验证同键。未采纳 Equals 优先再用另一种键的建议:当前
BucketPolicy.Equals对 Statement 次序敏感,而BPStatement.Equals忽略 Sid,两套判等混用可能使同时间冲突的比较不一致。公开统计现用 Equals 不变。当前 BPStatement 不支持 NotPrincipal,不为此新增语法或改 silo-pkg。 - off 并非禁止删除:接受。 直写 Policy 原有墓碑在 off 仍参与 heal;普通删除事件一直复制;只有新增 Tags/SSE/Quota 墓碑导出与初次发送受开关控制。
- off 期间过时 RPC:接受。 隐藏墓碑使部分旧 RPC 仍被尝试、在接收端被排序拒绝;这是升级阶段明确代价,不要求零 RPC,不加每轮日志。稳定无额外 RPC 的验收要求明确放在完整状态可见之后。
- 空策略 API 行为:接受。 T1 明确带合法 Version 的空策略 PUT 成功,随后 GET NotFound,落盘与专用删除事件三元组一致;不能误改为 4xx。
三个实现提交没有增加,也没有新增协议、框架、依赖或长期集成门槛。v3 只需对本次 baseline 规则与以上说明做最后针对性复审;已关闭的首轮问题不重开全仓库审查。当前仍是设计文件,没有实现或执行实现期测试。