Update registry util semantics
This commit is contained in:
113
registry/util.go
113
registry/util.go
@@ -1,6 +1,56 @@
|
||||
package registry
|
||||
|
||||
func CopyServices(current []*Service) []*Service {
|
||||
func addNodes(old, neu []*Node) []*Node {
|
||||
var nodes []*Node
|
||||
|
||||
// add all new nodes
|
||||
for _, n := range neu {
|
||||
node := *n
|
||||
nodes = append(nodes, &node)
|
||||
}
|
||||
|
||||
// look at old nodes
|
||||
for _, o := range old {
|
||||
var exists bool
|
||||
|
||||
// check against new nodes
|
||||
for _, n := range nodes {
|
||||
// ids match then skip
|
||||
if o.Id == n.Id {
|
||||
exists = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// keep old node
|
||||
if !exists {
|
||||
node := *o
|
||||
nodes = append(nodes, &node)
|
||||
}
|
||||
}
|
||||
|
||||
return nodes
|
||||
}
|
||||
|
||||
func delNodes(old, del []*Node) []*Node {
|
||||
var nodes []*Node
|
||||
for _, o := range old {
|
||||
var rem bool
|
||||
for _, n := range del {
|
||||
if o.Id == n.Id {
|
||||
rem = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !rem {
|
||||
nodes = append(nodes, o)
|
||||
}
|
||||
}
|
||||
return nodes
|
||||
}
|
||||
|
||||
// Copy makes a copy of services
|
||||
func Copy(current []*Service) []*Service {
|
||||
var services []*Service
|
||||
|
||||
for _, service := range current {
|
||||
@@ -33,39 +83,8 @@ func CopyServices(current []*Service) []*Service {
|
||||
return services
|
||||
}
|
||||
|
||||
func addServiceNodes(old, neu []*Node) []*Node {
|
||||
var nodes []*Node
|
||||
|
||||
// add all new nodes
|
||||
for _, n := range neu {
|
||||
node := *n
|
||||
nodes = append(nodes, &node)
|
||||
}
|
||||
|
||||
// look at old nodes
|
||||
for _, o := range old {
|
||||
var exists bool
|
||||
|
||||
// check against new nodes
|
||||
for _, n := range nodes {
|
||||
// ids match then skip
|
||||
if o.Id == n.Id {
|
||||
exists = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// keep old node
|
||||
if !exists {
|
||||
node := *o
|
||||
nodes = append(nodes, &node)
|
||||
}
|
||||
}
|
||||
|
||||
return nodes
|
||||
}
|
||||
|
||||
func AddServices(olist []*Service, nlist []*Service) []*Service {
|
||||
// Merge merges two lists of services and returns a new copy
|
||||
func Merge(olist []*Service, nlist []*Service) []*Service {
|
||||
var srv []*Service
|
||||
|
||||
for _, n := range nlist {
|
||||
@@ -76,7 +95,7 @@ func AddServices(olist []*Service, nlist []*Service) []*Service {
|
||||
// make copy
|
||||
*sp = *o
|
||||
// set nodes
|
||||
sp.Nodes = addServiceNodes(o.Nodes, n.Nodes)
|
||||
sp.Nodes = addNodes(o.Nodes, n.Nodes)
|
||||
|
||||
// mark as seen
|
||||
seen = true
|
||||
@@ -90,30 +109,14 @@ func AddServices(olist []*Service, nlist []*Service) []*Service {
|
||||
}
|
||||
}
|
||||
if !seen {
|
||||
srv = append(srv, CopyServices([]*Service{n})...)
|
||||
srv = append(srv, Copy([]*Service{n})...)
|
||||
}
|
||||
}
|
||||
return srv
|
||||
}
|
||||
|
||||
func delServiceNodes(old, del []*Node) []*Node {
|
||||
var nodes []*Node
|
||||
for _, o := range old {
|
||||
var rem bool
|
||||
for _, n := range del {
|
||||
if o.Id == n.Id {
|
||||
rem = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !rem {
|
||||
nodes = append(nodes, o)
|
||||
}
|
||||
}
|
||||
return nodes
|
||||
}
|
||||
|
||||
func DelServices(old, del []*Service) []*Service {
|
||||
// Remove removes services and returns a new copy
|
||||
func Remove(old, del []*Service) []*Service {
|
||||
var services []*Service
|
||||
|
||||
for _, o := range old {
|
||||
@@ -124,7 +127,7 @@ func DelServices(old, del []*Service) []*Service {
|
||||
|
||||
for _, s := range del {
|
||||
if srv.Version == s.Version {
|
||||
srv.Nodes = delServiceNodes(srv.Nodes, s.Nodes)
|
||||
srv.Nodes = delNodes(srv.Nodes, s.Nodes)
|
||||
|
||||
if len(srv.Nodes) == 0 {
|
||||
rem = true
|
||||
|
||||
Reference in New Issue
Block a user