Skip to content

Commit 7f19952

Browse files
committed
improve service discovery for package gclient
1 parent ea79b3c commit 7f19952

File tree

5 files changed

+16
-9
lines changed

5 files changed

+16
-9
lines changed

contrib/registry/etcd/etcd_watcher.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ func newWatcher(key string, client *etcd3.Client) (*watcher, error) {
3535
}
3636
w.ctx, w.cancel = context.WithCancel(context.Background())
3737
w.watchChan = w.watcher.Watch(w.ctx, key, etcd3.WithPrefix(), etcd3.WithRev(0))
38-
err := w.watcher.RequestProgress(context.Background())
39-
if err != nil {
38+
if err := w.watcher.RequestProgress(context.Background()); err != nil {
4039
return nil, err
4140
}
4241
return w, nil
File renamed without changes.
File renamed without changes.

net/gclient/gclient_discovery.go

+14-7
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,22 @@ func internalMiddlewareDiscovery(c *Client, r *http.Request) (response *Response
6565
return c.Next(r)
6666
}
6767
// Balancer.
68-
selectorMapKey := service.GetPrefix()
69-
selector := clientSelectorMap.GetOrSetFuncLock(selectorMapKey, func() interface{} {
70-
intlog.Printf(ctx, `http client create selector for service "%s"`, selectorMapKey)
71-
return gsel.GetBuilder().Build()
72-
}).(gsel.Selector)
73-
// Update selector nodes.
74-
if err = updateSelectorNodesByService(ctx, selector, service); err != nil {
68+
var (
69+
selectorMapKey = service.GetPrefix()
70+
selectorMapValue = clientSelectorMap.GetOrSetFuncLock(selectorMapKey, func() interface{} {
71+
intlog.Printf(ctx, `http client create selector for service "%s"`, selectorMapKey)
72+
selector := gsel.GetBuilder().Build()
73+
// Update selector nodes.
74+
if err = updateSelectorNodesByService(ctx, selector, service); err != nil {
75+
return nil
76+
}
77+
return selector
78+
})
79+
)
80+
if err != nil {
7581
return nil, err
7682
}
83+
selector := selectorMapValue.(gsel.Selector)
7784
// Pick one node from multiple addresses.
7885
node, done, err := selector.Pick(ctx)
7986
if err != nil {

net/gsvc/gsvc.go

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ type Discovery interface {
4242
// Watcher interface for service.
4343
type Watcher interface {
4444
// Proceed proceeds watch in blocking way.
45+
// It returns all complete services that watched by `key` if any change.
4546
Proceed() ([]Service, error)
4647

4748
// Close closes the watcher.

0 commit comments

Comments
 (0)