Files
Volcano-Engine-TTS-UI/store
sun c265cb8836 fix(store): VoiceUpdate 同步 settings.default_speaker (防潜在 stale ref)
Bug 报告: admin (或任何 caller) 改 voice.name 时, store 层的
VoiceUpdate 只 UPDATE voices 表, 没碰 settings.default_speaker。
如果该 voice 是 default_speaker, 改名后 settings 还指向旧名, 火山
查不到, TTSConfigErr 路径被触发或 speaker 变空串, 火山 400/500。

现状: admin API 实际没有 "edit voice" endpoint (只有 list/create/
delete/toggle), 所以 Bug 是**潜在的** — store 层有, 但用户当前
无法触发。修复属于防御性 + 未来加 update endpoint 不会重蹈覆辙。

修法: VoiceUpdate 改为单事务:
  1. 读旧 name (同事务, 避免并发改)
  2. 若 name 变了 + settings.default_speaker == 旧 name → 同步改新 name
  3. UPDATE voice
  4. Commit

整段在 Begin/Commit 里, 失败回滚, 避免"声音改了但 default_speaker
还指向旧名" 的半残状态。

测试: test/integration/voices_test.go 加 4 个 case:
  - rename + 是 default → default_speaker 同步
  - rename + default 是别的 voice → 不动 settings
  - 改 description (name 不变) → 不动 settings
  - 没 default_speaker + rename → 不崩不乱改

e2e: 跑 cmd/verifybug1 验证事务逻辑 (Windows TempDir cleanup 锁问题
是测试工具问题, 跟 fix 无关; 测试 body 本身断言全过)。

未 push (待用户)
2026-09-05 11:38:40 +08:00
..