discovery: speedup cache miss by a two digit factor

Kubernetes-commit: 2cdddd8d4ec0c16df9b3667a11dfc07fa7bf49e2
This commit is contained in:
Dr. Stefan Schimanski 2019-02-05 13:17:47 +01:00 committed by Kubernetes Publisher
parent 2cc261d78b
commit 42ebdc32c2

View File

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