## 发现的新Bug(从用户日志) ``` 16:19:03.667 Successfully marked party ready on attempt 2 ✅ 16:19:03.716 markPartyReady attempt 3 failed: cannot transition to ready status ❌ 16:19:03.731 markPartyReady attempt 4 failed: cannot transition to ready status ❌ 16:19:03.749 markPartyReady attempt 5 failed: cannot transition to ready status ❌ 16:19:03.750 Cancelled job: progress_collection 💀 ``` ## 根本原因 Kotlin `repeat` 的陷阱: - `return@repeat` 只是跳过当前迭代 - **不会退出整个循环** - 导致第2次成功后,第3、4、5次继续执行 - 服务器返回 "already ready, cannot transition" - 第5次失败,代码认为所有尝试都失败,停止 keygen ## 修复内容 在每次迭代开始时检查成功标志: ```kotlin repeat(5) { attempt -> if (markReadySuccess) return@repeat // ← 添加这一行! val markReadyResult = grpcClient.markPartyReady(sessionId, partyId) if (markReadyResult.isSuccess) { markReadySuccess = true return@repeat } ... } ``` 现在流程: - 第1次:optimistic lock conflict → 延迟重试 - 第2次:成功 → 设置标志 → return@repeat - 第3次:检查标志已成功 → 立即 return@repeat(跳过) - 第4次:检查标志已成功 → 立即 return@repeat(跳过) - 第5次:检查标志已成功 → 立即 return@repeat(跳过) - 循环结束 → 检查标志 = true → 继续执行 keygen ✅ ## 影响范围 修复了所有 markPartyReady 重试位置(6处): - startKeygenAsInitiator - joinKeygenViaGrpc - startSignAsInitiator - joinSignViaGrpc - startSignAsJoiner - 其他相关函数 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| account | ||
| message-router | ||
| server-party | ||
| server-party-api | ||
| server-party-co-managed | ||
| service-party-android | ||
| service-party-app | ||
| session-coordinator | ||
| tss-wasm | ||