discovery: speedup cache miss by a two digit factor

pull/564/head
Dr. Stefan Schimanski 2019-02-05 13:17:47 +01:00
parent 618050e35d
commit 2cdddd8d4e
1 changed files with 13 additions and 14 deletions

View File

@ -145,27 +145,26 @@ func NewDiscoveryRESTMapper(groupResources []*APIGroupResources) meta.RESTMapper
// GetAPIGroupResources uses the provided discovery client to gather
// discovery information and populate a slice of APIGroupResources.
func GetAPIGroupResources(cl discovery.DiscoveryInterface) ([]*APIGroupResources, error) {
apiGroups, err := cl.ServerGroups()
if err != nil {
if apiGroups == nil || len(apiGroups.Groups) == 0 {
return nil, err
}
gs, rs, err := cl.ServerGroupsAndResources()
if rs == nil || gs == nil {
return nil, err
// TODO track the errors and update callers to handle partial errors.
}
rsm := map[string]*metav1.APIResourceList{}
for _, r := range rs {
rsm[r.GroupVersion] = r
}
var result []*APIGroupResources
for _, group := range apiGroups.Groups {
for _, group := range gs {
groupResources := &APIGroupResources{
Group: group,
Group: *group,
VersionedResources: make(map[string][]metav1.APIResource),
}
for _, version := range group.Versions {
resources, err := cl.ServerResourcesForGroupVersion(version.GroupVersion)
if err != nil {
// continue as best we can
// TODO track the errors and update callers to handle partial errors.
if resources == nil || len(resources.APIResources) == 0 {
continue
}
resources, ok := rsm[version.GroupVersion]
if !ok {
continue
}
groupResources.VersionedResources[version.Version] = resources.APIResources
}