middleware/proxy: Make Unhealthy a pointer (#615)

Pointer updates are atomic so drop the sync.RWMutex as it is not needed
anymore. This also fixes the race introduced with dfc71df (although I
believe this is the first time we properly tested that code path).
This commit is contained in:
Miek Gieben 2017-04-13 16:26:05 +01:00 committed by GitHub
parent ef4fa66e67
commit acbf522ceb
6 changed files with 28 additions and 24 deletions

View file

@ -3,7 +3,6 @@ package proxy
import (
"errors"
"sync"
"sync/atomic"
"time"
@ -57,10 +56,9 @@ type UpstreamHost struct {
Name string // IP address (and port) of this upstream host
Fails int32
FailTimeout time.Duration
Unhealthy bool
Unhealthy *bool
CheckDown UpstreamHostDownFunc
WithoutPathPrefix string
checkMu sync.Mutex
}
// Down checks whether the upstream host is down or not.
@ -70,7 +68,7 @@ func (uh *UpstreamHost) Down() bool {
if uh.CheckDown == nil {
// Default settings
fails := atomic.LoadInt32(&uh.Fails)
return uh.Unhealthy || fails > 0
return *uh.Unhealthy || fails > 0
}
return uh.CheckDown(uh)
}