mirror of
https://github.com/caddyserver/caddy.git
synced 2024-11-26 02:09:47 +08:00
Merge pull request #1143 from mholt/1136-fix
Fix #1136 - IP hash policy no longer changes host pool
This commit is contained in:
commit
8944332e13
|
@ -121,18 +121,13 @@ func (r *IPHash) Select(pool HostPool, request *http.Request) *UpstreamHost {
|
|||
if err != nil {
|
||||
clientIP = request.RemoteAddr
|
||||
}
|
||||
hash := hash(clientIP)
|
||||
for {
|
||||
if poolLen == 0 {
|
||||
break
|
||||
}
|
||||
index := hash % poolLen
|
||||
host := pool[index]
|
||||
index := hash(clientIP) % poolLen
|
||||
for i := uint32(0); i < poolLen; i++ {
|
||||
index += i
|
||||
host := pool[index%poolLen]
|
||||
if host.Available() {
|
||||
return host
|
||||
}
|
||||
pool = append(pool[:index], pool[index+1:]...)
|
||||
poolLen--
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -163,14 +163,14 @@ func TestIPHashPolicy(t *testing.T) {
|
|||
request.RemoteAddr = "172.0.0.1"
|
||||
pool[1].Unhealthy = true
|
||||
h = ipHash.Select(pool, request)
|
||||
if h != pool[0] {
|
||||
t.Error("Expected ip hash policy host to be the first host.")
|
||||
if h != pool[2] {
|
||||
t.Error("Expected ip hash policy host to be the third host.")
|
||||
}
|
||||
|
||||
request.RemoteAddr = "172.0.0.2"
|
||||
h = ipHash.Select(pool, request)
|
||||
if h != pool[1] {
|
||||
t.Error("Expected ip hash policy host to be the second host.")
|
||||
if h != pool[2] {
|
||||
t.Error("Expected ip hash policy host to be the third host.")
|
||||
}
|
||||
pool[1].Unhealthy = false
|
||||
|
||||
|
@ -182,8 +182,8 @@ func TestIPHashPolicy(t *testing.T) {
|
|||
}
|
||||
request.RemoteAddr = "172.0.0.4"
|
||||
h = ipHash.Select(pool, request)
|
||||
if h != pool[0] {
|
||||
t.Error("Expected ip hash policy host to be the first host.")
|
||||
if h != pool[1] {
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue
Block a user