Fix proxy selector memory leak
This commit is contained in:
parent
38ec233350
commit
03d47afe47
@ -20,6 +20,7 @@ import (
|
||||
"github.com/micro/go-micro/v3/proxy"
|
||||
"github.com/micro/go-micro/v3/router"
|
||||
"github.com/micro/go-micro/v3/router/registry"
|
||||
"github.com/micro/go-micro/v3/selector"
|
||||
"github.com/micro/go-micro/v3/selector/roundrobin"
|
||||
"github.com/micro/go-micro/v3/server"
|
||||
)
|
||||
@ -45,6 +46,9 @@ type Proxy struct {
|
||||
// A fib of routes service:address
|
||||
sync.RWMutex
|
||||
Routes map[string]map[uint64]router.Route
|
||||
|
||||
// selector used for load balancing
|
||||
Selector selector.Selector
|
||||
}
|
||||
|
||||
// read client request and write to server
|
||||
@ -402,7 +406,7 @@ func (p *Proxy) ServeRequest(ctx context.Context, req server.Request, rsp server
|
||||
//nolint:prealloc
|
||||
opts := []client.CallOption{
|
||||
// set strategy to round robin
|
||||
client.WithSelector(roundrobin.NewSelector()),
|
||||
client.WithSelector(p.Selector),
|
||||
}
|
||||
|
||||
// if the address is already set just serve it
|
||||
@ -608,6 +612,11 @@ func NewProxy(opts ...proxy.Option) proxy.Proxy {
|
||||
if p.Router == nil {
|
||||
p.Router = registry.NewRouter()
|
||||
}
|
||||
|
||||
if p.Selector == nil {
|
||||
p.Selector = roundrobin.NewSelector()
|
||||
}
|
||||
|
||||
// set the links
|
||||
if options.Links != nil {
|
||||
// get client
|
||||
|
@ -93,12 +93,7 @@ func (r *roundrobin) String() string {
|
||||
}
|
||||
|
||||
func (r *roundrobin) cleanRoutes() {
|
||||
for {
|
||||
// watch for ticks until the ticker is closed
|
||||
if _, ok := <-r.ticker.C; !ok {
|
||||
return
|
||||
}
|
||||
|
||||
for _ = range r.ticker.C {
|
||||
r.Lock()
|
||||
|
||||
// copy the slice to prevent concurrent map iteration and map write
|
||||
@ -109,6 +104,7 @@ func (r *roundrobin) cleanRoutes() {
|
||||
delete(r.routes, hash)
|
||||
}
|
||||
}
|
||||
|
||||
r.Unlock()
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user