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:
1 file changed
+7
-3
@@ -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 {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-n.quit:
|
case <-n.quit:
|
||||||
@@ -267,6 +264,13 @@ retryWithBackoff:
|
|||||||
log.Debugf("Unable to get new tower candidate, "+
|
log.Debugf("Unable to get new tower candidate, "+
|
||||||
"retrying after %v -- reason: %v", backoff, err)
|
"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
|
goto retryWithBackoff
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user