Commit 4c80fd6
* fix(metadata-protocol): deleteMany/updateMany 的 atomic 要么为真、要么拒绝 (#4620)
ADR-0119 D4 把 `batchData` 的 `atomic` 修成了真承诺,同一文件里的两个同胞
当时不在那次 PR 的确认范围内,缺陷原样留着:
- `deleteManyData` 是假原子:`if (options?.atomic) break;` 没开任何事务,
失败前已删掉的行保持已删除,响应却以原子自居并把它们报成 success。比
`batchData` 那次更糟 —— 部分删除没有自然的撤销手段。
- `updateManyData` 根本不读 `atomic`:选项被接受、被声明成全有或全无,却从
未被读取,调用方拿到的是无任何信号的 best-effort。
两者现在走与 `batchData` 完全相同的原子臂 —— 抽成一个共享 runner
(`runAtomicBatch`),而不是把事务处理再抄两份(抄写正是下一个同胞漂移回
谎言的路径):
- `atomic: true` 时整批跑在一个 `engine.transaction()` 里,首个失败回滚此前
全部写入;
- 回滚批次报告零成功,行分别标记 `ROLLED_BACK:` / `NOT_ATTEMPTED:`,致因行
保留原始错误,客户端可区分「已尝试但被撤销」与「从未执行」;
- `atomic` 优先于 `continueOnError`;
- 无法回滚的运行时(无 `engine.transaction()`,或默认 driver 无
`beginTransaction`)对 `atomic: true` 返回 501 NOT_IMPLEMENTED,而不是静默
降级成 best-effort —— 静默降级正是本 issue 的缺陷类别。
非原子路径(含 `continueOnError` 交互与响应形状)保持不变;`batchData` 的
既有测试未作任何改动仍全部通过。
逐行结果形状与 `BatchOperationResultSchema` 的分歧(issue 第 3 节)刻意未动:
那是公开 wire 契约决定,单独跟踪。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018iARDqtrhQgz6fVHDeDkbQ
* chore(changeset): metadata-protocol 提升为 minor,与 ADR-0119 D4 的先例一致 (#4620)
同一个包、同一类变更、同一种调用方可见后果:`atomic: true` 在不能回滚的运行时上
从「200 部分成功」变成 501。D4 给 `batchData` 定的就是 minor
(`.changeset/adr-0119-plugin-reachable-transactions.md`),这次给
`deleteManyData` / `updateManyData` 做同一件事不能是 patch —— 包当前是
17.0.0-rc.1,patch 会发成 17.0.1,等于告诉消费者什么都没变。
只改 bump 一行,正文不动。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018iARDqtrhQgz6fVHDeDkbQ
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent c44dd5e commit 4c80fd6
4 files changed
Lines changed: 556 additions & 15 deletions
File tree
- .changeset
- packages/metadata-protocol/src
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
Lines changed: 9 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
145 | 145 | | |
146 | 146 | | |
147 | 147 | | |
148 | | - | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
149 | 154 | | |
150 | | - | |
| 155 | + | |
151 | 156 | | |
152 | 157 | | |
153 | 158 | | |
154 | | - | |
| 159 | + | |
155 | 160 | | |
156 | | - | |
157 | | - | |
| 161 | + | |
158 | 162 | | |
159 | 163 | | |
0 commit comments