Commit 8944332e authored by Matt Holt's avatar Matt Holt Committed by GitHub

Merge pull request #1143 from mholt/1136-fix

Fix #1136 - IP hash policy no longer changes host pool
parents b06b3981 be1c57ac
...@@ -121,18 +121,13 @@ func (r *IPHash) Select(pool HostPool, request *http.Request) *UpstreamHost { ...@@ -121,18 +121,13 @@ func (r *IPHash) Select(pool HostPool, request *http.Request) *UpstreamHost {
if err != nil { if err != nil {
clientIP = request.RemoteAddr clientIP = request.RemoteAddr
} }
hash := hash(clientIP) index := hash(clientIP) % poolLen
for { for i := uint32(0); i < poolLen; i++ {
if poolLen == 0 { index += i
break host := pool[index%poolLen]
}
index := hash % poolLen
host := pool[index]
if host.Available() { if host.Available() {
return host return host
} }
pool = append(pool[:index], pool[index+1:]...)
poolLen--
} }
return nil return nil
} }
...@@ -163,14 +163,14 @@ func TestIPHashPolicy(t *testing.T) { ...@@ -163,14 +163,14 @@ func TestIPHashPolicy(t *testing.T) {
request.RemoteAddr = "172.0.0.1" request.RemoteAddr = "172.0.0.1"
pool[1].Unhealthy = true pool[1].Unhealthy = true
h = ipHash.Select(pool, request) h = ipHash.Select(pool, request)
if h != pool[0] { if h != pool[2] {
t.Error("Expected ip hash policy host to be the first host.") t.Error("Expected ip hash policy host to be the third host.")
} }
request.RemoteAddr = "172.0.0.2" request.RemoteAddr = "172.0.0.2"
h = ipHash.Select(pool, request) h = ipHash.Select(pool, request)
if h != pool[1] { if h != pool[2] {
t.Error("Expected ip hash policy host to be the second host.") t.Error("Expected ip hash policy host to be the third host.")
} }
pool[1].Unhealthy = false pool[1].Unhealthy = false
...@@ -182,8 +182,8 @@ func TestIPHashPolicy(t *testing.T) { ...@@ -182,8 +182,8 @@ func TestIPHashPolicy(t *testing.T) {
} }
request.RemoteAddr = "172.0.0.4" request.RemoteAddr = "172.0.0.4"
h = ipHash.Select(pool, request) h = ipHash.Select(pool, request)
if h != pool[0] { if h != pool[1] {
t.Error("Expected ip hash policy host to be the first host.") t.Error("Expected ip hash policy host to be the second host.")
} }
// We should be able to resize the host pool and still be able to predict // We should be able to resize the host pool and still be able to predict
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment