diff --git a/outbound/balancer.go b/outbound/balancer.go index 0b753201..7504d44d 100644 --- a/outbound/balancer.go +++ b/outbound/balancer.go @@ -130,17 +130,15 @@ func (s *Balancer) Start() error { if s.fallbackTag == "" { return E.New("fallback not set") } + if s.Balancer == nil { + return E.New("balancer not set") + } outbound, loaded := s.router.Outbound(s.fallbackTag) if !loaded { return E.New("fallback outbound not found: ", s.fallbackTag) } s.fallback = outbound - return nil -} - -func (s *Balancer) setBalancer(b balancer.Balancer) error { - s.Balancer = b - if starter, isStarter := b.(common.Starter); isStarter { + if starter, isStarter := s.Balancer.(common.Starter); isStarter { err := starter.Start() if err != nil { return err diff --git a/outbound/leastload.go b/outbound/leastload.go index 46261b24..137217a0 100644 --- a/outbound/leastload.go +++ b/outbound/leastload.go @@ -38,13 +38,10 @@ func NewLeastLoad(router adapter.Router, logger log.ContextLogger, tag string, o // Start implements common.Starter func (s *LeastLoad) Start() error { - err := s.Balancer.Start() - if err != nil { - return err - } b, err := balancer.NewLeastLoad(s.router, s.logger, s.options) if err != nil { return err } - return s.setBalancer(b) + s.Balancer.Balancer = b + return s.Balancer.Start() } diff --git a/outbound/leastping.go b/outbound/leastping.go index 2a222a7a..97150a23 100644 --- a/outbound/leastping.go +++ b/outbound/leastping.go @@ -38,13 +38,10 @@ func NewLeastPing(router adapter.Router, logger log.ContextLogger, tag string, o // Start implements common.Starter func (s *LeastPing) Start() error { - err := s.Balancer.Start() - if err != nil { - return err - } b, err := balancer.NewLeastPing(s.router, s.logger, s.options) if err != nil { return err } - return s.setBalancer(b) + s.Balancer.Balancer = b + return s.Balancer.Start() }