summaryrefslogtreecommitdiff
path: root/modules/caddyhttp/reverseproxy/hosts.go
diff options
context:
space:
mode:
authorMatthew Holt <mholt@users.noreply.github.com>2019-09-03 19:06:54 -0600
committerMatthew Holt <mholt@users.noreply.github.com>2019-09-03 19:06:54 -0600
commitacb8f0e0c26acd95cbee8981469b4ac62535d164 (patch)
tree3a7811603e82178df48cb9bab6c89e9a208bda8f /modules/caddyhttp/reverseproxy/hosts.go
parent652460e03e11a037d9f86b09b3546c9e42733d2d (diff)
Integrate circuit breaker modules with reverse proxy
Diffstat (limited to 'modules/caddyhttp/reverseproxy/hosts.go')
-rw-r--r--modules/caddyhttp/reverseproxy/hosts.go10
1 files changed, 9 insertions, 1 deletions
diff --git a/modules/caddyhttp/reverseproxy/hosts.go b/modules/caddyhttp/reverseproxy/hosts.go
index 5100936..b40e614 100644
--- a/modules/caddyhttp/reverseproxy/hosts.go
+++ b/modules/caddyhttp/reverseproxy/hosts.go
@@ -69,21 +69,29 @@ type Upstream struct {
healthCheckPolicy *PassiveHealthChecks
hostURL *url.URL
+ cb CircuitBreaker
}
// Available returns true if the remote host
-// is available to receive requests.
+// is available to receive requests. This is
+// the method that should be used by selection
+// policies, etc. to determine if a backend
+// should be able to be sent a request.
func (u *Upstream) Available() bool {
return u.Healthy() && !u.Full()
}
// Healthy returns true if the remote host
// is currently known to be healthy or "up".
+// It consults the circuit breaker, if any.
func (u *Upstream) Healthy() bool {
healthy := !u.Host.Unhealthy()
if healthy && u.healthCheckPolicy != nil {
healthy = u.Host.Fails() < u.healthCheckPolicy.MaxFails
}
+ if healthy && u.cb != nil {
+ healthy = u.cb.OK()
+ }
return healthy
}