Ctrl K
ComunidadGuías…

pkg/ownership/cachesource/manager_bench_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package cachesource

import (
	"fmt"
	"runtime"
	"testing"

	"github.com/skyhook-io/radar/pkg/ownership"
	"github.com/skyhook-io/radar/pkg/ownership/ownershiptest"
	"github.com/skyhook-io/radar/pkg/resourceid"
)

func BenchmarkAgentOwnershipBatch(b *testing.B) {
	for _, scenario := range []string{"omitted-claims", "listed-members", "unreadable-managers", "shared-controller", "many-namespaces"} {
		b.Run(scenario, func(b *testing.B) {
			world := ownershiptest.NewBuilder()
			var rows, members []resourceid.Ref
			deployment := world.Add("apps", "Deployment", "shop", "web")
			for i := range 5000 {
				name := fmt.Sprint("row-", i)
				switch scenario {
				case "shared-controller", "many-namespaces":
					if scenario == "many-namespaces" {
						deployment = world.Add("apps", "Deployment", fmt.Sprint("ns-", i%100), name)
					}
					rows = append(rows, world.Add("", "Pod", deployment.Ref.Namespace, name, deployment.OwnerRef(true)).Ref)
				default:
					row := world.Add("", "ConfigMap", "shop", name)
					if scenario == "omitted-claims" {
						world.Meta(row, nil, map[string]string{"argocd.argoproj.io/tracking-id": "argocd_app:/ConfigMap:shop/" + name})
						members = append(members, world.Add("", "ConfigMap", "shop", "listed-"+name).Ref)
					}
					rows = append(rows, row.Ref)
					if scenario == "listed-members" {
						members = append(members, row.Ref)
					}
				}
			}
			if scenario == "omitted-claims" || scenario == "listed-members" {
				world.Manager(ownership.ArgoApplication, "argocd", "app", ownership.MembersRecorded, "shop", members...)
			}
			if scenario == "unreadable-managers" {
				for i := range 100 {
					world.Manager(ownership.ArgoApplication, "argocd", fmt.Sprint("app-", i), ownership.MembersUnreadable, "shop")
				}
			}
			cache := render(b, world.World())
			b.ReportAllocs()
			b.ResetTimer()
			for range b.N {
				b.StopTimer()
				runtime.GC()
				var before, after runtime.MemStats
				runtime.ReadMemStats(&before)
				b.StartTimer()
				session := begin(b, cache.source())
				view := ownership.NewView(session, ownership.Unrestricted())
				for _, row := range rows {
					if scenario == "shared-controller" || scenario == "many-namespaces" {
						view.ControllerChain(row)
					} else {
						view.Manager(row)
					}
				}
				b.StopTimer()
				runtime.GC()
				runtime.ReadMemStats(&after)
				runtime.KeepAlive(view)
				if after.HeapAlloc > before.HeapAlloc {
					b.ReportMetric(float64(after.HeapAlloc-before.HeapAlloc), "retained_B")
				}
				b.StartTimer()
				if err := session.ValidateCaches(); err != nil {
					b.Fatal(err)
				}
			}
		})
	}
}