From ae69019265af490aaa3a7a6d99c85f1d52038edb Mon Sep 17 00:00:00 2001 From: yusing Date: Mon, 11 Nov 2024 06:35:31 +0800 Subject: [PATCH] removed unnecessary mutex and locking, small refactor --- internal/route/http.go | 25 +++++++------------------ internal/route/stream.go | 15 ++------------- 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/internal/route/http.go b/internal/route/http.go index 55ab56c..cc292f3 100755 --- a/internal/route/http.go +++ b/internal/route/http.go @@ -5,7 +5,6 @@ import ( "fmt" "net/http" "strings" - "sync" "github.com/rs/zerolog" "github.com/yusing/go-proxy/internal/common" @@ -44,8 +43,7 @@ type ( var ( findMuxFunc = findMuxAnyDomain - httpRoutes = F.NewMapOf[string, *HTTPRoute]() - httpRoutesMu sync.Mutex + httpRoutes = F.NewMapOf[string, *HTTPRoute]() // globalMux = http.NewServeMux() // TODO: support regex subdomain matching. ) @@ -63,11 +61,10 @@ func SetFindMuxDomains(domains []string) { func NewHTTPRoute(entry *entry.ReverseProxyEntry) (impl, E.Error) { var trans *http.Transport - if entry.NoTLSVerify { - trans = gphttp.DefaultTransportNoTLS.Clone() + trans = gphttp.DefaultTransportNoTLS } else { - trans = gphttp.DefaultTransport.Clone() + trans = gphttp.DefaultTransport } service := string(entry.Alias) @@ -102,16 +99,7 @@ func (r *HTTPRoute) Start(providerSubtask task.Task) E.Error { return nil } - httpRoutesMu.Lock() - defer httpRoutesMu.Unlock() - - if !entry.UseHealthCheck(r) && (entry.UseLoadBalance(r) || entry.UseIdleWatcher(r)) { - r.l.Error().Msg("healthCheck.disabled cannot be false when loadbalancer or idlewatcher is enabled") - if r.HealthCheck == nil { - r.HealthCheck = new(health.HealthCheckConfig) - } - r.HealthCheck.Disable = false - } + r.task = providerSubtask switch { case entry.UseIdleWatcher(r): @@ -123,12 +111,13 @@ func (r *HTTPRoute) Start(providerSubtask task.Task) E.Error { r.handler = waker r.HealthMon = waker case entry.UseHealthCheck(r): - r.HealthMon = health.NewHTTPHealthMonitor(r.TargetURL(), r.HealthCheck, r.rp.Transport) + r.HealthMon = health.NewHTTPHealthMonitor(r.rp.TargetURL, r.HealthCheck) } - r.task = providerSubtask if r.handler == nil { switch { + case len(r.PathPatterns) == 0: + r.handler = r.rp case len(r.PathPatterns) == 1 && r.PathPatterns[0] == "/": r.handler = r.rp default: diff --git a/internal/route/stream.go b/internal/route/stream.go index c288a4b..76cbd41 100755 --- a/internal/route/stream.go +++ b/internal/route/stream.go @@ -4,7 +4,6 @@ import ( "context" "errors" "fmt" - "sync" "github.com/rs/zerolog" "github.com/yusing/go-proxy/internal/docker/idlewatcher" @@ -28,10 +27,7 @@ type StreamRoute struct { l zerolog.Logger } -var ( - streamRoutes = F.NewMapOf[string, *StreamRoute]() - streamRoutesMu sync.Mutex -) +var streamRoutes = F.NewMapOf[string, *StreamRoute]() func GetStreamProxies() F.Map[string, *StreamRoute] { return streamRoutes @@ -62,14 +58,6 @@ func (r *StreamRoute) Start(providerSubtask task.Task) E.Error { return nil } - streamRoutesMu.Lock() - defer streamRoutesMu.Unlock() - - if r.HealthCheck.Disable && (entry.UseLoadBalance(r) || entry.UseIdleWatcher(r)) { - r.l.Error().Msg("healthCheck.disabled cannot be false when loadbalancer or idlewatcher is enabled") - r.HealthCheck.Disable = false - } - r.task = providerSubtask r.stream = NewStream(r) @@ -111,6 +99,7 @@ func (r *StreamRoute) Start(providerSubtask task.Task) E.Error { } go r.acceptConnections() + streamRoutes.Store(string(r.Alias), r) r.task.OnFinished("remove from route table", func() { streamRoutes.Delete(string(r.Alias))