rwadurian/backend/mpc-system/services
hailin 41e7eed2c1 fix(android): 修复 markPartyReady 重试逻辑的循环退出Bug [CRITICAL]
## 发现的新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>
2026-01-27 00:24:40 -08:00
..
account Revert "fix(co-keygen): convert threshold at storage time to match tss-lib convention" 2025-12-31 10:24:25 -08:00
message-router fix(message-router): prevent subscription race condition on gRPC reconnect 2026-01-01 10:04:11 -08:00
server-party fix(participate_signing): 恢复 Execute 方法的 UserShareData 分支 2026-01-26 19:00:52 -08:00
server-party-api fix(context): use parent context instead of Background() to allow proper cancellation 2025-12-06 06:36:34 -08:00
server-party-co-managed fix(co-managed): 使用数据库中的 PartyIndex 而非循环索引 2026-01-26 20:24:32 -08:00
service-party-android fix(android): 修复 markPartyReady 重试逻辑的循环退出Bug [CRITICAL] 2026-01-27 00:24:40 -08:00
service-party-app fix(tss): 修复备份恢复后签名失败的问题 2026-01-20 00:39:05 -08:00
session-coordinator feat(session): broadcast participant_joined event via gRPC for real-time UI updates 2026-01-01 08:34:47 -08:00
tss-wasm feat(tss): add real-time round progress from msg.Type() parsing 2026-01-01 22:41:51 -08:00