fix: etcd discovery mechanism on grpc with idle manager (#4589)

This commit is contained in:
Kevin Wan
2025-01-22 14:01:18 +08:00
committed by GitHub
parent 33011c7ed1
commit bf883101d7
9 changed files with 494 additions and 285 deletions

View File

@@ -38,9 +38,24 @@ func (b *discovBuilder) Build(target resolver.Target, cc resolver.ClientConn, _
sub.AddListener(update)
update()
return &nopResolver{cc: cc, closeFunc: func() { sub.Close() }}, nil
return &discovResolver{
cc: cc,
sub: sub,
}, nil
}
func (b *discovBuilder) Scheme() string {
return DiscovScheme
}
type discovResolver struct {
cc resolver.ClientConn
sub *discov.Subscriber
}
func (r *discovResolver) Close() {
r.sub.Close()
}
func (r *discovResolver) ResolveNow(_ resolver.ResolveNowOptions) {
}

View File

@@ -28,6 +28,10 @@ type kubeResolver struct {
stopCh chan struct{}
}
func (r *kubeResolver) Close() {
close(r.stopCh)
}
func (r *kubeResolver) ResolveNow(_ resolver.ResolveNowOptions) {}
func (r *kubeResolver) start() {
@@ -36,10 +40,6 @@ func (r *kubeResolver) start() {
})
}
func (r *kubeResolver) Close() {
close(r.stopCh)
}
type kubeBuilder struct{}
func (b *kubeBuilder) Build(target resolver.Target, cc resolver.ClientConn,

View File

@@ -37,14 +37,10 @@ func register() {
}
type nopResolver struct {
cc resolver.ClientConn
closeFunc func()
cc resolver.ClientConn
}
func (r *nopResolver) Close() {
if r.closeFunc != nil {
r.closeFunc()
}
}
func (r *nopResolver) ResolveNow(_ resolver.ResolveNowOptions) {

View File

@@ -1,7 +1,6 @@
package internal
import (
"github.com/zeromicro/go-zero/core/discov"
"testing"
"github.com/stretchr/testify/assert"
@@ -19,20 +18,6 @@ func TestNopResolver(t *testing.T) {
})
}
func TestNopResolver_Close(t *testing.T) {
var isChanged bool
r := nopResolver{}
r.Close()
assert.False(t, isChanged)
r = nopResolver{
closeFunc: func() {
isChanged = true
},
}
r.Close()
assert.True(t, isChanged)
}
type mockedClientConn struct {
state resolver.State
err error