fix loadbalancer panic on weight rebalance

This commit is contained in:
yusing 2025-01-02 11:36:11 +08:00
parent cd74b76483
commit 320e29ba84

View file

@ -65,7 +65,6 @@ func (lb *LoadBalancer) Start(parent task.Parent) E.Error {
lb.impl.OnRemoveServer(v) lb.impl.OnRemoveServer(v)
}) })
} }
lb.pool.Clear()
}) })
return nil return nil
} }
@ -171,12 +170,14 @@ func (lb *LoadBalancer) rebalance() {
if lb.sumWeight == maxWeight { if lb.sumWeight == maxWeight {
return return
} }
if lb.pool.Size() == 0 {
poolSize := lb.pool.Size()
if poolSize == 0 {
return return
} }
if lb.sumWeight == 0 { // distribute evenly if lb.sumWeight == 0 { // distribute evenly
weightEach := maxWeight / Weight(lb.pool.Size()) weightEach := maxWeight / Weight(poolSize)
remainder := maxWeight % Weight(lb.pool.Size()) remainder := maxWeight % Weight(poolSize)
lb.pool.RangeAll(func(_ string, s *Server) { lb.pool.RangeAll(func(_ string, s *Server) {
s.Weight = weightEach s.Weight = weightEach
lb.sumWeight += weightEach lb.sumWeight += weightEach