fix incorrect route loading behaviors

This commit is contained in:
yusing 2025-02-04 03:17:29 +08:00
parent c61d893403
commit 1baf10fa88
5 changed files with 13 additions and 25 deletions

View file

@ -368,7 +368,7 @@ func TestImplicitExcludeDatabase(t *testing.T) {
}, },
})["a"] })["a"]
ExpectTrue(t, ok) ExpectTrue(t, ok)
ExpectTrue(t, r.ShouldNotServe()) ExpectTrue(t, r.ShouldExclude())
}) })
t.Run("exposed port detection", func(t *testing.T) { t.Run("exposed port detection", func(t *testing.T) {
r, ok := makeRoutes(&types.Container{ r, ok := makeRoutes(&types.Container{
@ -378,6 +378,6 @@ func TestImplicitExcludeDatabase(t *testing.T) {
}, },
})["a"] })["a"]
ExpectTrue(t, ok) ExpectTrue(t, ok)
ExpectTrue(t, r.ShouldNotServe()) ExpectTrue(t, r.ShouldExclude())
}) })
} }

View file

@ -65,12 +65,10 @@ func (handler *EventHandler) Handle(parent task.Parent, events []watcher.Event)
handler.Remove(oldr) handler.Remove(oldr)
case handler.matchAny(events, newr): case handler.matchAny(events, newr):
handler.Update(parent, oldr, newr) handler.Update(parent, oldr, newr)
case newr.ShouldNotServe():
handler.Remove(oldr)
} }
} }
for k, newr := range newRoutes { for k, newr := range newRoutes {
if _, ok := oldRoutes[k]; !(ok || newr.ShouldNotServe()) { if _, ok := oldRoutes[k]; !ok {
handler.Add(parent, newr) handler.Add(parent, newr)
} }
} }

View file

@ -8,7 +8,6 @@ import (
"github.com/rs/zerolog" "github.com/rs/zerolog"
E "github.com/yusing/go-proxy/internal/error" E "github.com/yusing/go-proxy/internal/error"
"github.com/yusing/go-proxy/internal/logging"
"github.com/yusing/go-proxy/internal/route" "github.com/yusing/go-proxy/internal/route"
"github.com/yusing/go-proxy/internal/route/provider/types" "github.com/yusing/go-proxy/internal/route/provider/types"
"github.com/yusing/go-proxy/internal/task" "github.com/yusing/go-proxy/internal/task"
@ -83,10 +82,6 @@ func (p *Provider) MarshalText() ([]byte, error) {
} }
func (p *Provider) startRoute(parent task.Parent, r *route.Route) E.Error { func (p *Provider) startRoute(parent task.Parent, r *route.Route) E.Error {
if r.ShouldNotServe() {
logging.Debug().Str("alias", r.Alias).Str("provider", p.ShortName()).Msg("route excluded")
return nil
}
err := r.Start(parent) err := r.Start(parent)
if err != nil { if err != nil {
return err.Subject(r.Alias) return err.Subject(r.Alias)
@ -155,7 +150,6 @@ func (p *Provider) loadRoutes() (routes route.Routes, err E.Error) {
} }
if r.ShouldExclude() { if r.ShouldExclude() {
delete(routes, alias) delete(routes, alias)
continue
} }
} }
return routes, errs.Error() return routes, errs.Error()

View file

@ -8,7 +8,6 @@ import (
"github.com/yusing/go-proxy/internal/docker" "github.com/yusing/go-proxy/internal/docker"
idlewatcher "github.com/yusing/go-proxy/internal/docker/idlewatcher/types" idlewatcher "github.com/yusing/go-proxy/internal/docker/idlewatcher/types"
"github.com/yusing/go-proxy/internal/homepage" "github.com/yusing/go-proxy/internal/homepage"
"github.com/yusing/go-proxy/internal/logging"
net "github.com/yusing/go-proxy/internal/net/types" net "github.com/yusing/go-proxy/internal/net/types"
"github.com/yusing/go-proxy/internal/task" "github.com/yusing/go-proxy/internal/task"
"github.com/yusing/go-proxy/internal/watcher/health" "github.com/yusing/go-proxy/internal/watcher/health"
@ -67,10 +66,6 @@ func (r *Route) Validate() E.Error {
} }
r.isValidated = true r.isValidated = true
if r.ShouldNotServe() {
return nil
}
errs := E.NewBuilder("entry validation failed") errs := E.NewBuilder("entry validation failed")
switch r.Scheme { switch r.Scheme {
@ -85,7 +80,7 @@ func (r *Route) Validate() E.Error {
r.lURL = E.Collect(errs, net.ParseURL, fmt.Sprintf("%s://%s:%d", r.Scheme, r.Host, r.Port.Listening)) r.lURL = E.Collect(errs, net.ParseURL, fmt.Sprintf("%s://%s:%d", r.Scheme, r.Host, r.Port.Listening))
fallthrough fallthrough
default: default:
if r.Port.Proxy == 0 && !r.UseIdleWatcher() { if r.Port.Proxy == 0 && !r.IsDocker() {
errs.Adds("missing proxy port") errs.Adds("missing proxy port")
} }
if r.LoadBalance != nil && r.LoadBalance.Link == "" { if r.LoadBalance != nil && r.LoadBalance.Link == "" {
@ -124,6 +119,11 @@ func (r *Route) Finish(reason any) {
return return
} }
r.impl.Finish(reason) r.impl.Finish(reason)
r.impl = nil
}
func (r *Route) Started() bool {
return r.impl != nil
} }
func (r *Route) ProviderName() string { func (r *Route) ProviderName() string {
@ -190,7 +190,8 @@ func (r *Route) ShouldExclude() bool {
case r.Container.IsExcluded: case r.Container.IsExcluded:
return true return true
case r.IsZeroPort() && !r.UseIdleWatcher(): case r.IsZeroPort() && !r.UseIdleWatcher():
logging.Debug().Str("container", r.Container.ContainerName).Msg("route excluded") return true
case r.Container.IsDatabase && !r.Container.IsExplicit:
return true return true
case strings.HasPrefix(r.Container.ContainerName, "buildx_"): case strings.HasPrefix(r.Container.ContainerName, "buildx_"):
return true return true
@ -205,13 +206,6 @@ func (r *Route) ShouldExclude() bool {
return false return false
} }
func (r *Route) ShouldNotServe() bool {
if r.Container != nil && r.Container.IsDatabase && !r.Container.IsExplicit {
return true
}
return false
}
func (r *Route) UseLoadBalance() bool { func (r *Route) UseLoadBalance() bool {
return r.LoadBalance != nil && r.LoadBalance.Link != "" return r.LoadBalance != nil && r.LoadBalance.Link != ""
} }

View file

@ -23,6 +23,8 @@ type (
TargetURL() *net.URL TargetURL() *net.URL
HealthMonitor() health.HealthMonitor HealthMonitor() health.HealthMonitor
Started() bool
IdlewatcherConfig() *idlewatcher.Config IdlewatcherConfig() *idlewatcher.Config
HealthCheckConfig() *health.HealthCheckConfig HealthCheckConfig() *health.HealthCheckConfig
LoadBalanceConfig() *loadbalance.Config LoadBalanceConfig() *loadbalance.Config