docs: clarify Instance identity and deletion semantics
E2E Tests / Run on Ubuntu (pull_request) Failing after 38s
Tests / Run on Ubuntu (pull_request) Successful in 6m52s
Lint / Run on Ubuntu (pull_request) Successful in 8m23s

This commit is contained in:
2026-09-13 15:20:26 +00:00
parent a0afbf992c
commit bb87316773
4 changed files with 48 additions and 15 deletions
+17 -5
View File
@@ -1,6 +1,6 @@
# Instance 领域对象规格
状态:Draft,待批准。日期:2026-09-12。
状态:Draft,含已确认决策。日期:2026-09-13。
上层边界见 [领域模型](domain-model.md)。本文只展开 Instance,不包含 Tenant 的供应
实现,也不新增 CRD 字段。设计签名用于评审职责与行为,不是待复制的 Go 接口代码。
@@ -18,6 +18,11 @@ context、客户端或 IO 接口。领域行为不是公共 SetReady:调用方
每轮从 CR 重建一个 Instance;对象不跨 reconcile 缓存,也不是线程共享单例。
管理连接可由装配层跨轮次复用,但连接复用不代表上次能力验证仍然成立。
身份与 endpoint 以管理员声明为准。改变 endpoint 不验证是否同一物理服务器或
registry,不增加安装身份连续性检查;只使旧观察失效,按新配置重验管理能力。
新 CR 是新 Instance,不自动获得旧 UID 资源的所有权,也不迁移或清理旧目标。
下文“观察绑定匹配”仅指结果属于本轮身份/配置,不是物理服务器身份认证协议。
## 2. 字段与值对象
所有可变状态封装在对象内部。构造后身份和本轮 definition 不可变;配置变更通过
@@ -130,8 +135,8 @@ EnsureRegistry(context, target) -> Completed | AccessFailure
endpoint 的成功结果不得用于新 endpoint。Inspect 是只读;EnsureRegistry 是幂等初始化/迁移,
不能顺带建立 Tenant 数据库或接管未知 schema。Completed 不足以推进 Ready,必须回读。
适配器由装配层绑定管理连接;凭据源、连接池释放及 Bao token 重新认证留在该边界
之后。适配器不得自行把基础设施异常转换成 Ready。返回的失败至少区分依赖不可用、
适配器由装配层绑定管理连接;Secret 读取与连接池释放留在该边界之后,Instance
管理连接不涉及 Bao token。适配器不得把基础设施异常转换成 Ready。失败区分依赖不可用、
认证失败、权限不足和 registry 不兼容;不兼容属于不可安全继续,不自动覆写。
registry 不兼容的具体 Condition 映射须在接口规格中确定,不能统一误报权限不足。
@@ -184,7 +189,13 @@ Ready --registry 需修复/保存--> InitializingRegistry
- 外部 IO 超时:产生安全失败结果;保存 status 使用仍有效的外层上下文,不能复用
已超时的 IO 上下文而丢失失败状态。
- 已请求删除的 Instance 不允许新供应;BeginDeletion 不删除 PostgreSQL、Tenant 或
Bao。Tenant 引用检查及 Instance 删除竞争协议仍需另行批准。
Bao。应用层在开始受管时添加并保存 finalizer,而非出现 Tenant 后再添加。
删除时查询所有引用它的 Tenant(含删除中的对象);有引用或查询失败就保留
finalizer,确认无引用才移除。引用查询、finalizer 写入和本地连接释放均不属于
领域 IO,Instance 只根据删除请求禁用供应能力。
- 首版不为 Instance 删除增加跨对象锁或准入控制。并发创建的 Tenant CR 不被
finalizer 拦截,但遇到删除中/不存在的 Instance 不得开始供应;不承诺取消
已在途的外部操作,也不声称引用查询与移除 finalizer 是跨对象原子事务。
- CheckExtensions 失败不能产生任何外部写入;修改 allowlist 不会自行卸载扩展。
- Snapshot、错误、日志和领域对象格式化不输出明文凭据或 token。
- 领域测试只提供观察值,无需数据库、网络、context 或 IO mock;相同状态和输入
@@ -197,6 +208,7 @@ Ready --registry 需修复/保存--> InitializingRegistry
本轮请先确认字段归属、应用层采集事实/Instance 纯决策的分工、方法与状态转换合同。
管理 Secret 来源、Bao 故障不单独撤销 Instance Ready,以及管理用户名/密码变化时
重建连接池已确认。其他决策及未决项见总体草案,不增加后台清扫器或状态字段。
重建连接池,以及管理员声明的 Instance 身份/endpoint 和简化 finalizer 删除规则
均已确认。其他决策及未决项见总体草案,不增加后台清扫器或状态字段。
批准本对象结构不等于批准这些未决行为,也不意味着立刻实现完整供应链路。