SILO 20261015:已替代草稿记录
发布于 发布注记
20261015 历史候选源码与制品验收记录;已被正式版 20261018 替代。
状态:已被正式版 Server 20261018 替代。 RELEASE.2026-10-15T00-00-00Z 曾于 2026-10-15 13:52:28(UTC+8)短暂公开,随后撤回为 Draft 并由包含完整十月修复栈的 20261018 接替。本页归档该候选版的源码范围与制品验收记录,新部署与升级请直接使用 20261018。
- 历史标签:
RELEASE.2026-10-15T00-00-00Z - 软件包版本:
20261015000000.0.0 - 候选源码:
7a3ca0f82100cce06289a465f54139da2639f642(相对于 Server 20260916 的完整源码差异)
对象锁修复
- SN-2026-015 — 保留期修改授权(#234):每次
PutObjectRetention请求在读取对象状态前,必须携带请求体中的 Object Lock 条件键通过s3:PutObjectRetention鉴权。缩短、清除未到期GOVERNANCE保留期或改变其模式时,必须同时具备显式 bypass 请求头与s3:BypassGovernanceRetention权限(不能绕过基础s3:PutObjectRetention的Deny)。清除保留期按剩余0天求值,远期日期计算不再溢出饱和。 - SN-2026-016 — 保护已有版本免受原位覆写(#235):客户端指定写入
versionId必须具备可信复制权限(s3:ReplicateObject)。目录null版本与持久化分片上传目标在实际覆写前、持有目标写锁时复查锁状态(覆盖升级前创建或从旧暂存状态恢复的分片上传),确保既有GOVERNANCE、COMPLIANCE与 Legal Hold 保护生效;锁状态读取失败时拒绝写入。 - 发行前置门禁(#237):发行构建流水线新增 Object Lock 竞态回归前置检查,覆盖慢请求体目录覆写、预检读取失败、旧分片完成覆写
COMPLIANCE以及恢复上传 UUID 碰撞。
20260916 以来的其他改动
| 改动 | 用户可见效果 |
|---|---|
| #233 | 解码复用的旧版 xl.meta 头部时清除缺失字段,并使扫描更新与最终响应字段互斥(见结构体复用修复记录)。 |
| #225 | 对齐 S3 校验和错误文案(含 Content-MD5 拼写)。 |
| #220 | 修复 Lambda 目标集合 TargetIDSet.IsEmpty 判空逻辑,并补充空集合与非空集合回归测试。 |
fa565ec9f |
升级至 Go 1.27.2、golangci-lint 与 golang.org/x/net v0.60.0,同步模块要求与固定 digest 的 Docker 构建阶段。 |
组件身份
| 组件 | 选用版本 |
|---|---|
| Server | RELEASE.2026-10-15T00-00-00Z(包版本 20261015000000.0.0) |
| 内嵌 Console | v2.4.1(源码 1360e26d976d) |
| mcli | RELEASE.2026-09-16T00-00-00Z(源码 e952aa78f10a) |
| 共享包 | github.com/pgsty/silo-pkg/v3 v3.14.1 |
| 上游 S3 SDK | github.com/minio/minio-go/v7 v7.3.1-0.20260915093545-32e1f32cb176 |
| Go 工具链 | Go 1.27.2 |
升级要求
- 全节点与复制站点升级:升级全部 Server 进程及所有接受 S3 写入的复制站点,避免未修复节点继续放行未授权的保留期修改或原位覆写。
- 核对策略权限:仅授予
s3:BypassGovernanceRetention而未授予s3:PutObjectRetention、或依赖 bypass 绕过保留期条件键的请求将返回403 AccessDenied。 - 指定
versionId写入限制:普通 S3 客户端写入(含 root 签名请求)不得指定目标versionId;可信复制保留版本 ID,mcli batch replicate写入 SILO 时目标凭据需具备s3:ReplicateObject。 - 锁状态不可读时拒绝覆写:已锁定的目录对象与已有分片目标不可被覆写;若底层锁元数据读取失败,需先恢复存储盘健康再重试。
- 历史数据排查:升级前已发生的异常保留期变更或覆写不会自动回滚,请结合审计日志核查(从 20260916 之前版本升级时请一并参考九月版升级要求)。
候选制品验收记录
针对候选源码 7a3ca0f82100cce06289a465f54139da2639f642 的流水线与本地核验结果如下:
| 检查项 | 结果 | 流水线记录 |
|---|---|---|
| 主分支 Go CI | 通过 | Run 38686240587 |
| 漏洞检查(VulnCheck) | 通过 | Run 38686240625 |
| 发行构建与 Object Lock 前置门禁 | 通过 | Run 38686425467 |
| 发行软件包定稿 | 通过 | Run 38687734395 |
- 静态制品核验:36 个发行制品、34 份制品来源证明、Linux/macOS/Windows 的
amd64/arm64共 6 个平台二进制静态身份、6 个 RPM/DEB/APK 安装包载荷与 2 个 RPM 签名全部核验通过(参考历史归档校验和与安装包校验和)。 - macOS arm64 二进制运行验收(110/110 通过):
| 场景 | 结果 |
|---|---|
| 全新安装完整 Object Lock API 验收 | 49/49 |
| 基于官方 20260916 数据目录原地升级验收 | 12/12 |
| 升级后再次运行完整 Object Lock API 验收 | 49/49 |
(其中 65 次预期拒绝操作均未改变目标对象的任何内容或元数据状态;Windows 与 macOS amd64 为静态身份核验。)
Docker 镜像验收
Docker 发布工作流 38689158028 构建的 linux/amd64 与 linux/arm64 多平台镜像摘要及 OCI 来源证明均核验通过:
| 镜像变体 | 版本标签 | 多平台 Index Digest |
|---|---|---|
| Classic | RELEASE.2026-10-15T00-00-00Z |
sha256:aaac6bce13eb99316b3c88bd20143fc3c38ab607585256a411a095c44ee57f62 |
| Distroless | RELEASE.2026-10-15T00-00-00Z-distroless |
sha256:70cac541c5a928be5cd16d6b8732d85ac06e891a0e3d9956a745381330692fc6 |
四个平台单架构镜像(容器内 /usr/bin/silo 与官方 Linux 归档二进制逐字节一致)均通过 /minio/health/ready 探针与 Object Lock API 套件(196/196 通过,其中 120 次预期拒绝操作均保持对象版本、ETag、保留期、Legal Hold 与版本列表完整不变):
| 镜像 | 运行环境 | API 验收 | 二进制比对 |
|---|---|---|---|
Classic linux/arm64 |
Docker Desktop ARM64 原生 | 49/49 | 与官方 Linux arm64 归档一致 |
Classic linux/amd64 |
Docker Desktop ARM64 仿真 | 49/49 | 与官方 Linux amd64 归档一致 |
Distroless linux/arm64 |
Docker Desktop ARM64 原生 | 49/49 | 与官方 Linux arm64 归档一致 |
Distroless linux/amd64 |
Docker Desktop ARM64 仿真 | 49/49 | 与官方 Linux amd64 归档一致 |
连同 macOS arm64 原生安装与升级测试,候选制品运行验收合计 306/306 通过。