From 1c080e067d0ad79bc2ed376769f7c1e10896cd31 Mon Sep 17 00:00:00 2001 From: yusing Date: Sat, 13 Sep 2025 23:49:45 +0800 Subject: [PATCH] refactor(routes): centralize route existence checking - Removed All routes pool --- internal/route/fileserver.go | 4 ---- internal/route/reverse_proxy.go | 8 +------- internal/route/route.go | 7 +++++++ internal/route/routes/routes.go | 31 ++++++++++++++++++++----------- internal/route/stream.go | 4 ---- 5 files changed, 28 insertions(+), 26 deletions(-) diff --git a/internal/route/fileserver.go b/internal/route/fileserver.go index 2b2870a5..737c43ae 100644 --- a/internal/route/fileserver.go +++ b/internal/route/fileserver.go @@ -97,10 +97,6 @@ func (s *FileServer) Start(parent task.Parent) gperr.Error { return nil } - if err := checkExists(s); err != nil { - return err - } - routes.HTTP.Add(s) s.task.OnFinished("remove_route_from_http", func() { routes.HTTP.Del(s) diff --git a/internal/route/reverse_proxy.go b/internal/route/reverse_proxy.go index 1286a3af..0ddb583a 100755 --- a/internal/route/reverse_proxy.go +++ b/internal/route/reverse_proxy.go @@ -136,10 +136,6 @@ func (r *ReveseProxyRoute) Start(parent task.Parent) gperr.Error { return nil } - if err := checkExists(r); err != nil { - return err - } - if r.UseLoadBalance() { r.addToLoadBalancer(parent) } else { @@ -171,7 +167,7 @@ func (r *ReveseProxyRoute) addToLoadBalancer(parent task.Parent) { linked = l.(*ReveseProxyRoute) lb = linked.loadBalancer lb.UpdateConfigIfNeeded(cfg) - if linked.Homepage == nil { + if linked.Homepage.Name == "" { linked.Homepage = r.Homepage } } else { @@ -187,10 +183,8 @@ func (r *ReveseProxyRoute) addToLoadBalancer(parent task.Parent) { } linked.SetHealthMonitor(lb) routes.HTTP.AddKey(cfg.Link, linked) - routes.All.AddKey(cfg.Link, linked) r.task.OnFinished("remove_loadbalancer_route", func() { routes.HTTP.DelKey(cfg.Link) - routes.All.DelKey(cfg.Link) }) lbLock.Unlock() } diff --git a/internal/route/route.go b/internal/route/route.go index 7eb4009d..18d43443 100644 --- a/internal/route/route.go +++ b/internal/route/route.go @@ -291,6 +291,13 @@ func (r *Route) start(parent task.Parent) gperr.Error { } defer close(r.started) + // skip checking for excluded routes + if !r.ShouldExclude() { + if err := checkExists(r); err != nil { + return err + } + } + if err := r.impl.Start(parent); err != nil { return err } diff --git a/internal/route/routes/routes.go b/internal/route/routes/routes.go index 6377b267..1f6c515a 100644 --- a/internal/route/routes/routes.go +++ b/internal/route/routes/routes.go @@ -8,16 +8,15 @@ import ( var ( HTTP = pool.New[types.HTTPRoute]("http_routes") Stream = pool.New[types.StreamRoute]("stream_routes") - // All is a pool of all routes, including HTTP, Stream routes and also excluded routes. - All = pool.New[types.Route]("all_routes") ) -func init() { - All.DisableLog() -} - func Iter(yield func(r types.Route) bool) { - for _, r := range All.Iter { + for _, r := range HTTP.Iter { + if !yield(r) { + break + } + } + for _, r := range Stream.Iter { if !yield(r) { break } @@ -25,7 +24,12 @@ func Iter(yield func(r types.Route) bool) { } func IterKV(yield func(alias string, r types.Route) bool) { - for k, r := range All.Iter { + for k, r := range HTTP.Iter { + if !yield(k, r) { + break + } + } + for k, r := range Stream.Iter { if !yield(k, r) { break } @@ -33,13 +37,12 @@ func IterKV(yield func(alias string, r types.Route) bool) { } func NumRoutes() int { - return All.Size() + return HTTP.Size() + Stream.Size() } func Clear() { HTTP.Clear() Stream.Clear() - All.Clear() } func GetHTTPRouteOrExact(alias, host string) (types.HTTPRoute, bool) { @@ -52,5 +55,11 @@ func GetHTTPRouteOrExact(alias, host string) (types.HTTPRoute, bool) { } func Get(alias string) (types.Route, bool) { - return All.Get(alias) + if r, ok := HTTP.Get(alias); ok { + return r, true + } + if r, ok := Stream.Get(alias); ok { + return r, true + } + return nil, false } diff --git a/internal/route/stream.go b/internal/route/stream.go index 0c4adcd8..d42d1ac8 100755 --- a/internal/route/stream.go +++ b/internal/route/stream.go @@ -73,10 +73,6 @@ func (r *StreamRoute) Start(parent task.Parent) gperr.Error { return nil } - if err := checkExists(r); err != nil { - return err - } - r.ListenAndServe(r.task.Context(), nil, nil) r.l = r.l.With().Stringer("rurl", r.ProxyURL).Stringer("laddr", r.LocalAddr()).Logger() r.l.Info().Msg("stream started")