From b61d7027af6b94d8363cd9440e7c5e7d765b4395 Mon Sep 17 00:00:00 2001 From: Mike Lang Date: Mon, 20 Mar 2017 10:48:08 -0700 Subject: [PATCH] Fix various sources of mutation instead of copying in k8s filter merging code This was causing a large number of repeated appending of the same option group --- app/api_topologies.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/api_topologies.go b/app/api_topologies.go index faa3160aa..41eb0e746 100644 --- a/app/api_topologies.go +++ b/app/api_topologies.go @@ -81,6 +81,7 @@ func updateFilters(rpt report.Report, topologies []APITopologyDesc) []APITopolog } sort.Strings(ns) if len(ns) > 0 { // We only want to apply k8s filters when we have k8s-related nodes + topologies = append([]APITopologyDesc{}, topologies...) // Make a copy so we can make changes safely for i, t := range topologies { if t.id == containersID || t.id == containersByImageID || t.id == containersByHostnameID || t.id == podsID || t.id == servicesID || t.id == deploymentsID || t.id == replicaSetsID { topologies[i] = mergeTopologyFilters(t, []APITopologyOptionGroup{ @@ -94,10 +95,12 @@ func updateFilters(rpt report.Report, topologies []APITopologyDesc) []APITopolog // mergeTopologyFilters recursively merges in new options on a topology description func mergeTopologyFilters(t APITopologyDesc, options []APITopologyOptionGroup) APITopologyDesc { - t.Options = append(t.Options, options...) + t.Options = append(append([]APITopologyOptionGroup{}, t.Options...), options...) + newSubTopologies := make([]APITopologyDesc, len(t.SubTopologies)) for i, sub := range t.SubTopologies { - t.SubTopologies[i] = mergeTopologyFilters(sub, options) + newSubTopologies[i] = mergeTopologyFilters(sub, options) } + t.SubTopologies = newSubTopologies return t }