mirror of
https://github.com/yusing/godoxy.git
synced 2025-06-09 04:52:35 +02:00
fix loadbalancing when two container have the same alias
This commit is contained in:
parent
a8a209f0b0
commit
75d272be14
4 changed files with 14 additions and 11 deletions
|
@ -125,12 +125,12 @@ func (lb *LoadBalancer) AddServer(srv Server) {
|
|||
lb.poolMu.Lock()
|
||||
defer lb.poolMu.Unlock()
|
||||
|
||||
if lb.pool.Has(srv.Name()) {
|
||||
old, _ := lb.pool.Load(srv.Name())
|
||||
if lb.pool.Has(srv.Key()) {
|
||||
old, _ := lb.pool.Load(srv.Key())
|
||||
lb.sumWeight -= old.Weight()
|
||||
lb.impl.OnRemoveServer(old)
|
||||
}
|
||||
lb.pool.Store(srv.Name(), srv)
|
||||
lb.pool.Store(srv.Key(), srv)
|
||||
lb.sumWeight += srv.Weight()
|
||||
|
||||
lb.rebalance()
|
||||
|
@ -146,11 +146,11 @@ func (lb *LoadBalancer) RemoveServer(srv Server) {
|
|||
lb.poolMu.Lock()
|
||||
defer lb.poolMu.Unlock()
|
||||
|
||||
if !lb.pool.Has(srv.Name()) {
|
||||
if !lb.pool.Has(srv.Key()) {
|
||||
return
|
||||
}
|
||||
|
||||
lb.pool.Delete(srv.Name())
|
||||
lb.pool.Delete(srv.Key())
|
||||
|
||||
lb.sumWeight -= srv.Weight()
|
||||
lb.rebalance()
|
||||
|
@ -244,7 +244,7 @@ func (lb *LoadBalancer) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
|
|||
func (lb *LoadBalancer) MarshalJSON() ([]byte, error) {
|
||||
extra := make(map[string]any)
|
||||
lb.pool.RangeAll(func(k string, v Server) {
|
||||
extra[v.Name()] = v
|
||||
extra[v.Key()] = v
|
||||
})
|
||||
|
||||
return (&monitor.JSONRepresentation{
|
||||
|
|
|
@ -26,6 +26,7 @@ type (
|
|||
http.Handler
|
||||
health.HealthMonitor
|
||||
Name() string
|
||||
Key() string
|
||||
URL() *net.URL
|
||||
Weight() Weight
|
||||
SetWeight(weight Weight)
|
||||
|
@ -63,6 +64,10 @@ func (srv *server) URL() *net.URL {
|
|||
return srv.url
|
||||
}
|
||||
|
||||
func (srv *server) Key() string {
|
||||
return srv.url.Host
|
||||
}
|
||||
|
||||
func (srv *server) Weight() Weight {
|
||||
return srv.weight
|
||||
}
|
||||
|
@ -78,9 +83,7 @@ func (srv *server) String() string {
|
|||
func (srv *server) TryWake() error {
|
||||
waker, ok := srv.Handler.(idlewatcher.Waker)
|
||||
if ok {
|
||||
if err := waker.Wake(); err != nil {
|
||||
return err
|
||||
}
|
||||
return waker.Wake()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -97,7 +97,7 @@ func (r *ReveseProxyRoute) String() string {
|
|||
|
||||
// Start implements task.TaskStarter.
|
||||
func (r *ReveseProxyRoute) Start(parent task.Parent) gperr.Error {
|
||||
if existing, ok := routes.GetHTTPRoute(r.TargetName()); ok {
|
||||
if existing, ok := routes.GetHTTPRoute(r.TargetName()); ok && !r.UseLoadBalance() {
|
||||
return gperr.Errorf("route already exists: from provider %s and %s", existing.ProviderName(), r.ProviderName())
|
||||
}
|
||||
r.task = parent.Subtask("http."+r.TargetName(), false)
|
||||
|
|
|
@ -100,7 +100,7 @@ func (r *Route) Validate() (err gperr.Error) {
|
|||
}
|
||||
|
||||
if !r.UseHealthCheck() && (r.UseLoadBalance() || r.UseIdleWatcher()) {
|
||||
errs.Adds("healthCheck.disable cannot be true when loadbalancer or idlewatcher is enabled")
|
||||
errs.Adds("cannot disable healthcheck when loadbalancer or idle watcher is enabled")
|
||||
}
|
||||
|
||||
if errs.HasError() {
|
||||
|
|
Loading…
Add table
Reference in a new issue