Merge pull request #88382 from jpbetz/parallel-mem-client-resource-discovery

Refresh discovery server resources for memCacheClient in parallel

Kubernetes-commit: 62b0bbc1c64f7ca5d3b2a9503158975166af9078
This commit is contained in:
Kubernetes Publisher 2020-02-22 00:08:47 -08:00
commit f772958f8a
5 changed files with 54 additions and 29 deletions

2
Godeps/Godeps.json generated
View File

@ -348,7 +348,7 @@
}, },
{ {
"ImportPath": "k8s.io/api", "ImportPath": "k8s.io/api",
"Rev": "026463abc787" "Rev": "2db522d7d8a2"
}, },
{ {
"ImportPath": "k8s.io/apimachinery", "ImportPath": "k8s.io/apimachinery",

View File

@ -190,16 +190,29 @@ func (d *memCacheClient) refreshLocked() error {
return err return err
} }
wg := &sync.WaitGroup{}
resultLock := &sync.Mutex{}
rl := map[string]*cacheEntry{} rl := map[string]*cacheEntry{}
for _, g := range gl.Groups { for _, g := range gl.Groups {
for _, v := range g.Versions { for _, v := range g.Versions {
r, err := d.serverResourcesForGroupVersion(v.GroupVersion) gv := v.GroupVersion
rl[v.GroupVersion] = &cacheEntry{r, err} wg.Add(1)
if err != nil { go func() {
utilruntime.HandleError(fmt.Errorf("couldn't get resource list for %v: %v", v.GroupVersion, err)) 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.groupToServerResources, d.groupList = rl, gl
d.cacheValid = true d.cacheValid = true

View File

@ -205,16 +205,22 @@ func TestServerGroupsFails(t *testing.T) {
func TestPartialPermanentFailure(t *testing.T) { func TestPartialPermanentFailure(t *testing.T) {
fake := &fakeDiscovery{ fake := &fakeDiscovery{
groupList: &metav1.APIGroupList{ groupList: &metav1.APIGroupList{
Groups: []metav1.APIGroup{{ Groups: []metav1.APIGroup{
Name: "astronomy", {
Versions: []metav1.GroupVersionForDiscovery{{ Name: "astronomy",
GroupVersion: "astronomy/v8beta1", Versions: []metav1.GroupVersionForDiscovery{{
Version: "v8beta1", GroupVersion: "astronomy/v8beta1",
}, { Version: "v8beta1",
GroupVersion: "astronomy2/v8beta1", }},
Version: "v8beta1", },
}}, {
}}, Name: "astronomy2",
Versions: []metav1.GroupVersionForDiscovery{{
GroupVersion: "astronomy2/v8beta1",
Version: "v8beta1",
}},
},
},
}, },
resourceMap: map[string]*resourceMapEntry{ resourceMap: map[string]*resourceMapEntry{
"astronomy/v8beta1": { "astronomy/v8beta1": {
@ -286,16 +292,22 @@ func TestPartialPermanentFailure(t *testing.T) {
func TestPartialRetryableFailure(t *testing.T) { func TestPartialRetryableFailure(t *testing.T) {
fake := &fakeDiscovery{ fake := &fakeDiscovery{
groupList: &metav1.APIGroupList{ groupList: &metav1.APIGroupList{
Groups: []metav1.APIGroup{{ Groups: []metav1.APIGroup{
Name: "astronomy", {
Versions: []metav1.GroupVersionForDiscovery{{ Name: "astronomy",
GroupVersion: "astronomy/v8beta1", Versions: []metav1.GroupVersionForDiscovery{{
Version: "v8beta1", GroupVersion: "astronomy/v8beta1",
}, { Version: "v8beta1",
GroupVersion: "astronomy2/v8beta1", }},
Version: "v8beta1", },
}}, {
}}, Name: "astronomy2",
Versions: []metav1.GroupVersionForDiscovery{{
GroupVersion: "astronomy2/v8beta1",
Version: "v8beta1",
}},
},
},
}, },
resourceMap: map[string]*resourceMapEntry{ resourceMap: map[string]*resourceMapEntry{
"astronomy/v8beta1": { "astronomy/v8beta1": {

4
go.mod
View File

@ -28,7 +28,7 @@ require (
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
google.golang.org/appengine v1.5.0 // indirect 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/apimachinery v0.0.0-20200214081019-2373d029717c
k8s.io/klog v1.0.0 k8s.io/klog v1.0.0
k8s.io/utils v0.0.0-20200117235808-5f6fbceb4c31 k8s.io/utils v0.0.0-20200117235808-5f6fbceb4c31
@ -38,6 +38,6 @@ require (
replace ( replace (
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13 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 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 k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20200214081019-2373d029717c
) )

2
go.sum
View File

@ -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= 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-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/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/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/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= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=