From 9f1a62783a3be15b596866b0ed029fa5f7b9e0c6 Mon Sep 17 00:00:00 2001 From: Charlie Getzen Date: Mon, 22 Apr 2019 09:54:10 -0700 Subject: [PATCH] batch perform function by resource kind (Deployment, Pod, etc) Signed-off-by: Charlie Getzen --- pkg/kube/client.go | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/pkg/kube/client.go b/pkg/kube/client.go index 9f94ea9cd..db8596c98 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -551,11 +551,7 @@ func perform(infos Result, fn ResourceActorFunc) error { } errs := make(chan error) - for _, info := range infos { - go func(i *resource.Info) { - errs <- fn(i) - }(info) - } + go batchPerform(infos, fn, errs) for range infos { err := <-errs @@ -566,6 +562,28 @@ func perform(infos Result, fn ResourceActorFunc) error { return nil } +func batchPerform(infos Result, fn ResourceActorFunc, errs chan<- error) { + finished := make(chan bool, 10000) + kind := infos[0].Object.GetObjectKind().GroupVersionKind().Kind + counter := 0 + for _, info := range infos { + currentKind := info.Object.GetObjectKind().GroupVersionKind().Kind + if kind != currentKind { + // Wait until the previous kind has finished + for i := 0; i < counter; i++ { + <-finished + } + counter = 0 + kind = currentKind + } + counter = counter + 1 + go func(i *resource.Info) { + errs <- fn(i) + finished <- true + }(info) + } +} + func createResource(info *resource.Info) error { obj, err := resource.NewHelper(info.Client, info.Mapping).Create(info.Namespace, true, info.Object, nil) if err != nil {