Browse Source

client: permute endpoints manually (for Go 1.9>)

To keep backward compatibility, use old algorithm of
rand.Rand.Perm.

Reference: https://github.com/golang/go/commit/caae0917bff12751019cb4240e99874fa692e770#diff-d4a72c5ba8515eae95a093e0aec62635.

Signed-off-by: Gyu-Ho Lee <gyuhox@gmail.com>
Gyu-Ho Lee 8 years ago
parent
commit
fbc7acde95
1 changed files with 9 additions and 2 deletions
  1. 9 2
      client/client.go

+ 9 - 2
client/client.go

@@ -670,8 +670,15 @@ func (r *redirectedHTTPAction) HTTPRequest(ep url.URL) *http.Request {
 }
 
 func shuffleEndpoints(r *rand.Rand, eps []url.URL) []url.URL {
-	p := r.Perm(len(eps))
-	neps := make([]url.URL, len(eps))
+	// copied from Go 1.9<= rand.Rand.Perm
+	n := len(eps)
+	p := make([]int, n)
+	for i := 0; i < n; i++ {
+		j := r.Intn(i + 1)
+		p[i] = p[j]
+		p[j] = i
+	}
+	neps := make([]url.URL, n)
 	for i, k := range p {
 		neps[i] = eps[k]
 	}