mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-14 02:40:57 +09:00
fix(migrations): use all configured GitHub tokens (#38841)
GitHub migrations accept multiple comma-separated OAuth tokens, but clients with unknown rate data are never selected. After the first client is used, every later token stays unknown and can never participate in quota-aware selection. Select each client with unknown rate data once before falling back to the existing highest-remaining-rate choice. The regression test covers initial probing of all clients and then selection by remaining quota. Fixes https://github.com/go-gitea/gitea/issues/34342 Assisted-by: Codex:GPT-5 --------- Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
@@ -152,12 +152,16 @@ func (g *GithubDownloaderV3) waitAndPickClient(ctx context.Context) {
|
||||
var recentIdx int
|
||||
var maxRemaining int
|
||||
for i := 0; i < len(g.clients); i++ {
|
||||
if g.rates[i] != nil && g.rates[i].Remaining > maxRemaining {
|
||||
if g.rates[i] == nil { // probe unknown clients once, else their rate never gets learned
|
||||
g.curClientIdx = i
|
||||
return
|
||||
}
|
||||
if g.rates[i].Remaining > maxRemaining {
|
||||
maxRemaining = g.rates[i].Remaining
|
||||
recentIdx = i
|
||||
}
|
||||
}
|
||||
g.curClientIdx = recentIdx // if no max remain, it will always pick the first client.
|
||||
g.curClientIdx = recentIdx
|
||||
|
||||
for g.rates[g.curClientIdx] != nil && g.rates[g.curClientIdx].Remaining <= GithubLimitRateRemaining {
|
||||
timer := time.NewTimer(time.Until(g.rates[g.curClientIdx].Reset.Time))
|
||||
|
||||
Reference in New Issue
Block a user