3.2 KiB
3.2 KiB
发布目标身份隔离与迁移 077
身份与可见性
API 与 worker 使用同一 appconfig.Config.LibraryTargetIdentity:实例、Compose 项目、数据库名、租户、对内/对外 KB、索引、对象存储 provider/endpoint/bucket 的 SHA-256。凭据、数据库连接的主机/端口、Docker socket、归档目录不参与,避免本机 SSH 转发与云端直连生成不同身份。
实例/项目是部署身份,不得把相同名字重新指给另一物理部署;执行器现有实时身份/拓扑准入仍必须通过。本变更不是跨环境凭据授权边界,也不代替目标健康与维护验证。
- 当前版本按
(scope, target_id)保存;某目标的新版本不顶替另一目标的 current 或 superseded 元数据。 - 预备份、历史生效、恢复候选、复用来源和回传引用都只取当前目标证据。
- 作业、授权、意图持久绑定目标。切换目标后旧作业不可被新执行器准入、续作或自动接管;旧授权不生效。
test_sealed和seal是源侧事实,保持可见;切换发布目标不删除或冒充源封存。- 原有事件/作业/授权/意图保留,新增列为空表示“目标归属未证明”,不推断回填。它们不成为任何新目标的运行证据;归档保护仍跨全部历史,避免清理器误删旧恢复材料。
- 目标绑定是部署级(包含两个 KB);修改其中任一 KB 会建立新的证据上下文。旧记录保存在治理库,不在新目标的发布列表中混显。需要恢复旧目标时必须确认真实配置及证据归属,禁止把空身份批量改成当前身份。
升级顺序
- 保持写门关闭,检查无在飞发布/恢复/封存、维护锁和未结束执行代次;不能仅凭一次空队列采样。
- 备份治理库并在隔离库实际恢复,保留旧运行镜像、Compose 配置链与版本证据摘要。
- 停止旧 API/worker/云发布消费者后迁移,防止旧的
ON CONFLICT(scope)与新主键并行使用。只迁移治理库,不修改 WeKnora schema。 - 先启动新 API 完成迁移 077,再启动使用同一配置身份的新 worker;读回版本、schema、身份配置、健康与禁写门。
- 页面应显示目标尚无权威版本,不能沿用旧本机演练的“已生效/0 变化”。真实空基线仍由目标逐表只读探测回答。
- 在独立目标备份/恢复和正式授权条件满足后执行实际发布及恢复,再确认新 target_id 下的 current。
回退边界
077 的 down 只允许没有任何非空目标绑定记录时执行,避免把已分离的历史合并回一个 scope。产生新记录后不要直接降级;使用经过恢复验证的控制面备份,先核对目标内容与在飞窗口,不能只回旧镜像。源封存、历史事件和快照均不得为了通过验收而清空。
验证范围
真实 PostgreSQL 用例覆盖旧无归属 current、新目标 A/B current 相互独立、外目标预备份/授权/作业/意图不可复用、跨目标事件 ID 冲突拒绝、源封存可共享,以及真实 worker 入口在维护前拒绝旧目标作业。默认 CI 无测试库时显式跳过这部分;本机必须另行实跑。单测通过不代表真实发布/恢复或页面验收已完成。