docs: 分离 Database 资源与 Tenant 申请生命周期
This commit is contained in:
+28
-23
@@ -1,7 +1,19 @@
|
||||
# Database 模块
|
||||
|
||||
Database 是 Ayatori 首批实际产品领域之一。第一个迁移切片只建立 PostgreSQL Instance 的纯领域
|
||||
模型,不注册 CRD、不启动 controller,也不访问 PostgreSQL、OpenBao 或 Kubernetes Secret。
|
||||
Database 是 Ayatori 首批实际产品领域之一。当前已包含 Instance 领域基础、管理凭据连接与
|
||||
metadata 观察切片,尚未完成 Database API/controller 和 Tenant 供应链路。
|
||||
|
||||
## 当前设计(2026-09-24)
|
||||
|
||||
采用 Instance → Database → Tenant 的资源与申请模型;Database 独立存在,支持显式导入、
|
||||
Retain 后人工重新绑定与资源侧 Delete。撤销 PostgreSQL ownership registry 及任意 status
|
||||
丢失自动恢复所有权的要求。未知同名资源或创建结果不确定时,清楚报告 Conflict 并人工处理。
|
||||
|
||||
依据 [ADR-0009](../decisions/0009-database-resource-and-claim.md),当前合同见
|
||||
[系统规格](specification.md)。下面的迁移来源与已存在代码不反向约束新设计。
|
||||
本轮只有文档修订,registry adapter、旧 Instance 判定与测试仍待代码重构撤除;新增 Database
|
||||
资源、绑定、导入、角色/凭据管理边界与回收链路尚未实现。wiki 同步位置见
|
||||
`homelab-wiki/services/postgresql-tenant-operator.md`,跨仓库发布状态由 wiki 的同步记录维护。
|
||||
|
||||
## 来源基线
|
||||
|
||||
@@ -13,7 +25,8 @@ Database 是 Ayatori 首批实际产品领域之一。第一个迁移切片只
|
||||
- 迁移日期:2026-09-20
|
||||
|
||||
本目录迁入该基线的 specification、architecture、API、领域、部署、安全、开发、迁移与运维
|
||||
文档,并只进行 Ayatori 产品归属、API group、目录和链接适配;其余已批准行为保持不变。
|
||||
文档,最初只进行 Ayatori 产品归属、API group、目录和链接适配;2026-09-24 经维护者
|
||||
批准的资源/申请分离修订明确替代 registry、自动恢复与原 Retain 合同,其余适用的安全约束保留。
|
||||
|
||||
迁移只使用该 commit 中已提交的文件。源仓库
|
||||
`feature/instance-extension-observations` 工作树中的 `instance.go` 修改与
|
||||
@@ -21,9 +34,9 @@ Database 是 Ayatori 首批实际产品领域之一。第一个迁移切片只
|
||||
|
||||
代码被移动到 Ayatori 的 `internal/database/domain/instance`,测试 import 和文档链接相应更新;
|
||||
首个后续切片按已批准合同增加 Instance extension observation:观测与当前 target 绑定,进入重新
|
||||
验证或删除时失效,且支持判定不授权 Tenant provisioning。后续 Ready 切片实现管理能力判定、
|
||||
registry 准备决策与完整回读、Ready 重验及本轮 evidence 前置检查;沿用已批准合同,不能把旧运行
|
||||
链路接回该模型。各层验证边界见 [Instance 领域规格](domain-instance.md)。
|
||||
验证或删除时失效,且支持判定不授权 Tenant provisioning。已有 Ready 切片曾按原合同加入
|
||||
registry 准备决策;这一依赖现已撤销,后续须从代码移除,不能把旧运行链路接回模型。
|
||||
各层验证边界见 [Instance 领域规格](domain-instance.md)。
|
||||
|
||||
## 边界
|
||||
|
||||
@@ -48,7 +61,7 @@ Instance UID、endpoint 或凭据引用变化也会释放旧连接;Forget/Clos
|
||||
|
||||
当前通过 `ObserveMetadata` 读取服务器版本和可用扩展,`ObserveVersion` 只是其版本读取便捷入口,
|
||||
不能产生完整 CapabilityObservation 或 Ready。
|
||||
controller 接入、Secret watch、finalizer、registry 观测装配与真实权限检查仍待后续切片;并发 CR 更新
|
||||
controller 接入、Secret watch、finalizer 与真实权限检查仍待后续切片;并发 CR 更新
|
||||
必须由调用者通过 resourceVersion 校验。应用层沿用源实现的串行处理,本阶段未引入新的调度框架。
|
||||
|
||||
运行 `make test-database-integration` 验证真实 API server + 一次性 PostgreSQL;fixture 不接受外部
|
||||
@@ -76,7 +89,7 @@ generation),不绑定建池时的旧 target。结果不包含凭据,扩展
|
||||
|
||||
调用方可将 `Target()` 与 `Extensions()` 交给 Instance 的 `ObserveExtensions`;应用调用链
|
||||
仍负责同轮次使用,不能持久化或跨轮缓存这份证据。metadata 读取不安装扩展、不初始化 registry、
|
||||
不设置 Ready,也不授予 Tenant 写权限。管理权限矩阵、registry 完整回读及 controller 的
|
||||
不设置 Ready,也不授予 Tenant 写权限。管理权限矩阵及 controller 的
|
||||
checkpoint/status/finalizer 链路仍是后续切片。
|
||||
|
||||
真实 API server + PostgreSQL 测试验证未安装扩展可被观察、名称保持大小写、search_path 遮蔽
|
||||
@@ -84,23 +97,15 @@ checkpoint/status/finalizer 链路仍是后续切片。
|
||||
单元测试补充成功空列表、查询附带部分数据时丢弃、结果与可变 slice 隔离、每轮重新读取和
|
||||
generation 变化时的目标绑定;原凭据/TLS/超时/并发测试沿同一 metadata 路径继续运行。
|
||||
|
||||
## Registry 所有权存储切片
|
||||
## 待撤换的 registry 实现
|
||||
|
||||
`adapter/postgresql/registry` 直接迁入上述固定基线的 `internal/postgresql/registry`,
|
||||
保留原 schema、版本表和唯一约束,不接回旧 controller。Store 使用调用方提供的 pgx 连接或
|
||||
连接池,不创建连接池、不读取凭据、不管理重连。迁移复用 tern v2.4.3 的事务和 advisory lock,
|
||||
所有权变更复用 PostgreSQL 唯一约束与行锁,没有新增迁移或锁框架。
|
||||
`adapter/postgresql/registry` 曾从固定来源基线迁入,使用调用方提供的 pgx 连接和 tern
|
||||
迁移;已有测试覆盖唯一约束、Retain 墓碑和事务结果不确定的恢复。这是旧实现状态,
|
||||
不再是新领域需求,也未装配到 InstanceService。
|
||||
|
||||
Claim 支持相同归属的幂等重试;Retain 保留不可重新占用的墓碑;Delete 仅删除匹配归属的
|
||||
managed 记录,且只应在调用方确认外部资源已删除后调用。Store 本身不删除 database、role
|
||||
或凭据,也不授予 Tenant provisioning 权限。驱动错误仅供内部调用方分类,接入 controller 时
|
||||
仍须按安全合同转换为脱敏的 Condition/Event,不能直接发布原始错误。
|
||||
|
||||
真实 PostgreSQL 测试覆盖重复/并发初始化、唯一约束冲突、并发 Claim、归属不匹配、Retain
|
||||
与 Delete 重试、连接重建、取消恢复、未知 schema/超前版本拒绝,以及真实事务提交后注入
|
||||
客户端失败的恢复分支。后者确定性模拟“提交成功但调用方不知道”,不声称覆盖真实网络分区。
|
||||
registry 尚未装配到 InstanceService;初始化成功不能当作完整 registry 回读或 Instance Ready。
|
||||
controller 重启、Secret watch、finalizer 与跨后端删除仍由后续 envtest/端到端切片验收。
|
||||
工作树中另有未提交的 registry inspection 实验及测试,本轮保留,不继续接入或宣称完成。
|
||||
后续代码变更撤除 registry adapter、Instance 相关状态/方法和仅服务旧合同的测试与依赖,
|
||||
保留凭据、TLS、metadata 与真实权限验证的有效部分。不操作现有 PostgreSQL 服务或旧仓库工作树。
|
||||
|
||||
## 设计入口
|
||||
|
||||
|
||||
Reference in New Issue
Block a user