watchtower/wtclient: only reset iterator once we've exhausted all candidates

Doing so allows us to load balance sessions better amongst all of the
tower candidates.
This commit is contained in:
Wilmer Paulino 2019-07-04 10:54:28 -07:00
parent 0431701262
commit 0690c8f627
No known key found for this signature in database
GPG Key ID: 6DF57B9F9514972F

View File

@ -240,9 +240,6 @@ retryWithBackoff:
}
}
// Before attempting a bout of session negotiation, reset the candidate
// iterator to ensure the results are fresh.
n.cfg.Candidates.Reset()
for {
select {
case <-n.quit:
@ -267,6 +264,13 @@ retryWithBackoff:
log.Debugf("Unable to get new tower candidate, "+
"retrying after %v -- reason: %v", backoff, err)
// Only reset the iterator once we've exhausted all
// candidates. Doing so allows us to load balance
// sessions better amongst all of the tower candidates.
if err == ErrTowerCandidatesExhausted {
n.cfg.Candidates.Reset()
}
goto retryWithBackoff
}