fix:etcd prifex find error (#1507)

pull/1509/head
海雨 3 years ago committed by GitHub
parent c180cd4ab0
commit 953deaa363
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      contrib/registry/etcd/registry.go
  2. 13
      contrib/registry/etcd/watcher.go

@ -109,13 +109,16 @@ func (r *Registry) GetService(ctx context.Context, name string) ([]*registry.Ser
if err != nil { if err != nil {
return nil, err return nil, err
} }
items := make([]*registry.ServiceInstance, len(resp.Kvs)) items := make([]*registry.ServiceInstance, 0, len(resp.Kvs))
for i, kv := range resp.Kvs { for _, kv := range resp.Kvs {
si, err := unmarshal(kv.Value) si, err := unmarshal(kv.Value)
if err != nil { if err != nil {
return nil, err return nil, err
} }
items[i] = si if si.Name != name {
continue
}
items = append(items, si)
} }
return items, nil return items, nil
} }
@ -123,7 +126,7 @@ func (r *Registry) GetService(ctx context.Context, name string) ([]*registry.Ser
// Watch creates a watcher according to the service name. // Watch creates a watcher according to the service name.
func (r *Registry) Watch(ctx context.Context, name string) (registry.Watcher, error) { func (r *Registry) Watch(ctx context.Context, name string) (registry.Watcher, error) {
key := fmt.Sprintf("%s/%s", r.opts.namespace, name) key := fmt.Sprintf("%s/%s", r.opts.namespace, name)
return newWatcher(ctx, key, r.client) return newWatcher(ctx, key, name, r.client)
} }
// registerWithKV create a new lease, return current leaseID // registerWithKV create a new lease, return current leaseID

@ -17,14 +17,16 @@ type watcher struct {
watcher clientv3.Watcher watcher clientv3.Watcher
kv clientv3.KV kv clientv3.KV
first bool first bool
serviceName string
} }
func newWatcher(ctx context.Context, key string, client *clientv3.Client) (*watcher, error) { func newWatcher(ctx context.Context, key, name string, client *clientv3.Client) (*watcher, error) {
w := &watcher{ w := &watcher{
key: key, key: key,
watcher: clientv3.NewWatcher(client), watcher: clientv3.NewWatcher(client),
kv: clientv3.NewKV(client), kv: clientv3.NewKV(client),
first: true, first: true,
serviceName: name,
} }
w.ctx, w.cancel = context.WithCancel(ctx) w.ctx, w.cancel = context.WithCancel(ctx)
w.watchChan = w.watcher.Watch(w.ctx, key, clientv3.WithPrefix(), clientv3.WithRev(0)) w.watchChan = w.watcher.Watch(w.ctx, key, clientv3.WithPrefix(), clientv3.WithRev(0))
@ -60,13 +62,16 @@ func (w *watcher) getInstance() ([]*registry.ServiceInstance, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
items := make([]*registry.ServiceInstance, len(resp.Kvs)) items := make([]*registry.ServiceInstance, 0, len(resp.Kvs))
for i, kv := range resp.Kvs { for _, kv := range resp.Kvs {
si, err := unmarshal(kv.Value) si, err := unmarshal(kv.Value)
if err != nil { if err != nil {
return nil, err return nil, err
} }
items[i] = si if si.Name != w.serviceName {
continue
}
items = append(items, si)
} }
return items, nil return items, nil
} }

Loading…
Cancel
Save