refactor(routes): centralize route existence checking

- Removed All routes pool
This commit is contained in:
yusing
2025-09-13 23:49:45 +08:00
parent 2717dc963a
commit 1c080e067d
5 changed files with 28 additions and 26 deletions

View File

@@ -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)

View File

@@ -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()
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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")