fix(leonardo): cookie 写回改 CAS,并补上额度对账后的轮换写回

Leonardo 只认加密的 session_data 缓存,轮换值一旦没存住账号就会被判死。写回原先是无条件 update:长任务(生成、慢额度查询)手里的旧 cookie 完成时会盖掉期间 keepalive 存好的新值。改为 SwapValue(WHERE value = 旧值 才写),旧值无法覆盖新值;reconcileLeonardoCredits 原先完全没写回 FetchCreditsBalance 带回的轮换值,补上。
This commit is contained in:
GlossSeaDress
2026-08-10 12:13:11 +08:00
parent b488142495
commit 2c47344ed9
3 changed files with 22 additions and 4 deletions
+2 -1
View File
@@ -3046,7 +3046,7 @@ func (s *V1Service) leonardoPersistCookie(ctx context.Context, tokenID, cookie s
if !ok || strings.TrimSpace(fresh) == "" {
return cookie
}
_, _ = s.tokens.Update(ctx, "leonardo", tokenID, map[string]any{"value": fresh})
_, _ = s.tokens.SwapValue(ctx, "leonardo", tokenID, cookie, fresh)
return fresh
}
@@ -3058,6 +3058,7 @@ func (s *V1Service) reconcileLeonardoCredits(ctx context.Context, tokenID, cooki
return
}
data, err := s.leonardo.FetchCreditsBalance(ctx, cookie)
s.leonardoPersistCookie(ctx, tokenID, cookie)
if err != nil {
return
}