fixed loadbalanced routes with same alias cause conflict

This commit is contained in:
yusing 2024-10-19 01:20:08 +08:00
parent b296fb2965
commit 8b8e1773e8
4 changed files with 8 additions and 5 deletions

View file

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

View file

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

View file

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

View file

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