From f3124766f0f6dadeaa39738d68d37c104d8208be Mon Sep 17 00:00:00 2001 From: Raushan Kumar Date: Fri, 17 Jul 2026 21:21:44 +0530 Subject: [PATCH] release: avoid rebuilding kind order map during sorting Signed-off-by: Raushan Kumar --- internal/release/v2/util/kind_sorter.go | 35 ++++++++++++++++++++----- pkg/release/v1/util/kind_sorter.go | 34 +++++++++++++++++++----- 2 files changed, 55 insertions(+), 14 deletions(-) diff --git a/internal/release/v2/util/kind_sorter.go b/internal/release/v2/util/kind_sorter.go index dba35b6d2..080b8c6f0 100644 --- a/internal/release/v2/util/kind_sorter.go +++ b/internal/release/v2/util/kind_sorter.go @@ -117,9 +117,26 @@ var UninstallOrder KindSortOrder = []string{ // sort manifests by kind. // // Results are sorted by 'ordering', keeping order of items with equal kind/priority + +func buildKindOrderMap(o KindSortOrder) map[string]int { + ordering := make(map[string]int, len(o)) + for i, kind := range o { + ordering[kind] = i + } + return ordering +} + func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifest { + orderMap := buildKindOrderMap(ordering) + sort.SliceStable(manifests, func(i, j int) bool { - return lessByKind(manifests[i], manifests[j], manifests[i].Head.Kind, manifests[j].Head.Kind, ordering) + return lessByKind( + manifests[i], + manifests[j], + manifests[i].Head.Kind, + manifests[j].Head.Kind, + orderMap, + ) }) return manifests @@ -129,19 +146,23 @@ func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifes // // Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.Hook { + orderMap := buildKindOrderMap(ordering) + h := hooks sort.SliceStable(h, func(i, j int) bool { - return lessByKind(h[i], h[j], h[i].Kind, h[j].Kind, ordering) + return lessByKind( + h[i], + h[j], + h[i].Kind, + h[j].Kind, + orderMap, + ) }) return h } -func lessByKind(_ any, _ any, kindA string, kindB string, o KindSortOrder) bool { - ordering := make(map[string]int, len(o)) - for v, k := range o { - ordering[k] = v - } +func lessByKind(_ any, _ any, kindA string, kindB string, ordering map[string]int) bool { first, aok := ordering[kindA] second, bok := ordering[kindB] diff --git a/pkg/release/v1/util/kind_sorter.go b/pkg/release/v1/util/kind_sorter.go index 01f1f801e..f6b1e0962 100644 --- a/pkg/release/v1/util/kind_sorter.go +++ b/pkg/release/v1/util/kind_sorter.go @@ -114,12 +114,28 @@ var UninstallOrder KindSortOrder = []string{ "PriorityClass", } +func buildKindOrderMap(o KindSortOrder) map[string]int { + ordering := make(map[string]int, len(o)) + for i, kind := range o { + ordering[kind] = i + } + return ordering +} + // sort manifests by kind. // // Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifest { + orderMap := buildKindOrderMap(ordering) + sort.SliceStable(manifests, func(i, j int) bool { - return lessByKind(manifests[i], manifests[j], manifests[i].Head.Kind, manifests[j].Head.Kind, ordering) + return lessByKind( + manifests[i], + manifests[j], + manifests[i].Head.Kind, + manifests[j].Head.Kind, + orderMap, + ) }) return manifests @@ -129,19 +145,23 @@ func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifes // // Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.Hook { + orderMap := buildKindOrderMap(ordering) + h := hooks sort.SliceStable(h, func(i, j int) bool { - return lessByKind(h[i], h[j], h[i].Kind, h[j].Kind, ordering) + return lessByKind( + h[i], + h[j], + h[i].Kind, + h[j].Kind, + orderMap, + ) }) return h } -func lessByKind(_ any, _ any, kindA string, kindB string, o KindSortOrder) bool { - ordering := make(map[string]int, len(o)) - for v, k := range o { - ordering[k] = v - } +func lessByKind(_ any, _ any, kindA string, kindB string, ordering map[string]int) bool { first, aok := ordering[kindA] second, bok := ordering[kindB]