From 9bc862ec69797beb3c8ac22979c47bda17e80129 Mon Sep 17 00:00:00 2001 From: Ted Yu Date: Fri, 3 Jan 2020 08:05:21 -0800 Subject: [PATCH] Perform dead storage removal linearly --- .../pkg/apiserver/customresource_handler.go | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go index 0c58cf191b3..abb354dee17 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go @@ -526,29 +526,21 @@ func (r *crdHandler) removeDeadStorage() { r.customStorageLock.Lock() defer r.customStorageLock.Unlock() - oldInfos := []*crdInfo{} storageMap := r.customStorage.Load().(crdStorageMap) // Copy because we cannot write to storageMap without a race - // as it is used without locking elsewhere - storageMap2 := storageMap.clone() - for uid, s := range storageMap2 { - found := false - for _, crd := range allCustomResourceDefinitions { - if crd.UID == uid { - found = true - break - } - } - if !found { - klog.V(4).Infof("Removing dead CRD storage for %s/%s", s.spec.Group, s.spec.Names.Kind) - oldInfos = append(oldInfos, s) - delete(storageMap2, uid) + storageMap2 := make(crdStorageMap) + for _, crd := range allCustomResourceDefinitions { + if _, ok := storageMap[crd.UID]; ok { + storageMap2[crd.UID] = storageMap[crd.UID] } } r.customStorage.Store(storageMap2) - for _, s := range oldInfos { - go r.tearDown(s) + for uid, crdInfo := range storageMap { + if _, ok := storageMap2[uid]; !ok { + klog.V(4).Infof("Removing dead CRD storage for %s/%s", crdInfo.spec.Group, crdInfo.spec.Names.Kind) + go r.tearDown(crdInfo) + } } }