diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index b5d52e9e..3a20c2fb 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -348,7 +348,7 @@ }, { "ImportPath": "k8s.io/api", - "Rev": "026463abc787" + "Rev": "2db522d7d8a2" }, { "ImportPath": "k8s.io/apimachinery", diff --git a/discovery/cached/memory/memcache.go b/discovery/cached/memory/memcache.go index 31e42156..82a7cc47 100644 --- a/discovery/cached/memory/memcache.go +++ b/discovery/cached/memory/memcache.go @@ -190,16 +190,29 @@ func (d *memCacheClient) refreshLocked() error { return err } + wg := &sync.WaitGroup{} + resultLock := &sync.Mutex{} rl := map[string]*cacheEntry{} for _, g := range gl.Groups { for _, v := range g.Versions { - r, err := d.serverResourcesForGroupVersion(v.GroupVersion) - rl[v.GroupVersion] = &cacheEntry{r, err} - if err != nil { - utilruntime.HandleError(fmt.Errorf("couldn't get resource list for %v: %v", v.GroupVersion, err)) - } + gv := v.GroupVersion + wg.Add(1) + go func() { + defer wg.Done() + defer utilruntime.HandleCrash() + + r, err := d.serverResourcesForGroupVersion(gv) + if err != nil { + utilruntime.HandleError(fmt.Errorf("couldn't get resource list for %v: %v", gv, err)) + } + + resultLock.Lock() + defer resultLock.Unlock() + rl[gv] = &cacheEntry{r, err} + }() } } + wg.Wait() d.groupToServerResources, d.groupList = rl, gl d.cacheValid = true diff --git a/discovery/cached/memory/memcache_test.go b/discovery/cached/memory/memcache_test.go index 3a9d60da..f8c2900c 100644 --- a/discovery/cached/memory/memcache_test.go +++ b/discovery/cached/memory/memcache_test.go @@ -205,16 +205,22 @@ func TestServerGroupsFails(t *testing.T) { func TestPartialPermanentFailure(t *testing.T) { fake := &fakeDiscovery{ groupList: &metav1.APIGroupList{ - Groups: []metav1.APIGroup{{ - Name: "astronomy", - Versions: []metav1.GroupVersionForDiscovery{{ - GroupVersion: "astronomy/v8beta1", - Version: "v8beta1", - }, { - GroupVersion: "astronomy2/v8beta1", - Version: "v8beta1", - }}, - }}, + Groups: []metav1.APIGroup{ + { + Name: "astronomy", + Versions: []metav1.GroupVersionForDiscovery{{ + GroupVersion: "astronomy/v8beta1", + Version: "v8beta1", + }}, + }, + { + Name: "astronomy2", + Versions: []metav1.GroupVersionForDiscovery{{ + GroupVersion: "astronomy2/v8beta1", + Version: "v8beta1", + }}, + }, + }, }, resourceMap: map[string]*resourceMapEntry{ "astronomy/v8beta1": { @@ -286,16 +292,22 @@ func TestPartialPermanentFailure(t *testing.T) { func TestPartialRetryableFailure(t *testing.T) { fake := &fakeDiscovery{ groupList: &metav1.APIGroupList{ - Groups: []metav1.APIGroup{{ - Name: "astronomy", - Versions: []metav1.GroupVersionForDiscovery{{ - GroupVersion: "astronomy/v8beta1", - Version: "v8beta1", - }, { - GroupVersion: "astronomy2/v8beta1", - Version: "v8beta1", - }}, - }}, + Groups: []metav1.APIGroup{ + { + Name: "astronomy", + Versions: []metav1.GroupVersionForDiscovery{{ + GroupVersion: "astronomy/v8beta1", + Version: "v8beta1", + }}, + }, + { + Name: "astronomy2", + Versions: []metav1.GroupVersionForDiscovery{{ + GroupVersion: "astronomy2/v8beta1", + Version: "v8beta1", + }}, + }, + }, }, resourceMap: map[string]*resourceMapEntry{ "astronomy/v8beta1": { diff --git a/go.mod b/go.mod index 8d16aee7..6d12f8c2 100644 --- a/go.mod +++ b/go.mod @@ -28,7 +28,7 @@ require ( golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 google.golang.org/appengine v1.5.0 // indirect - k8s.io/api v0.0.0-20200214081624-026463abc787 + k8s.io/api v0.0.0-20200221201225-2db522d7d8a2 k8s.io/apimachinery v0.0.0-20200214081019-2373d029717c k8s.io/klog v1.0.0 k8s.io/utils v0.0.0-20200117235808-5f6fbceb4c31 @@ -38,6 +38,6 @@ require ( replace ( golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13 golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13 - k8s.io/api => k8s.io/api v0.0.0-20200214081624-026463abc787 + k8s.io/api => k8s.io/api v0.0.0-20200221201225-2db522d7d8a2 k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20200214081019-2373d029717c ) diff --git a/go.sum b/go.sum index ac973e01..5613a569 100644 --- a/go.sum +++ b/go.sum @@ -182,7 +182,7 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.0.0-20200214081624-026463abc787/go.mod h1:brPp6rLV9ZWi2IgXmvCsY7TKw2l27eF4rfCHlyW88ys= +k8s.io/api v0.0.0-20200221201225-2db522d7d8a2/go.mod h1:brPp6rLV9ZWi2IgXmvCsY7TKw2l27eF4rfCHlyW88ys= k8s.io/apimachinery v0.0.0-20200214081019-2373d029717c/go.mod h1:5X8oEhnd931nEg6/Nkumo00nT6ZsCLp2h7Xwd7Ym6P4= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=