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

Refresh discovery server resources for memCacheClient in parallel
This commit is contained in:
Kubernetes Prow Robot 2020-02-22 00:08:47 -08:00 committed by GitHub
commit 62b0bbc1c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 25 deletions

View File

@ -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

View File

@ -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": {