Add topology.ReplaceNode() for efficiency (#3073)

* Add topology.ReplaceNode() for efficiency

In some places AddNode() was called after adding to an existing node,
in which case the Merge() is just a waste of time.
This commit is contained in:
Bryan Boreham
2018-02-19 10:13:31 +00:00
committed by GitHub
parent 474298c39c
commit f72ced3380
3 changed files with 9 additions and 2 deletions

View File

@@ -33,7 +33,7 @@ func (t Tagger) Tag(r report.Report) (report.Report, error) {
// and as such do their own host tagging.
for _, topology := range []report.Topology{r.Process, r.Container, r.ContainerImage, r.Host, r.Pod} {
for _, node := range topology.Nodes {
topology.AddNode(node.WithLatests(metadata).WithParents(parents))
topology.ReplaceNode(node.WithLatests(metadata).WithParents(parents))
}
}
return r, nil

View File

@@ -18,7 +18,7 @@ func (topologyTagger) Name() string { return "Topology" }
func (topologyTagger) Tag(r report.Report) (report.Report, error) {
r.WalkNamedTopologies(func(name string, t *report.Topology) {
for _, node := range t.Nodes {
t.AddNode(node.WithTopology(name))
t.ReplaceNode(node.WithTopology(name))
}
})
return r, nil

View File

@@ -111,6 +111,13 @@ func (t Topology) AddNode(node Node) {
t.Nodes[node.ID] = node
}
// ReplaceNode adds node to the topology under key nodeID; if a
// node already exists for this key, node replaces that node.
// Like AddNode, it mutates the Topology
func (t Topology) ReplaceNode(node Node) {
t.Nodes[node.ID] = node
}
// GetShape returns the current topology shape, or the default if there isn't one.
func (t Topology) GetShape() string {
if t.Shape == "" {