From 1e34d2b4647b2d8c40440fb92a940375b8c4e1a4 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Fri, 6 Mar 2020 08:47:03 -0700 Subject: [PATCH] Remove n^2 algorithm. At 5000+ nodes plus this gets to be a real problem --- cluster/validation.go | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/cluster/validation.go b/cluster/validation.go index a9a5d503..4d61adcf 100644 --- a/cluster/validation.go +++ b/cluster/validation.go @@ -198,18 +198,17 @@ func ValidateHostCount(c *Cluster) error { } func validateDuplicateNodes(c *Cluster) error { + addresses := make(map[string]struct{}, len(c.Nodes)) + hostnames := make(map[string]struct{}, len(c.Nodes)) for i := range c.Nodes { - for j := range c.Nodes { - if i == j { - continue - } - if c.Nodes[i].Address == c.Nodes[j].Address { - return fmt.Errorf("Cluster can't have duplicate node: %s", c.Nodes[i].Address) - } - if c.Nodes[i].HostnameOverride == c.Nodes[j].HostnameOverride { - return fmt.Errorf("Cluster can't have duplicate node: %s", c.Nodes[i].HostnameOverride) - } + if _, ok := addresses[c.Nodes[i].Address]; ok { + return fmt.Errorf("Cluster can't have duplicate node: %s", c.Nodes[i].Address) } + addresses[c.Nodes[i].Address] = struct{}{} + if _, ok := hostnames[c.Nodes[i].HostnameOverride]; ok { + return fmt.Errorf("Cluster can't have duplicate node: %s", c.Nodes[i].HostnameOverride) + } + hostnames[c.Nodes[i].HostnameOverride] = struct{}{} } return nil }