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:
parent
ef4fa66e67
commit
acbf522ceb
6 changed files with 28 additions and 24 deletions
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue