跳转到主要内容

设计归档

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

2026-11-09 Console 多语言

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

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

  • 多池生命周期过期:按整个对象决策(#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 修复覆盖了什么。
  • 大型单池集群的锁域:解释在 18 台及以上主机的单池集群中,DELETE 与 CopyObject 为何无法与同一 key 上的 PUT 互斥,哪些布局受影响,以及关闭它的路由改动。

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

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 正式版的核心架构改动,请参阅:

  • IAM 策略重载:锁粒度、请求取消与超时预算隔离

    发布于 设计

    DesignIAMKMSS3Review

    IAM 策略重载:锁粒度、请求取消与超时预算隔离

    提交 1b5477f3d(pgsty/silo#251)解决了 KMS/KES 响应缓慢时的两类级联故障: 鉴权缓存锁争用:ListPolicies 与 ListPolicyDocs 在保留 IAM 写操作串行锁(writeMu)的前提下,将慢速的后端策略读取与解密移出内存鉴权缓存锁(store.lock()),避免管理员列举策略时阻塞普通用户的 S3 读写请求。 全链路取消传播与超时预算隔离:将调用方的请求 context.Context 贯通至 IAM 配置解密、SSE-S3 列表密钥解封以 …

    提交 1b5477f3d(pgsty/silo#251)解决了 KMS/KES 响应缓慢时的两类级联故障: 鉴权缓存锁争用:ListPolicies 与 ListPolicyDocs 在保留 IAM 写操作串行锁(writeMu)的前提下,将慢速的后端策略读取与解密移出内存鉴权缓存锁(store.lock()),避免管理员列举策略时阻塞普通用户的 S3 读写请求。 全链路取消传播与超时预算隔离:将调用方的请求 context.Context 贯通至 IAM 配置解密、SSE-S3 列表密钥解封以 …

  • Alias 区域:小配置改动的兼容性边界

    发布于 设计

    设计mcliS3兼容性

    Alias 区域:小配置改动的兼容性边界

    2026-10-23 决策:mcli PR #44 已在 91006a587 合入 main。我们接受按 alias 配置区域的方案,保留小范围生产实现并补充回归覆盖。本文记录当时的设计决定。该能力已包含在正式发布的 mcli 20261109 中;以下配置边界按该版本源码复核。 原始补丁和测试由 mr javad seydi 贡献,解决的是上游 issue #5268 所报告的配置能力缺口。 缺少的究竟是什么 原始报告中的内部 S3 服务不实现 GetBucketLocation,调用时返回 …

    2026-10-23 决策:mcli PR #44 已在 91006a587 合入 main。我们接受按 alias 配置区域的方案,保留小范围生产实现并补充回归覆盖。本文记录当时的设计决定。该能力已包含在正式发布的 mcli 20261109 中;以下配置边界按该版本源码复核。 原始补丁和测试由 mr javad seydi 贡献,解决的是上游 issue #5268 所报告的配置能力缺口。 缺少的究竟是什么 原始报告中的内部 S3 服务不实现 GetBucketLocation,调用时返回 …

  • SILO、KES 与 OpenBao:密钥归属和恢复

    发布于 设计

    设计KES安全运维

    SILO、KES 与 OpenBao:密钥归属和恢复

    SILO 通过 PGSTY KES(MINIO_KMS_KES_ENDPOINT)接入外部密钥管理系统。当前最新版本为 KES 20261026(使用 Go 1.27.3 构建并更新云服务依赖,保持本文的 API、配置与密钥格式不变);此前的 PGSTY KES 20261018(源码 2f7e741db905)完成了将 AWS Secrets Manager 后端迁移至 AWS SDK for Go v2 的主体改造。 三个服务的职责边界 服务 负责内容 调用对象 SILO 对象字节流与对象加 …

    SILO 通过 PGSTY KES(MINIO_KMS_KES_ENDPOINT)接入外部密钥管理系统。当前最新版本为 KES 20261026(使用 Go 1.27.3 构建并更新云服务依赖,保持本文的 API、配置与密钥格式不变);此前的 PGSTY KES 20261018(源码 2f7e741db905)完成了将 AWS Secrets Manager 后端迁移至 AWS SDK for Go v2 的主体改造。 三个服务的职责边界 服务 负责内容 调用对象 SILO 对象字节流与对象加 …

  • LIST 漏项修复:仅对存疑对象补读确认并收敛锁等待开销

    发布于 设计

    DesignS3ListObjectsPerformanceReview

    LIST 漏项修复:仅对存疑对象补读确认并收敛锁等待开销

    随 SILO Server 20261018 发布的 PR #239(合并提交 fbcb51197,关闭 #218 并保留 mr javad seydi 在 #221 中的原始签署提交)以及 10 月 18 日的目录与公共前缀跟进修复(3dd53eb81 与 2080b3d03),解决了并发读写期间 ListObjects 与 ListObjectsV2 静默漏报对象的问题。本设计承接九月的 null 版本仲裁修复,并替代了早期“直接调用普通 GET 元数据路径”的恢复方案。 成功的目录列举可能 …

    随 SILO Server 20261018 发布的 PR #239(合并提交 fbcb51197,关闭 #218 并保留 mr javad seydi 在 #221 中的原始签署提交)以及 10 月 18 日的目录与公共前缀跟进修复(3dd53eb81 与 2080b3d03),解决了并发读写期间 ListObjects 与 ListObjectsV2 静默漏报对象的问题。本设计承接九月的 null 版本仲裁修复,并替代了早期“直接调用普通 GET 元数据路径”的恢复方案。 成功的目录列举可能 …

  • IAM Admin API 授权边界修复

    发布于 设计

    DesignIAMSecurityCompatibility

    IAM Admin API 授权边界修复

    Server 20261018 包含了 PR #242(基于基线 00a375c4e 的修复提交 2616d43fb,合并提交 4e55fc7db)以及批量自查询后续修复 995439260,用于修复 SN-2026-017。本文记录问题范围、Handler 级授权契约、空策略与 claims 归属处理、损坏密钥清理语义、性能开销、被否决的候选方案以及回归验证结果。 问题与范围 此前部分 Admin Handler 在授权拒绝后仍以“目标属于调用者”为由放行,列出自身服务账号时甚至可能直接跳过授 …

    Server 20261018 包含了 PR #242(基于基线 00a375c4e 的修复提交 2616d43fb,合并提交 4e55fc7db)以及批量自查询后续修复 995439260,用于修复 SN-2026-017。本文记录问题范围、Handler 级授权契约、空策略与 claims 归属处理、损坏密钥清理语义、性能开销、被否决的候选方案以及回归验证结果。 问题与范围 此前部分 Admin Handler 在授权拒绝后仍以“目标属于调用者”为由放行,列出自身服务账号时甚至可能直接跳过授 …

  • 旧版元数据与扫描响应复用时的残留字段修复

    发布于 设计

    设计可靠性存储扫描器

    旧版元数据与扫描响应复用时的残留字段修复

    本文记录 PR #233(验证提交 86c5a92eef3d,合并提交 d94b3b3c9251,随 Server 20261018 发布)的设计与验证。该补丁修复了旧版 xl.meta 版本头部与远程命名空间扫描响应在复用结构体时带入残留字段的问题。 问题概述 两处独立代码路径在复用 Go 结构体时未完整重置其逻辑状态,导致新输入中未出现的字段沿用了上一轮留下的旧值。修复直接落在明确知晓当前输入字段布局的解码器与响应构造处: 路径 触发条件 修复前状态 修复后状态 旧版 V2 版本头部 将旧版 …

    本文记录 PR #233(验证提交 86c5a92eef3d,合并提交 d94b3b3c9251,随 Server 20261018 发布)的设计与验证。该补丁修复了旧版 xl.meta 版本头部与远程命名空间扫描响应在复用结构体时带入残留字段的问题。 问题概述 两处独立代码路径在复用 Go 结构体时未完整重置其逻辑状态,导致新输入中未出现的字段沿用了上一轮留下的旧值。修复直接落在明确知晓当前输入字段布局的解码器与响应构造处: 路径 触发条件 修复前状态 修复后状态 旧版 V2 版本头部 将旧版 …

  • 对象锁保留期越权与版本覆写漏洞修复设计(SN-2026-015 / SN-2026-016)

    发布于 设计

    SILOSecurityObject LockWORMS3IAM

    对象锁保留期越权与版本覆写漏洞修复设计(SN-2026-015 / SN-2026-016)

    本文档完整记录针对外部报告与内部关联排查发现的两处对象锁(Object Lock / WORM)安全缺陷——**SN-2026-015(PutObjectRetention 绕过请求头越权与条件策略失灵)**与 SN-2026-016(版本寻址写入覆写绕过及写路径锁缺口)——的事实核验、Git 历史溯源、修复设计、关键路径影响评估与候选方案的权衡取舍。完整修复(#234、#235、#241)已随 Server 20261018 正式发布。 关联公开安全公告: SN-2026-015 / …

    本文档完整记录针对外部报告与内部关联排查发现的两处对象锁(Object Lock / WORM)安全缺陷——**SN-2026-015(PutObjectRetention 绕过请求头越权与条件策略失灵)**与 SN-2026-016(版本寻址写入覆写绕过及写路径锁缺口)——的事实核验、Git 历史溯源、修复设计、关键路径影响评估与候选方案的权衡取舍。完整修复(#234、#235、#241)已随 Server 20261018 正式发布。 关联公开安全公告: SN-2026-015 / …

  • 写死 TLS 参数与握手兼容性

    发布于 设计

    设计TLSOIDC运维兼容性

    写死 TLS 参数与握手兼容性

    Go TLS 默认值修复 48e184652 随 Server 20260916 发布后,issue #154 的报告人在该版本复测,OIDC discovery 仍然报同一条 connection reset by peer。与此同时,上游 Go 社区的同类 issue 将完全一致的症状定位到检查 signature_algorithms_cert 扩展并发送重置的 TLS 中间设备(见上游的同款案例)。本文在《Go 1.27 TLS 默认值与 OIDC Discovery 故障形态》的基础上 …

    Go TLS 默认值修复 48e184652 随 Server 20260916 发布后,issue #154 的报告人在该版本复测,OIDC discovery 仍然报同一条 connection reset by peer。与此同时,上游 Go 社区的同类 issue 将完全一致的症状定位到检查 signature_algorithms_cert 扩展并发送重置的 TLS 中间设备(见上游的同款案例)。本文在《Go 1.27 TLS 默认值与 OIDC Discovery 故障形态》的基础上 …

  • 列举不能丢掉仍有仲裁的 null 版本

    发布于 设计

    设计S3ListObjects评审

    列举不能丢掉仍有仲裁的 null 版本

    本文记录 2026-09-16 调查的对象列举漏项问题:未开启版本控制的存储桶在并发覆盖写下返回 HTTP 200 的列表,却漏掉了同一端点仍能正常 GET 的对象键。下文说明已确认的合并缺陷机制、提交 8d06424b1(随 Server 20260916 发布)的针对性修复与验证数据,以及在 #218 中跟踪、随后在 Server 20261018 中由 PR #239 关闭的滚动重启漏项边界(详见 LIST 恢复设计)。 缺陷机制 对象列举会合并被询问各块磁盘返回的版本流。当各盘状态不一致 …

    本文记录 2026-09-16 调查的对象列举漏项问题:未开启版本控制的存储桶在并发覆盖写下返回 HTTP 200 的列表,却漏掉了同一端点仍能正常 GET 的对象键。下文说明已确认的合并缺陷机制、提交 8d06424b1(随 Server 20260916 发布)的针对性修复与验证数据,以及在 #218 中跟踪、随后在 Server 20261018 中由 PR #239 关闭的滚动重启漏项边界(详见 LIST 恢复设计)。 缺陷机制 对象列举会合并被询问各块磁盘返回的版本流。当各盘状态不一致 …

  • Go 1.27 TLS 默认值与 OIDC Discovery 故障诊断

    发布于 设计

    设计TLSOIDC运维

    Go 1.27 TLS 默认值与 OIDC Discovery 故障诊断

    SILO 工具链升级至 Go 1.27 后,Server TLS 修复 48e184652(“fix(tls): honor Go key exchange defaults across transports”,随 Server 20260916 发布)移除了 8 处 Server TLS 配置点上的显式椭圆曲线覆盖。本文记录 Go 1.27 在 TLS 层的变更细节、issue #154 排查总结的分阶段诊断方法,以及身份提供方(IdP)在启动阶段不可达时的健康检查端点行为。 关于发布后复测 …

    SILO 工具链升级至 Go 1.27 后,Server TLS 修复 48e184652(“fix(tls): honor Go key exchange defaults across transports”,随 Server 20260916 发布)移除了 8 处 Server TLS 配置点上的显式椭圆曲线覆盖。本文记录 Go 1.27 在 TLS 层的变更细节、issue #154 排查总结的分阶段诊断方法,以及身份提供方(IdP)在启动阶段不可达时的健康检查端点行为。 关于发布后复测 …

  • 请求头截止时间:绝对头部上限与滚动的正文空闲超时

    发布于 设计

    设计HTTPS3评审

    请求头截止时间:绝对头部上限与滚动的正文空闲超时

    本文记录 Server HTTP 读取截止时间的修复设计,该修复通过 PR #196 合入主干(提交 055030ea5),随 Server 20260916(40220bd836cbd066ca424fa4dc5dbb90057fb55a)发布。 排查源于慢速 HTTP DoS 扫描器报告(#183),并通过两组实验验证:一是直接 TCP 对照实验(请求头限制设为 100 ms、实际分批发送耗时 400 ms,标准 Go 服务拒绝该请求而旧版服务返回 204);二是单盘进程探针验证(通过命令行 …

    本文记录 Server HTTP 读取截止时间的修复设计,该修复通过 PR #196 合入主干(提交 055030ea5),随 Server 20260916(40220bd836cbd066ca424fa4dc5dbb90057fb55a)发布。 排查源于慢速 HTTP DoS 扫描器报告(#183),并通过两组实验验证:一是直接 TCP 对照实验(请求头限制设为 100 ms、实际分批发送耗时 400 ms,标准 Go 服务拒绝该请求而旧版服务返回 204);二是单盘进程探针验证(通过命令行 …

  • 副本元数据归一化:可信复制不得重新注入什么

    发布于 设计

    设计复制S3评审

    副本元数据归一化:可信复制不得重新注入什么

    随 SILO Server 20260916(40220bd836cbd066ca424fa4dc5dbb90057fb55a)发布的 PR #194(修复提交 4fcdf37ce,合并提交 9f3037e941,采纳并保留 Mikhail Khadarenka 在 PR #187 中的实现),修复了可信复制接收端在恢复副本内部元数据时重新调用宽松请求头提取器、导致仅用于传输的 aws-chunked Content-Encoding 标记与 GHSA 已脱敏的用户元数据重新回流至落盘对象中的回 …

    随 SILO Server 20260916(40220bd836cbd066ca424fa4dc5dbb90057fb55a)发布的 PR #194(修复提交 4fcdf37ce,合并提交 9f3037e941,采纳并保留 Mikhail Khadarenka 在 PR #187 中的实现),修复了可信复制接收端在恢复副本内部元数据时重新调用宽松请求头提取器、导致仅用于传输的 aws-chunked Content-Encoding 标记与 GHSA 已脱敏的用户元数据重新回流至落盘对象中的回 …

  • 复制标签排序:修订时间戳、墓碑与复活

    发布于 设计

    设计复制S3评审

    复制标签排序:修订时间戳、墓碑与复活

    随 SILO Server 20260916(40220bd836cbd066ca424fa4dc5dbb90057fb55a)发布的 PR #193(修复提交 03027727d)与 PR #196(修复提交 680eac66e),修复了对象标签在跨桶复制中保持顺序的两项缺陷:SSE-KMS 目的端复制静默丢弃标签修订时间戳(R4),以及空标签值(删除操作)缺失修订时间戳导致延迟到达的复制事件将已删除标签“复活”(R5)。 共同模型:标签值与其修订时间戳共同构成单一状态 对象标签在复制时通过请 …

    随 SILO Server 20260916(40220bd836cbd066ca424fa4dc5dbb90057fb55a)发布的 PR #193(修复提交 03027727d)与 PR #196(修复提交 680eac66e),修复了对象标签在跨桶复制中保持顺序的两项缺陷:SSE-KMS 目的端复制静默丢弃标签修订时间戳(R4),以及空标签值(删除操作)缺失修订时间戳导致延迟到达的复制事件将已删除标签“复活”(R5)。 共同模型:标签值与其修订时间戳共同构成单一状态 对象标签在复制时通过请 …

  • 联邦 CopyObject:保持目标对象契约

    发布于 设计

    设计S3运维

    联邦 CopyObject:保持目标对象契约

    Server 20260916 通过 PR #157、PR #159、PR #163、PR #177 与 PR #179 修复了旧版 etcd 存储桶联邦(bucket federation)的 CopyObject 转发路径。当代理节点将跨集群复制作为远端 PutObject 转发到目标集群时,代理节点流式读取并发送源对象的逻辑字节,由目标端执行加密与 Object Lock 规则,校验完整对象校验和,并原样返回目标端实际提交的写入元数据。 转发一次逻辑字节,由目标端执行加密 代理节点在本地按 …

    Server 20260916 通过 PR #157、PR #159、PR #163、PR #177 与 PR #179 修复了旧版 etcd 存储桶联邦(bucket federation)的 CopyObject 转发路径。当代理节点将跨集群复制作为远端 PutObject 转发到目标集群时,代理节点流式读取并发送源对象的逻辑字节,由目标端执行加密与 Object Lock 规则,校验完整对象校验和,并原样返回目标端实际提交的写入元数据。 转发一次逻辑字节,由目标端执行加密 代理节点在本地按 …

  • 多池对象一致性

    发布于 设计

    DesignS3Operations

    多池对象一致性

    随 SILO Server 20260916 发布的 PR #178 修复了多存储池修改顺序问题,PR #207 将当前逻辑对象选择扩展至条件 PUT(关闭 #133 与 #144),提交 fced86303 则修复了跨池再平衡(rebalance)与退役(decommission)迁移丢失对象标签的缺陷。随后的 SILO Server 20261018 进一步合入 60c7179dd(纳入 PR #248)与 1748f62c7,修复了跨池迁移期间旧数据覆盖新副本以及删除标记(Delete …

    随 SILO Server 20260916 发布的 PR #178 修复了多存储池修改顺序问题,PR #207 将当前逻辑对象选择扩展至条件 PUT(关闭 #133 与 #144),提交 fced86303 则修复了跨池再平衡(rebalance)与退役(decommission)迁移丢失对象标签的缺陷。随后的 SILO Server 20261018 进一步合入 60c7179dd(纳入 PR #248)与 1748f62c7,修复了跨池迁移期间旧数据覆盖新副本以及删除标记(Delete …

  • 持久化 IAM 撤销

    发布于 设计

    DesignS3Operations

    持久化 IAM 撤销

    SILO 保留已删除 IAM 记录的版本(Revision),使离线站点在重新连接后无法将已删除的旧身份或旧授权恢复为有效状态。该机制覆盖内置用户、服务账号、组、策略文档,以及用户、STS 父身份和组各自命名空间中的策略映射。内置用户被删除后,即使管理员有意重建同名用户,此前签发的旧服务账号、STS 临时凭证与组授权也不会因此复活。 持久化 IAM 撤销架构(PR #191、#192,提交 f99ed829b5eba549160725f035156c9e020b6a07)已随 Server …

    SILO 保留已删除 IAM 记录的版本(Revision),使离线站点在重新连接后无法将已删除的旧身份或旧授权恢复为有效状态。该机制覆盖内置用户、服务账号、组、策略文档,以及用户、STS 父身份和组各自命名空间中的策略映射。内置用户被删除后,即使管理员有意重建同名用户,此前签发的旧服务账号、STS 临时凭证与组授权也不会因此复活。 持久化 IAM 撤销架构(PR #191、#192,提交 f99ed829b5eba549160725f035156c9e020b6a07)已随 Server …

  • SSE-C 副本完整性

    发布于 设计

    DesignS3Operations

    SSE-C 副本完整性

    本文记录由 #122、#123、#124、#126 和 #134 共同构成的 SSE-C 副本完整性契约(随 Server 20260916 发布),与此前在 Server 20260903 中发布的零字节/属性读取认证及目标密钥 checksum 响应修复衔接。 密文与信任 普通 SSE-C 请求提供客户密钥,操作明文。经过授权的副本传输可以携带原始密文和保留原对象所需的密封对象密钥元数据。目标必须原样存储这些字节,再加密一次会产生不可读的双重加密对象。内部标记本身不是授权:仍需精确复制标记和 …

    本文记录由 #122、#123、#124、#126 和 #134 共同构成的 SSE-C 副本完整性契约(随 Server 20260916 发布),与此前在 Server 20260903 中发布的零字节/属性读取认证及目标密钥 checksum 响应修复衔接。 密文与信任 普通 SSE-C 请求提供客户密钥,操作明文。经过授权的副本传输可以携带原始密文和保留原对象所需的密封对象密钥元数据。目标必须原样存储这些字节,再加密一次会产生不可读的双重加密对象。内部标记本身不是授权:仍需精确复制标记和 …

  • Object Lock 复制排序

    发布于 设计

    DesignS3Operations

    Object Lock 复制排序

    Object Lock 复制时间戳排序的初始修复(f4c1286c9)已随 SILO Server 20260903 发布(收录于安全公告台账)。针对仅携带时间戳的删除(墓碑)、SSE-C 副本完整重传以及跨存储池 Object Lock 状态合并的后续修复(PR #129、PR #134 与 PR #178)已随 SILO Server 20260916 正式发布。 在重建目标元数据前捕获已存状态 此前,副本 COPY 在比较 Object Lock 保留期(Retention)与法务锁定 …

    Object Lock 复制时间戳排序的初始修复(f4c1286c9)已随 SILO Server 20260903 发布(收录于安全公告台账)。针对仅携带时间戳的删除(墓碑)、SSE-C 副本完整重传以及跨存储池 Object Lock 状态合并的后续修复(PR #129、PR #134 与 PR #178)已随 SILO Server 20260916 正式发布。 在重建目标元数据前捕获已存状态 此前,副本 COPY 在比较 Object Lock 保留期(Retention)与法务锁定 …

  • 桶配置复制:来源时间、删除与确定性收敛

    发布于 设计

    设计复制S3

    桶配置复制:来源时间、删除与确定性收敛

    #77 是已在 Server 20260916(PR #180,提交 48ec10312)中修复的站点复制正确性缺陷。修复前,接收站点将对端事件的来源时间改写为本地到达时间(UTCNow),导致后续真正较新的删除请求因早于本地到达时间而被当作旧事件拒绝;同时部分配置在删除后不再导出时间戳,断连期间遗漏的删除也无法通过自愈(heal)恢复。仅补一个 DELETE 分支无法同时解决这两类问题,确定性收敛必须同时具备来源时间保留、持久化删除墓碑(tombstone)、规范化内容比较键以及整桶元数据锁。 …

    #77 是已在 Server 20260916(PR #180,提交 48ec10312)中修复的站点复制正确性缺陷。修复前,接收站点将对端事件的来源时间改写为本地到达时间(UTCNow),导致后续真正较新的删除请求因早于本地到达时间而被当作旧事件拒绝;同时部分配置在删除后不再导出时间戳,断连期间遗漏的删除也无法通过自愈(heal)恢复。仅补一个 DELETE 分支无法同时解决这两类问题,确定性收敛必须同时具备来源时间保留、持久化删除墓碑(tombstone)、规范化内容比较键以及整桶元数据锁。 …

  • 复制可靠性:删除完成、MRF 可见性与 resync 取消

    发布于 设计

    设计复制S3评审

    复制可靠性:删除完成、MRF 可见性与 resync 取消

    本文记录随 Server 20260916 交付的三轮复制可靠性修复的问题分析、方案取舍与验收结论: 第一轮(PR #162,合并为 d1105bbb): 修复 #153、#152 与 #137,分别涉及请求入口的操作分类、后台恢复队列的可观测性以及任务取消生命周期。 第二轮(PR #196,提交 0c61128d2): 修复复制工作协程(worker)的删除出口、外层状态聚合与持久化 MRF 标记恢复路径(见第二轮小节)。 第三轮(提交 eb4f5e5b3、254b19ac0 与 …

    本文记录随 Server 20260916 交付的三轮复制可靠性修复的问题分析、方案取舍与验收结论: 第一轮(PR #162,合并为 d1105bbb): 修复 #153、#152 与 #137,分别涉及请求入口的操作分类、后台恢复队列的可观测性以及任务取消生命周期。 第二轮(PR #196,提交 0c61128d2): 修复复制工作协程(worker)的删除出口、外层状态聚合与持久化 MRF 标记恢复路径(见第二轮小节)。 第三轮(提交 eb4f5e5b3、254b19ac0 与 …