跳转到主要内容

设计归档

设计归档记录 PGSTY SILO 的核心工程决策:缺陷根因、S3 与 IAM 协议不变量、备选方案取舍、运维边界与回归测试索引。

2026-11-10 发布复查中发现

2026-11-09 Console 多语言

2026-11-06 发布验收中发现

2026-11-04 发布阻塞的生命周期修复

本节所有服务端设计记录对应的修复已随 SILO Server 20261109 发布;Console 配额校验修复已随独立版 Console 2.6.0 与 Console 2.7.0 发布,并内嵌于 SILO Server 20261109。

  • 多池生命周期过期:按整个对象决策(#278、#279):解释只按单个池内版本做出的过期判断,为何会隐藏、删除或复活另一个池中的版本,以及为什么在对象锁内按合并版本列表复核是最小而完整的修复。
  • 恢复副本:过期的是副本,不是对象(#281、#282):解释当前版本的恢复副本过期为何会隐藏对象或抹掉更早的 null 版本,以及哪些存储层与原生恢复防护要与精确版本修复一起交付。
  • 两阶段原生恢复(#284):解释原生恢复为何在整个 tier 下载期间持有对象锁,#281 的第一版防护为何还会让失败的普通上传卡住,以及在锁外暂存、再做一次短暂且经过核验的提交,如何取代私有 upload。
  • Peer 重载后的审计 Webhook(#259):解释运行时修改 audit_webhook 为何会让除处理请求的服务器外其他所有服务器上的目标停止工作,哪些日志子系统存在同样问题,以及为什么用服务器上下文构建日志目标、并先打开队列存储是最小而完整的修复。
  • 失败写入与幽灵空前缀(#285、#286):解释暂存数据在远端 rename 之前消失的写入,为何会留下空对象目录并在之后被列为空前缀,以及为什么在两条 rename 失败路径上清理它就足够。
  • Heal 演练不能删除数据(源自 #280):解释 heal 演练为何会删掉 dangling 对象最后的元数据副本,并在远端节点上执行真实的桶 heal,以及为什么提前返回加上把演练标志传给 peer 能同时关闭这两条路径。
  • 生命周期"删除全部版本"只能作用于一个 key(在审查 #278 修复时发现):解释 ExpiredObjectAllVersions、DelMarkerExpiration 和批量过期的默认 purge 为何会删除过期 key 名下的所有其他 key,以及为什么在复核后按版本 ID 只清理该 key 自身的版本,是最小而安全的修复。
  • Console 的桶配额:列表显示与数值校验(silo-console#72、silo-console#73):解释 Console 设置的配额为何在桶列表中显示为"-"、创建桶时为何会把超大配额变成 1 字节、两者的来源,以及随独立版 Console 2.6.0 与 Console 2.7.0 发布并内嵌于 SILO Server 20261109 的修复范围。
  • 大型单池集群的锁域:解释在 18 台及以上主机的单池集群中,DELETE 与 CopyObject 为何无法与同一 key 上的 PUT 互斥,哪些布局受影响,以及关闭它的路由改动。

2026-11-01 存储池迁移完整性审查

本节所有存储池迁移与分层清理修复已随 SILO Server 20261109 发布。

2026-10-24 FULL_OBJECT 校验和复制

2026-10-24 多池删除与放置决策

  • 多池删除:失败时保住最新副本(#256、#257):解释在线磁盘预检查为何挡不住执行中的 I/O 故障,分阶段清理如何保住每项的权威副本,以及已合并修复的重试、分层引用、性能和兼容性边界。

  • 多池覆盖亲和:为何最终没有采纳 #245(#245):记录原始放置问题、请求级 quorum 与健康判断改进、仅限普通无版本覆盖的收窄设计、两轮 m3 性能实测,以及小对象覆盖仍未达标后的停止决定。实验修改没有合并。

2026-10-23 Alias 区域

2026-10-23 IAM 与 KMS 设计记录

Server 20261018 核心设计记录

围绕 Server 20261018 正式版的核心架构改动,请参阅:

  • 生命周期版本历史:同一个版本,两个发行版写的头部

    发布于 设计

    设计生命周期纠删码兼容性

    生命周期版本历史:同一个版本,两个发行版写的头部

    本记录说明维护者复查 RELEASE.2026-11-09T00-00-00Z(d99829238)时发现的一个缺陷。它由该版本中的 9f7b49369 引入,这个提交是多池生命周期修复(#278)的一部分。修复见 PR #332,没有单独的 GitHub issue。 **状态:**已通过 PR #332 合并到 main,提交为 36c8d1683;合并前在第二轮对抗评审中获得通过,第一轮评审改动了修复方案,见评审记录。尚未发布:RELEASE.2026-11-09T00-00-00Z 受影 …

    本记录说明维护者复查 RELEASE.2026-11-09T00-00-00Z(d99829238)时发现的一个缺陷。它由该版本中的 9f7b49369 引入,这个提交是多池生命周期修复(#278)的一部分。修复见 PR #332,没有单独的 GitHub issue。 **状态:**已通过 PR #332 合并到 main,提交为 36c8d1683;合并前在第二轮对抗评审中获得通过,第一轮评审改动了修复方案,见评审记录。尚未发布:RELEASE.2026-11-09T00-00-00Z 受影 …

  • 为 SILO 提供多语言支持

    发布于 设计

    DesignconsoleInternationalization

    为 SILO 提供多语言支持

    Eduardo Andrade Machado 的 Console PR #83 提供了巴西葡萄牙语翻译。siyahkut 在 silo#277 中请求土耳其语。这两项贡献推动 Console 扩展为可配置的十语言界面。 状态: 已随 Console 2.7.0(4e91ae506e70,pgsty/silo-console:v2.7.0)正式发布,并内嵌于 SILO Server 20261109(d998292387cc)。发布前复核验证了紧凑标签、RTL 输入控件,以及手机、平板和桌面宽度 …

    Eduardo Andrade Machado 的 Console PR #83 提供了巴西葡萄牙语翻译。siyahkut 在 silo#277 中请求土耳其语。这两项贡献推动 Console 扩展为可配置的十语言界面。 状态: 已随 Console 2.7.0(4e91ae506e70,pgsty/silo-console:v2.7.0)正式发布,并内嵌于 SILO Server 20261109(d998292387cc)。发布前复核验证了紧凑标签、RTL 输入控件,以及手机、平板和桌面宽度 …

  • 两阶段原生恢复

    发布于 设计

    设计分层存储锁可用性

    两阶段原生恢复

    本文覆盖 issue #284,以及 #281 第一版原生恢复防护带来的两处回归;那些防护记录在恢复副本:过期的是副本,不是对象中。本文基于 main 69fcf50cd 和发布前的 SILO Server 20261109 集成分支评估。这个设计取代 #281 防护中私有 upload 的部分,其余部分保留。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 原生恢复(对已转储版本发起 POST ?restore)会从 tier 下载该版本 …

    本文覆盖 issue #284,以及 #281 第一版原生恢复防护带来的两处回归;那些防护记录在恢复副本:过期的是副本,不是对象中。本文基于 main 69fcf50cd 和发布前的 SILO Server 20261109 集成分支评估。这个设计取代 #281 防护中私有 upload 的部分,其余部分保留。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 原生恢复(对已转储版本发起 POST ?restore)会从 tier 下载该版本 …

  • 局部视图不能把存在的对象报成不存在

    发布于 设计

    设计纠删码可用性S3 兼容性

    局部视图不能把存在的对象报成不存在

    本记录说明在 SILO Server 20261109 本地验收中发现的一个缺陷。修复前的 SILO Server 20261109 集成分支和 69fcf50cd 上都能复现。对应 #302。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短回答 刚重启的节点,或者短暂与部分节点断开连接的节点,只能看到纠删集里的一部分盘。如果它能看到的盘上,对象元数据分属两个修订版本,而哪个版本都凑不够读 quorum,GET 和 HEAD 就会对一个存在的对 …

    本记录说明在 SILO Server 20261109 本地验收中发现的一个缺陷。修复前的 SILO Server 20261109 集成分支和 69fcf50cd 上都能复现。对应 #302。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短回答 刚重启的节点,或者短暂与部分节点断开连接的节点,只能看到纠删集里的一部分盘。如果它能看到的盘上,对象元数据分属两个修订版本,而哪个版本都凑不够读 quorum,GET 和 HEAD 就会对一个存在的对 …

  • Multipart 提交失败可能让上传卡死

    发布于 设计

    设计Multipart纠删码S3 兼容性

    Multipart 提交失败可能让上传卡死

    本记录说明在 SILO Server 20261109 发布验收中发现的一个缺陷。它在 69fcf50cd 与 SILO Server 20261109(d998292387cc)上都能复现,继承自上游 MinIO,尚无单独的 GitHub issue 编号。 状态: 已在 SILO Server 20261109 发布验收中完成分析与复现。曾起草一版候选修复,但对抗评审认定其对 SILO Server 20261109 风险过高而予以否决。SILO Server 20261109 将该缺陷记录 …

    本记录说明在 SILO Server 20261109 发布验收中发现的一个缺陷。它在 69fcf50cd 与 SILO Server 20261109(d998292387cc)上都能复现,继承自上游 MinIO,尚无单独的 GitHub issue 编号。 状态: 已在 SILO Server 20261109 发布验收中完成分析与复现。曾起草一版候选修复,但对抗评审认定其对 SILO Server 20261109 风险过高而予以否决。SILO Server 20261109 将该缺陷记录 …

  • 失败写入与幽灵空前缀

    发布于 设计

    设计存储ListObjects运维

    失败写入与幽灵空前缀

    本文覆盖 issue #285 和 Denis Babchuk 提交的 PR #286,基于 main 69fcf50cd 与 PR head ed05d982a 评估。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 报告属实。调用方已经放弃并删除了暂存数据之后,某块磁盘仍可能执行 xlStorage.RenameData。此时数据目录的重命名会失败,但为这次重命名创建的对象目录会留下来,而且是空的。只要它的父目录下还有其他对象,它就不可 …

    本文覆盖 issue #285 和 Denis Babchuk 提交的 PR #286,基于 main 69fcf50cd 与 PR head ed05d982a 评估。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 报告属实。调用方已经放弃并删除了暂存数据之后,某块磁盘仍可能执行 xlStorage.RenameData。此时数据目录的重命名会失败,但为这次重命名创建的对象目录会留下来,而且是空的。只要它的父目录下还有其他对象,它就不可 …

  • Peer 重载后的审计 Webhook

    发布于 设计

    设计审计日志配置运维

    Peer 重载后的审计 Webhook

    本文覆盖 Henrik Feldt 报告的 issue #259,基于 main 69fcf50cd 评估。本修复完成了维护者此前未提交的工作:补上 Kafka 调用点,在目标从未启动时把排队记录交给替代者,并增加 Kafka 测试覆盖。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 报告属实,一个定向测试即可复现。管理员在运行时修改 audit_webhook 时,接收请求的服务器用进程上下文应用这次修改;其他每台服务器在 peer 重 …

    本文覆盖 Henrik Feldt 报告的 issue #259,基于 main 69fcf50cd 评估。本修复完成了维护者此前未提交的工作:补上 Kafka 调用点,在目标从未启动时把排队记录交给替代者,并增加 Kafka 测试覆盖。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 报告属实,一个定向测试即可复现。管理员在运行时修改 audit_webhook 时,接收请求的服务器用进程上下文应用这次修改;其他每台服务器在 peer 重 …

  • 生命周期"删除全部版本"只能作用于一个 key

    发布于 设计

    DesignLifecycleBatch ExpirationData Safety

    生命周期"删除全部版本"只能作用于一个 key

    本文记录的缺陷是在审查 #278 的修复(多池生命周期过期)时发现的。评估基于 main 69fcf50cd,以及 #278 和 #281 的维护者集成分支;保留当时的评估快照。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 缺陷属实,也是 SILO Server 20261109 的发布阻塞项。有三种操作会删除一个 key 的"全部版本": 生命周期扩展 ExpiredObjectAllVersions; 生命周期动作 …

    本文记录的缺陷是在审查 #278 的修复(多池生命周期过期)时发现的。评估基于 main 69fcf50cd,以及 #278 和 #281 的维护者集成分支;保留当时的评估快照。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 缺陷属实,也是 SILO Server 20261109 的发布阻塞项。有三种操作会删除一个 key 的"全部版本": 生命周期扩展 ExpiredObjectAllVersions; 生命周期动作 …

  • 恢复副本:过期的是副本,不是对象

    发布于 设计

    设计生命周期分层存储数据安全

    恢复副本:过期的是副本,不是对象

    本文覆盖 issue #281 和 Denis Babchuk 提交的 PR #282,基于 main 69fcf50cd 评估。修复与多池生命周期修复(多池生命周期过期,#278)在同一个维护者集成 PR 中交付:贡献者提交原样保留,并附加下文所述的防护,同时配合单池锁域修复一并发布。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 报告属实。执行 POST ?restore 后,已分层的版本会在本地获得一份临时副本,保留到 …

    本文覆盖 issue #281 和 Denis Babchuk 提交的 PR #282,基于 main 69fcf50cd 评估。修复与多池生命周期修复(多池生命周期过期,#278)在同一个维护者集成 PR 中交付:贡献者提交原样保留,并附加下文所述的防护,同时配合单池锁域修复一并发布。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 报告属实。执行 POST ?restore 后,已分层的版本会在本地获得一份临时副本,保留到 …

  • 多池生命周期过期:按整个对象决策

    发布于 设计

    设计生命周期存储池数据安全

    多池生命周期过期:按整个对象决策

    本文覆盖 issue #278 和 Denis Babchuk 提交的 PR #279,基于 main 69fcf50cd 评估。修复已通过维护者集成合入:贡献者提交原样保留,并附加下文所述的维护者后续修正。恢复副本过期的修复(#281)在同一个集成 PR 中交付,另有单独记录。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 报告属实,也是 SILO Server 20261109 修复的首要发布阻塞缺陷。部署有多个池时,同一个 key …

    本文覆盖 issue #278 和 Denis Babchuk 提交的 PR #279,基于 main 69fcf50cd 评估。修复已通过维护者集成合入:贡献者提交原样保留,并附加下文所述的维护者后续修正。恢复副本过期的修复(#281)在同一个集成 PR 中交付,另有单独记录。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 报告属实,也是 SILO Server 20261109 修复的首要发布阻塞缺陷。部署有多个池时,同一个 key …

  • 大型单池集群的锁域

    发布于 设计

    设计锁存储运维

    大型单池集群的锁域

    本文覆盖在审查恢复副本修复(恢复副本:过期的是副本,不是对象)时发现的锁域缺陷,评估基线为 main 上的 69fcf50cd。对应 #298。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 锁域分裂是真实的,继承自上游 MinIO,并且只在一个池中的各纠删集并不使用相同主机时才存在。按自动布局,这意味着单池有 18 台或更多主机;不超过 17 台主机时,每个集都包含所有主机,锁组完全相同。 在这样的池里,DELETE、批量删除 …

    本文覆盖在审查恢复副本修复(恢复副本:过期的是副本,不是对象)时发现的锁域缺陷,评估基线为 main 上的 69fcf50cd。对应 #298。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 锁域分裂是真实的,继承自上游 MinIO,并且只在一个池中的各纠删集并不使用相同主机时才存在。按自动布局,这意味着单池有 18 台或更多主机;不超过 17 台主机时,每个集都包含所有主机,锁组完全相同。 在这样的池里,DELETE、批量删除 …

  • Heal 演练不能删除数据

    发布于 设计

    设计Heal数据安全运维

    Heal 演练不能删除数据

    本文覆盖 Jasper Bernhardt(@dihmandrake)提交的 PR #280 中与演练(dry run)相关的部分,基于 main 69fcf50cd 评估。同一个 PR 还让深度扫描并发校验一个对象的各块盘。这项优化另行评审,不在本文范围内。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 缺陷属实,是 SILO 从上游 MinIO 继承来的。mc admin heal --dry-run 的说明是"只检查数据,不做修改 …

    本文覆盖 Jasper Bernhardt(@dihmandrake)提交的 PR #280 中与演练(dry run)相关的部分,基于 main 69fcf50cd 评估。同一个 PR 还让深度扫描并发校验一个对象的各块盘。这项优化另行评审,不在本文范围内。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 简短结论 缺陷属实,是 SILO 从上游 MinIO 继承来的。mc admin heal --dry-run 的说明是"只检查数据,不做修改 …

  • Console 的桶配额:列表显示与数值校验

    发布于 设计

    DesignconsoleQuotaRetention

    Console 的桶配额:列表显示与数值校验

    本文覆盖 silo-console#72(在 Web Console 中设置的配额在桶列表里显示为短横线)和 silo-console#73(创建桶表单的数值校验)。评估基于修复之前的 Console 源码 3d264aea9,以及修复提交 a85665814 至 5a34232e7。 状态: PR #74(3d1dd56eb,2026-11-04)已随独立版 Console 2.6.0(f8ab14669)发布。PR #74 及全部数值后续修复(#75 2b18ff854、#76 …

    本文覆盖 silo-console#72(在 Web Console 中设置的配额在桶列表里显示为短横线)和 silo-console#73(创建桶表单的数值校验)。评估基于修复之前的 Console 源码 3d264aea9,以及修复提交 a85665814 至 5a34232e7。 状态: PR #74(3d1dd56eb,2026-11-04)已随独立版 Console 2.6.0(f8ab14669)发布。PR #74 及全部数值后续修复(#75 2b18ff854、#76 …

  • ILM 过期与存储池迁移顺序

    发布于 设计

    设计生命周期存储池复制

    ILM 过期与存储池迁移顺序

    本文记录 issue #265、贡献者修复 PR #266 与维护者后续修复 #276,并说明已经合入的 #264 与 #267 是相关前置修复。#266 的 decommission 提交是 19910230a,rebalance 提交是 a995921e5。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 更新(2026-11-06)。 生命周期删除不复制,S3 如此,SILO 的每个发布版本也是如此。#276 曾在 main 上短暂地让它们复制 …

    本文记录 issue #265、贡献者修复 PR #266 与维护者后续修复 #276,并说明已经合入的 #264 与 #267 是相关前置修复。#266 的 decommission 提交是 19910230a,rebalance 提交是 a995921e5。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 更新(2026-11-06)。 生命周期删除不复制,S3 如此,SILO 的每个发布版本也是如此。#276 曾在 main 上短暂地让它们复制 …

  • Tier free version 是内部清理记录

    发布于 设计

    设计Tier生命周期存储池兼容性

    Tier free version 是内部清理记录

    本文记录 issue #263 与 PR #264 的审查结论(#276 后续更新基线 0fc5a0b5),#264 的合入提交记录为 0cfca29c。这个 PR 的三个提交是一组相互配合的修复,不是三个互不相关的 workaround。 状态: 已连同下文的 free version 清理归属与 decommission 取消后续修复一并随 SILO Server 20261109(d998292387cc)正式发布。 先说结论 问题成立。free version 是 SILO 在删除 …

    本文记录 issue #263 与 PR #264 的审查结论(#276 后续更新基线 0fc5a0b5),#264 的合入提交记录为 0cfca29c。这个 PR 的三个提交是一组相互配合的修复,不是三个互不相关的 workaround。 状态: 已连同下文的 free version 清理归属与 decommission 取消后续修复一并随 SILO Server 20261109(d998292387cc)正式发布。 先说结论 问题成立。free version 是 SILO 在删除 …

  • 混合 EC 布局与迁移列表

    发布于 设计

    设计存储池纠删码迁移

    混合 EC 布局与迁移列表

    本文记录 issue #261 与 PR #262 的审查结论(#276 后续更新基线 0fc5a0b5)。实际修复通过维护者 PR #267(a7310d59f)合入,#262 是被取代的重复 PR。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 先说结论 问题成立。一次成功的降级覆写可能让一个无版本对象同时存在两种 EC 布局:在线磁盘上有更新的副本,离线磁盘上保留旧副本。GET 与 ListObjectsV2 能选出更新的可读多数 …

    本文记录 issue #261 与 PR #262 的审查结论(#276 后续更新基线 0fc5a0b5)。实际修复通过维护者 PR #267(a7310d59f)合入,#262 是被取代的重复 PR。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。 先说结论 问题成立。一次成功的降级覆写可能让一个无版本对象同时存在两种 EC 布局:在线磁盘上有更新的副本,离线磁盘上保留旧副本。GET 与 ListObjectsV2 能选出更新的可读多数 …

  • 存储池迁移完整性审查:#261、#263 与 #265

    发布于 设计

    设计存储池生命周期兼容性

    存储池迁移完整性审查:#261、#263 与 #265

    本文审查 #261、#263、#265 及其对应的修复 #262、#264、#266,并记录维护者后续修复 #276。这是设计与审查记录,不是发布说明。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。PR #267(取代 #262)、#264、#266 与 #276(已在发布前移除生命周期删除复制)均已随 RELEASE.2026-11-09T00-00-00Z 一并交付。 先看结论 问题 是否成立 对应 PR 的判断 建议处理 #261 成立。可读 …

    本文审查 #261、#263、#265 及其对应的修复 #262、#264、#266,并记录维护者后续修复 #276。这是设计与审查记录,不是发布说明。 状态: 已随 SILO Server 20261109(d998292387cc)正式发布。PR #267(取代 #262)、#264、#266 与 #276(已在发布前移除生命周期删除复制)均已随 RELEASE.2026-11-09T00-00-00Z 一并交付。 先看结论 问题 是否成立 对应 PR 的判断 建议处理 #261 成立。可读 …

  • 多池删除:失败时保住最新副本

    发布于 设计

    DesignS3StoragePerformance

    多池删除:失败时保住最新副本

    2026 年 10 月 24 日决定:合并修正后的 PR #257(已随 Server 20261026 发布)。 提交 aafe4f8886 修复了 issue #256 报告的多池删除缺陷,并补齐请求开始之后的执行期故障保护。核心不变量是:先完成其他池的旧副本清理,再删除决定当前读取结果的权威副本。 Denis Babchuk 报告了该问题并提交了初始补丁。代码评审复现了故障,发现批量删除在通过在线盘数预检查后仍存在执行期故障窗口,随后补充分阶段执行、逐项响应身份保持、部分删除重试以及共享分 …

    2026 年 10 月 24 日决定:合并修正后的 PR #257(已随 Server 20261026 发布)。 提交 aafe4f8886 修复了 issue #256 报告的多池删除缺陷,并补齐请求开始之后的执行期故障保护。核心不变量是:先完成其他池的旧副本清理,再删除决定当前读取结果的权威副本。 Denis Babchuk 报告了该问题并提交了初始补丁。代码评审复现了故障,发现批量删除在通过在线盘数预检查后仍存在执行期故障窗口,随后补充分阶段执行、逐项响应身份保持、部分删除重试以及共享分 …

  • 多池覆盖亲和:为何最终没有采纳 #245

    发布于 设计

    DesignS3StoragePerformanceReview

    多池覆盖亲和:为何最终没有采纳 #245

    2026 年 10 月 24 日决定:不合并本次测试的多池覆盖亲和补丁(PR #245)。 该方案解决了跨池覆盖遗留旧副本的空间占用问题,但无论完整策略还是仅限普通无版本覆盖的收窄策略,都未能在性能测试中达到可接受的权衡。两个实验分支(codex/healthy-pool-affinity 与 codex/unversioned-pool-affinity)已保留归档,服务端 main 分支保持原状。 Denis Babchuk 提出的思路是:覆盖已有对象时,优先写回已存放该对象的池。代码评审发 …

    2026 年 10 月 24 日决定:不合并本次测试的多池覆盖亲和补丁(PR #245)。 该方案解决了跨池覆盖遗留旧副本的空间占用问题,但无论完整策略还是仅限普通无版本覆盖的收窄策略,都未能在性能测试中达到可接受的权衡。两个实验分支(codex/healthy-pool-affinity 与 codex/unversioned-pool-affinity)已保留归档,服务端 main 分支保持原状。 Denis Babchuk 提出的思路是:覆盖已有对象时,优先写回已存放该对象的池。代码评审发 …

  • FULL_OBJECT 校验和复制:在初始化上传时保留类型

    发布于 设计

    DesignReplicationS3Checksum

    FULL_OBJECT 校验和复制:在初始化上传时保留类型

    Issue #254 报告了一类复制故障:使用 FULL_OBJECT CRC32 或 CRC32C 校验和的分片上传对象在源端可正常上传和读取,但复制到目标端并在最后调用 CompleteMultipartUpload 时会因 400 BadDigest 失败。Denis Babchuk(@botdeniska)提交的 PR #255 补回了出站复制请求遗漏的校验和类型头。 该补丁于 2026 年 10 月 24 日以 6d890fc86 合入主干并随 Server 20261026 发布,共 …

    Issue #254 报告了一类复制故障:使用 FULL_OBJECT CRC32 或 CRC32C 校验和的分片上传对象在源端可正常上传和读取,但复制到目标端并在最后调用 CompleteMultipartUpload 时会因 400 BadDigest 失败。Denis Babchuk(@botdeniska)提交的 PR #255 补回了出站复制请求遗漏的校验和类型头。 该补丁于 2026 年 10 月 24 日以 6d890fc86 合入主干并随 Server 20261026 发布,共 …