mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-14 18:09:59 +00:00
Don't copy nodes in Reduce merge
Since we know the object is not accessible anywhere else in the program, we can use an 'unsafe' destructive merge.
This commit is contained in:
@@ -23,11 +23,9 @@ type Nodes struct {
|
||||
}
|
||||
|
||||
// Merge merges the results of Rendering
|
||||
func (r Nodes) Merge(o Nodes) Nodes {
|
||||
return Nodes{
|
||||
Nodes: r.Nodes.Merge(o.Nodes),
|
||||
Filtered: r.Filtered + o.Filtered,
|
||||
}
|
||||
func (r *Nodes) UnsafeMerge(o Nodes) {
|
||||
r.Nodes = r.Nodes.UnsafeMerge(o.Nodes)
|
||||
r.Filtered = r.Filtered + o.Filtered
|
||||
}
|
||||
|
||||
// Transformer is something that transforms one set of Nodes to
|
||||
@@ -78,7 +76,8 @@ func (r Reduce) Render(rpt report.Report) Nodes {
|
||||
for ; l > 1; l-- {
|
||||
left, right := <-c, <-c
|
||||
go func() {
|
||||
c <- left.Merge(right)
|
||||
left.UnsafeMerge(right)
|
||||
c <- left
|
||||
}()
|
||||
}
|
||||
return <-c
|
||||
|
||||
@@ -196,6 +196,21 @@ func (n Nodes) Merge(other Nodes) Nodes {
|
||||
return cp
|
||||
}
|
||||
|
||||
// UnsafeMerge merges two Nodes objects, altering the larger, and returning the combined set
|
||||
func (n Nodes) UnsafeMerge(other Nodes) Nodes {
|
||||
if len(other) > len(n) {
|
||||
n, other = other, n
|
||||
}
|
||||
for k, v := range other {
|
||||
if existing, ok := n[k]; ok { // don't overwrite
|
||||
n[k] = v.Merge(existing)
|
||||
} else {
|
||||
n[k] = v
|
||||
}
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
// Validate checks the topology for various inconsistencies.
|
||||
func (t Topology) Validate() error {
|
||||
errs := []string{}
|
||||
|
||||
Reference in New Issue
Block a user