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