Skip to content

Commit 5cae330

Browse files
committed
Update selector race, rename cache selector
1 parent ff982b5 commit 5cae330

File tree

9 files changed

+415
-500
lines changed

9 files changed

+415
-500
lines changed

cmd/cmd.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626

2727
// selectors
2828
"github.com/micro/go-micro/selector"
29-
"github.com/micro/go-micro/selector/cache"
3029

3130
// transports
3231
"github.com/micro/go-micro/transport"
@@ -149,7 +148,6 @@ var (
149148
Name: "selector",
150149
EnvVar: "MICRO_SELECTOR",
151150
Usage: "Selector used to pick nodes for querying",
152-
Value: "cache",
153151
},
154152
cli.StringFlag{
155153
Name: "transport",
@@ -179,7 +177,7 @@ var (
179177

180178
DefaultSelectors = map[string]func(...selector.Option) selector.Selector{
181179
"default": selector.NewSelector,
182-
"cache": cache.NewSelector,
180+
"cache": selector.NewSelector,
183181
}
184182

185183
DefaultServers = map[string]func(...server.Option) server.Server{

registry/gossip/util.go

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,35 @@ func cp(current []*registry.Service) []*registry.Service {
3838
}
3939

4040
func addNodes(old, neu []*registry.Node) []*registry.Node {
41+
var nodes []*registry.Node
42+
43+
// add all new nodes
4144
for _, n := range neu {
42-
var seen bool
43-
for i, o := range old {
45+
node := *n
46+
nodes = append(nodes, &node)
47+
}
48+
49+
// look at old nodes
50+
for _, o := range old {
51+
var exists bool
52+
53+
// check against new nodes
54+
for _, n := range nodes {
55+
// ids match then skip
4456
if o.Id == n.Id {
45-
seen = true
46-
old[i] = n
57+
exists = true
4758
break
4859
}
4960
}
50-
if !seen {
51-
old = append(old, n)
61+
62+
// keep old node
63+
if !exists {
64+
node := *o
65+
nodes = append(nodes, &node)
5266
}
5367
}
54-
return old
68+
69+
return nodes
5570
}
5671

5772
func addServices(old, neu []*registry.Service) []*registry.Service {
@@ -91,19 +106,27 @@ func delNodes(old, del []*registry.Node) []*registry.Node {
91106

92107
func delServices(old, del []*registry.Service) []*registry.Service {
93108
var services []*registry.Service
94-
for i, o := range old {
109+
110+
for _, o := range old {
111+
srv := new(registry.Service)
112+
*srv = *o
113+
95114
var rem bool
115+
96116
for _, s := range del {
97-
if o.Version == s.Version {
98-
old[i].Nodes = delNodes(o.Nodes, s.Nodes)
99-
if len(old[i].Nodes) == 0 {
117+
if srv.Version == s.Version {
118+
srv.Nodes = delNodes(srv.Nodes, s.Nodes)
119+
120+
if len(srv.Nodes) == 0 {
100121
rem = true
101122
}
102123
}
103124
}
125+
104126
if !rem {
105-
services = append(services, o)
127+
services = append(services, srv)
106128
}
107129
}
130+
108131
return services
109132
}

0 commit comments

Comments
 (0)