From 8b8e1773e84abe42183cc6ccee450e0f8441fb8f Mon Sep 17 00:00:00 2001 From: yusing Date: Sat, 19 Oct 2024 01:20:08 +0800 Subject: [PATCH] fixed loadbalanced routes with same alias cause conflict --- internal/error/errors.go | 4 ++-- internal/route/http.go | 1 - internal/route/provider/provider.go | 6 +++++- internal/watcher/events/event_queue.go | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/internal/error/errors.go b/internal/error/errors.go index 896b108f..cdc7d9a0 100644 --- a/internal/error/errors.go +++ b/internal/error/errors.go @@ -17,7 +17,7 @@ var ( ErrOutOfRange = stderrors.New("out of range") ErrTypeError = stderrors.New("type error") ErrTypeMismatch = stderrors.New("type mismatch") - ErrPanicRecv = stderrors.New("panic") + ErrPanicRecv = stderrors.New("panic recovered from") ) const fmtSubjectWhat = "%w %v: %q" @@ -79,5 +79,5 @@ func TypeMismatch[Expect any](value any) NestedError { } func PanicRecv(format string, args ...any) NestedError { - return errorf("%w%s", ErrPanicRecv, fmt.Sprintf(format, args...)) + return errorf("%w %s", ErrPanicRecv, fmt.Sprintf(format, args...)) } diff --git a/internal/route/http.go b/internal/route/http.go index f65dc5e1..da3a9644 100755 --- a/internal/route/http.go +++ b/internal/route/http.go @@ -124,7 +124,6 @@ func (r *HTTPRoute) Start(providerSubtask task.Task) E.NestedError { r.handler = waker r.HealthMon = waker case entry.UseHealthCheck(r): - logrus.Debugf("%s health check: %+v", r.Alias, r.HealthCheck) r.HealthMon = health.NewHTTPHealthMonitor(r.TargetURL(), r.HealthCheck, r.rp.Transport) } r.task = providerSubtask diff --git a/internal/route/provider/provider.go b/internal/route/provider/provider.go index 45a26678..ec2f9659 100644 --- a/internal/route/provider/provider.go +++ b/internal/route/provider/provider.go @@ -7,6 +7,7 @@ import ( "github.com/sirupsen/logrus" E "github.com/yusing/go-proxy/internal/error" + "github.com/yusing/go-proxy/internal/proxy/entry" R "github.com/yusing/go-proxy/internal/route" "github.com/yusing/go-proxy/internal/task" W "github.com/yusing/go-proxy/internal/watcher" @@ -101,7 +102,10 @@ func (p *Provider) MarshalText() ([]byte, error) { } func (p *Provider) startRoute(parent task.Task, r *R.Route) E.NestedError { - subtask := parent.Subtask("route %s", r.Entry.Alias) + if entry.UseLoadBalance(r) { + r.Entry.Alias = p.String() + "/" + r.Entry.Alias + } + subtask := parent.Subtask(r.Entry.Alias) err := r.Start(subtask) if err != nil { p.routes.Delete(r.Entry.Alias) diff --git a/internal/watcher/events/event_queue.go b/internal/watcher/events/event_queue.go index d8770c34..616443a1 100644 --- a/internal/watcher/events/event_queue.go +++ b/internal/watcher/events/event_queue.go @@ -62,7 +62,7 @@ func (e *EventQueue) Start(eventCh <-chan Event, errCh <-chan E.NestedError) { go func() { defer func() { if err := recover(); err != nil { - e.onError(E.PanicRecv("panic in onFlush %s", err)) + e.onError(E.PanicRecv("onFlush: %s", err)) } }() e.onFlush(flushTask, queue)