mirror of
https://github.com/zeromicro/go-zero.git
synced 2025-02-02 16:28:39 +08:00
fix: etcd scheme on grpc resolver (#4121)
This commit is contained in:
parent
896e1a2abb
commit
47d13e5ef8
@ -9,10 +9,41 @@ import (
|
||||
"google.golang.org/grpc/resolver"
|
||||
)
|
||||
|
||||
type discovBuilder struct{}
|
||||
type discovBuilder struct {
|
||||
cc resolver.ClientConn
|
||||
update func()
|
||||
}
|
||||
|
||||
func (b *discovBuilder) Build(target resolver.Target, cc resolver.ClientConn, _ resolver.BuildOptions) (
|
||||
resolver.Resolver, error) {
|
||||
b.cc = cc
|
||||
if err := b.updateState(target); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &nopResolver{cc: cc}, nil
|
||||
}
|
||||
|
||||
func (b *discovBuilder) Scheme() string {
|
||||
return DiscovScheme
|
||||
}
|
||||
|
||||
func (b *discovBuilder) updateState(target resolver.Target) error {
|
||||
if b.update == nil {
|
||||
update, err := b.buildEndpointsUpdater(target)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
b.update = update
|
||||
}
|
||||
|
||||
b.update()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *discovBuilder) buildEndpointsUpdater(target resolver.Target) (func(), error) {
|
||||
hosts := strings.FieldsFunc(targets.GetAuthority(target), func(r rune) bool {
|
||||
return r == EndpointSepChar
|
||||
})
|
||||
@ -29,18 +60,13 @@ func (b *discovBuilder) Build(target resolver.Target, cc resolver.ClientConn, _
|
||||
Addr: val,
|
||||
})
|
||||
}
|
||||
if err := cc.UpdateState(resolver.State{
|
||||
if err := b.cc.UpdateState(resolver.State{
|
||||
Addresses: addrs,
|
||||
}); err != nil {
|
||||
logx.Error(err)
|
||||
}
|
||||
}
|
||||
sub.AddListener(update)
|
||||
update()
|
||||
|
||||
return &nopResolver{cc: cc}, nil
|
||||
}
|
||||
|
||||
func (b *discovBuilder) Scheme() string {
|
||||
return DiscovScheme
|
||||
return update, nil
|
||||
}
|
||||
|
@ -28,7 +28,8 @@ type kubeResolver struct {
|
||||
stopCh chan struct{}
|
||||
}
|
||||
|
||||
func (r *kubeResolver) ResolveNow(_ resolver.ResolveNowOptions) {}
|
||||
func (r *kubeResolver) ResolveNow(_ resolver.ResolveNowOptions) {
|
||||
}
|
||||
|
||||
func (r *kubeResolver) start() {
|
||||
threading.GoSafe(func() {
|
||||
|
Loading…
Reference in New Issue
Block a user