removed unnecessary mutex and locking, small refactor

This commit is contained in:
yusing 2024-11-11 06:35:31 +08:00
parent c07f2ed722
commit ae69019265
2 changed files with 9 additions and 31 deletions

View file

@ -5,7 +5,6 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"strings" "strings"
"sync"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"github.com/yusing/go-proxy/internal/common" "github.com/yusing/go-proxy/internal/common"
@ -45,7 +44,6 @@ var (
findMuxFunc = findMuxAnyDomain findMuxFunc = findMuxAnyDomain
httpRoutes = F.NewMapOf[string, *HTTPRoute]() httpRoutes = F.NewMapOf[string, *HTTPRoute]()
httpRoutesMu sync.Mutex
// globalMux = http.NewServeMux() // TODO: support regex subdomain matching. // globalMux = http.NewServeMux() // TODO: support regex subdomain matching.
) )
@ -63,11 +61,10 @@ func SetFindMuxDomains(domains []string) {
func NewHTTPRoute(entry *entry.ReverseProxyEntry) (impl, E.Error) { func NewHTTPRoute(entry *entry.ReverseProxyEntry) (impl, E.Error) {
var trans *http.Transport var trans *http.Transport
if entry.NoTLSVerify { if entry.NoTLSVerify {
trans = gphttp.DefaultTransportNoTLS.Clone() trans = gphttp.DefaultTransportNoTLS
} else { } else {
trans = gphttp.DefaultTransport.Clone() trans = gphttp.DefaultTransport
} }
service := string(entry.Alias) service := string(entry.Alias)
@ -102,16 +99,7 @@ func (r *HTTPRoute) Start(providerSubtask task.Task) E.Error {
return nil return nil
} }
httpRoutesMu.Lock() r.task = providerSubtask
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
}
switch { switch {
case entry.UseIdleWatcher(r): case entry.UseIdleWatcher(r):
@ -123,12 +111,13 @@ func (r *HTTPRoute) Start(providerSubtask task.Task) E.Error {
r.handler = waker r.handler = waker
r.HealthMon = waker r.HealthMon = waker
case entry.UseHealthCheck(r): 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 { if r.handler == nil {
switch { switch {
case len(r.PathPatterns) == 0:
r.handler = r.rp
case len(r.PathPatterns) == 1 && r.PathPatterns[0] == "/": case len(r.PathPatterns) == 1 && r.PathPatterns[0] == "/":
r.handler = r.rp r.handler = r.rp
default: default:

View file

@ -4,7 +4,6 @@ import (
"context" "context"
"errors" "errors"
"fmt" "fmt"
"sync"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"github.com/yusing/go-proxy/internal/docker/idlewatcher" "github.com/yusing/go-proxy/internal/docker/idlewatcher"
@ -28,10 +27,7 @@ type StreamRoute struct {
l zerolog.Logger l zerolog.Logger
} }
var ( var streamRoutes = F.NewMapOf[string, *StreamRoute]()
streamRoutes = F.NewMapOf[string, *StreamRoute]()
streamRoutesMu sync.Mutex
)
func GetStreamProxies() F.Map[string, *StreamRoute] { func GetStreamProxies() F.Map[string, *StreamRoute] {
return streamRoutes return streamRoutes
@ -62,14 +58,6 @@ func (r *StreamRoute) Start(providerSubtask task.Task) E.Error {
return nil 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.task = providerSubtask
r.stream = NewStream(r) r.stream = NewStream(r)
@ -111,6 +99,7 @@ func (r *StreamRoute) Start(providerSubtask task.Task) E.Error {
} }
go r.acceptConnections() go r.acceptConnections()
streamRoutes.Store(string(r.Alias), r) streamRoutes.Store(string(r.Alias), r)
r.task.OnFinished("remove from route table", func() { r.task.OnFinished("remove from route table", func() {
streamRoutes.Delete(string(r.Alias)) streamRoutes.Delete(string(r.Alias))