|
@@ -47,10 +47,11 @@ func (m *RouteManager) GetRequestUpstreamTarget(w http.ResponseWriter, r *http.R
|
|
|
log.Println(err)
|
|
|
targetOrigin = origins[0]
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- fmt.Println("DEBUG: Picking origin " + targetOrigin.OriginIpOrDomain)
|
|
|
- return origins[0], nil
|
|
|
+ //fmt.Println("DEBUG: Picking origin " + targetOrigin.OriginIpOrDomain)
|
|
|
+ return targetOrigin, nil
|
|
|
}
|
|
|
|
|
|
/* Features related to session access */
|
|
@@ -118,7 +119,22 @@ func getRandomUpstreamByWeight(upstreams []*Upstream) (*Upstream, int, error) {
|
|
|
}
|
|
|
counter++
|
|
|
}
|
|
|
- return ret, -1, err
|
|
|
+
|
|
|
+ if ret == nil {
|
|
|
+ //All fallback
|
|
|
+ //use the first one that is with weight = 0
|
|
|
+ fallbackUpstreams := []*Upstream{}
|
|
|
+ fallbackUpstreamsOriginalID := []int{}
|
|
|
+ for ix, upstream := range upstreams {
|
|
|
+ if upstream.Weight == 0 {
|
|
|
+ fallbackUpstreams = append(fallbackUpstreams, upstream)
|
|
|
+ fallbackUpstreamsOriginalID = append(fallbackUpstreamsOriginalID, ix)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ upstreamID := rand.Intn(len(fallbackUpstreams))
|
|
|
+ return fallbackUpstreams[upstreamID], fallbackUpstreamsOriginalID[upstreamID], nil
|
|
|
+ }
|
|
|
+ return ret, -1, errors.New("failed to pick an upstream origin server")
|
|
|
}
|
|
|
|
|
|
// IntRange returns a random integer in the range from min to max.
|