修正执行租约迁移故障注入并记录三库复审证据
This commit is contained in:
parent
eab5ba9a84
commit
37765ff2f0
@ -4,7 +4,7 @@ import "testing"
|
||||
|
||||
func TestMySQLDNSExecutionInterruptedMigration(t *testing.T) {
|
||||
f := startRealMySQL(t)
|
||||
for _, boundary := range []string{"before-create", "after-create", "with-record", "bad-column", "bad-index", "bad-collation"} {
|
||||
for _, boundary := range []string{"before-create", "after-create", "with-record", "bad-column", "bad-index", "bad-collation", "bad-column-collation"} {
|
||||
t.Run(boundary, func(t *testing.T) {
|
||||
db := f.database(t)
|
||||
mysqlPrepareVersion(t, db.DB, 28)
|
||||
@ -18,8 +18,26 @@ func TestMySQLDNSExecutionInterruptedMigration(t *testing.T) {
|
||||
mysqlDeploymentExec(t, db.DB, "ALTER TABLE dns_execution_leases MODIFY COLUMN account_revision INT NULL")
|
||||
case "bad-index":
|
||||
mysqlDeploymentExec(t, db.DB, "ALTER TABLE dns_execution_leases DROP INDEX uq_dns_leases_attempt")
|
||||
case "bad-collation":
|
||||
mysqlDeploymentExec(t, db.DB, "ALTER TABLE dns_execution_leases CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
|
||||
case "bad-collation", "bad-column-collation":
|
||||
var before, after string
|
||||
query := `SELECT table_collation FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'dns_execution_leases'`
|
||||
if err := db.DB.QueryRowContext(t.Context(), query).Scan(&before); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
// 必须真正改变排序规则,不能把测试库默认值当作故障注入。
|
||||
collation := "utf8mb4_bin"
|
||||
if before == collation {
|
||||
collation = "utf8mb4_unicode_ci"
|
||||
}
|
||||
statement := "ALTER TABLE dns_execution_leases CONVERT TO CHARACTER SET utf8mb4 COLLATE " + collation
|
||||
if boundary == "bad-column-collation" {
|
||||
statement = "ALTER TABLE dns_execution_leases MODIFY COLUMN task_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE " + collation + " NOT NULL"
|
||||
query = `SELECT collation_name FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'dns_execution_leases' AND column_name = 'task_id'`
|
||||
}
|
||||
mysqlDeploymentExec(t, db.DB, statement)
|
||||
if err := db.DB.QueryRowContext(t.Context(), query).Scan(&after); err != nil || before == after {
|
||||
t.Fatal("排序规则故障注入未实际生效", err)
|
||||
}
|
||||
default:
|
||||
conflict = false
|
||||
}
|
||||
|
||||
@ -1,5 +1,11 @@
|
||||
# DNS 多账户整改任务清单
|
||||
|
||||
## 2026年10月4日07:54 第一台实库故障注入复核
|
||||
|
||||
- [✓] 第一台 `f17ea6c` Linux 全量与 vet 通过;三库租约、原子创建和轮换竞争专项通过,证书及 HTTP 专项通过。
|
||||
- [!] `0743` 单元于 07:50:38 失败退出一:MySQL 迁移 bad-collation 测试将表改为测试库本就使用的 unicode 排序规则,未实际注入冲突,导致预期拒绝但迁移成功。原失败保留,不能标记整轮通过。
|
||||
- [~] 检查点 `eab5ba9` 已推送;故障注入改为与实际排序规则不同的限定值,并增加列级排序规则冲突及注入确实生效断言。待第一台固定新提交复跑,同时验证授权探测增量。
|
||||
|
||||
## 2026年10月4日07:45 授权探测引用保护
|
||||
|
||||
第一台 `scert-dns-leases-20261004-0743.service` 正在验证固定提交 `f17ea6c`,不停止、不重启该任务。复核发现授权探测同样可能写临时 TXT,不能只保护 ACME Provider 的挑战记录。
|
||||
|
||||
@ -2,6 +2,12 @@
|
||||
|
||||
## 2026年10月4日07:40 执行租约复审准备
|
||||
|
||||
### 07:55 第一台终态与故障夹具修正
|
||||
|
||||
- `scert-dns-leases-20261004-0743.service` 于 07:50:38 结束,failed、退出一。固定 `f17ea6c` 的 Linux 全量、vet 通过;三库租约及原子绑定单轮竞态通过:SQLite 3.19 秒、MySQL 16.54 秒、PostgreSQL 2.83 秒,均实际执行;仓储包 23.616 秒。源码工作区仍干净。
|
||||
- MySQL 迁移专项 38.94 秒失败,唯一失败为 bad-collation:原夹具设置 utf8mb4_unicode_ci,而隔离库本就使用该值,没有制造冲突。其余五个边界通过;证书 2.639 秒、HTTP 3.345 秒专项通过,整轮不计成功。
|
||||
- 已将故障注入改为与实际规则不同的限定值并验证生效,另加列级排序规则冲突;产品迁移校验逻辑未放宽。检查点 `eab5ba9` 已推送,修正及授权探测增量待第一台新提交复审。
|
||||
|
||||
### 07:51 运行状态与授权探测增量
|
||||
|
||||
- 第一台干净 `f17ea6c99e3bd4472813853294347bdfad0b8b17` 已于 07:43:33 运行 `scert-dns-leases-20261004-0743.service`;观察 07:49:16 为 active/running,已进入 MySQL 租约专项,仍待最终结果。
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
|
||||
## 2026年10月4日07:40 DNS 执行链进展
|
||||
|
||||
07:55 实库结果:第一台 `f17ea6c` 的 Linux 全量、vet 和三库执行租约及原子创建专项通过;整轮因 MySQL 故障注入无效而失败,已修正夹具并新增列级排序规则用例,待连同授权探测增量复审。
|
||||
|
||||
07:51 补充:补齐授权探测临时 TXT 的逐域名授权和不确定清理引用保护,本地三包及 vet、十轮专项通过;本轮第一台旧提交验证仍在运行,不能提前计入探测增量。
|
||||
|
||||
- [x] 独立账户执行租约已接通证书任务与自动续期执行器,重试依真实尝试序号重新授权,不允许系统凭据回退。
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
|
||||
## 2026年10月4日07:40 执行租约边界复核
|
||||
|
||||
07:55 实库结果:第一台 Linux 全量、vet、三库租约与原子创建竞态通过。MySQL 迁移故障夹具未注入真实排序规则差异导致整轮失败,修正并补列级冲突后待复跑;授权探测增量仍需独立复审。
|
||||
|
||||
07:51 补充:授权探测的临时 TXT 与 ACME 挑战一样受租约保护,每域名重新授权,探测失败保留未知外部状态引用。本地三包及 vet、专项十轮通过,第一台增量待验证。
|
||||
|
||||
- [x] 完成租约迁移二十九、真实任务授权、固定凭据引用、取消清理及活动引用保护;新建域名与首次绑定改为原子事务。
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
|
||||
## 2026年10月4日07:40 执行租约与原子创建进度
|
||||
|
||||
07:55 实库结果:`f17ea6c` 第一台 Linux 全量、vet 和三库租约/原子创建竞态通过;整轮仍失败,MySQL 排序规则故障夹具未实际改变默认值。现已修正故障注入并增加列级冲突验证,待与授权探测增量一起复审,不修改产品拒绝规则来迁就测试。
|
||||
|
||||
07:51 补充:授权探测也已纳入逐域名租约校验及不确定清理引用保护,本地三包全量与 vet、独立账户十轮专项通过。第一台 `0743` 单元验证固定 `f17ea6c`,仍待终态;探测增量需另行 Linux 复审。
|
||||
|
||||
- [x] P1-03 已接入真实任务尝试的 DNS 执行租约,固定账户版本及秘密引用;取消后使用原凭据清理,清理或释放不确定则保留引用。未实现的崩溃遗留核对与安全回收仍是门禁。
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
## 2026年10月4日07:40 DNS 执行与原子绑定契约
|
||||
|
||||
- MySQL 迁移恢复必须拒绝表级和列级排序规则冲突;故障测试必须先确认注入后的规则确实不同,不能使用库的默认值伪造冲突场景。该修正不改变产品迁移规则。
|
||||
- 授权探测同样可能写临时 TXT,每个域名调用前必须核验取消状态和真实租约。探测错误无法确认外部清理时保留引用,即使 ACME Provider 尚未创建;之后的成功探测不得清除先前未知状态。
|
||||
- 新建域名可携带 `dns_account_id`、`dns_account_revision`;绑定标识由服务端生成,域名、绑定、审计共用事务。普通资料更新拒绝这些初始绑定字段,编辑仍使用独立绑定接口及真实旧令牌。
|
||||
- 租约绑定真实运行中的任务、尝试、序号、项目、域名、账户版本及秘密引用。自动续期必须同时满足服务端调度标记、真实无操作者续期任务和域名启用续期;手工重试额外要求重试权限。
|
||||
|
||||
Loading…
Reference in New Issue
Block a user