probe/kubernetes: Speed up lookups of large lists of cronjobs and jobs

Currently joining the two lists is O(mn), by putting into a hashmap first it's O(m+n)
This commit is contained in:
Mike Lang
2017-07-19 11:31:43 -07:00
parent 316ae2947c
commit fe3bdbfcdc
2 changed files with 9 additions and 9 deletions

View File

@@ -11,6 +11,7 @@ import (
log "github.com/Sirupsen/logrus"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/kubernetes"
apiv1 "k8s.io/client-go/pkg/api/v1"
apiappsv1beta1 "k8s.io/client-go/pkg/apis/apps/v1beta1"
@@ -301,10 +302,11 @@ func (c *client) WalkCronJobs(f func(CronJob) error) error {
if c.cronJobStore == nil {
return nil
}
jobs := []*apibatchv1.Job{}
// We index jobs by id to make lookup for each cronjob more efficient
jobs := map[types.UID]*apibatchv1.Job{}
for _, m := range c.jobStore.List() {
j := m.(*apibatchv1.Job)
jobs = append(jobs, j)
jobs[j.UID] = j
}
for _, m := range c.cronJobStore.List() {
cj := m.(*apibatchv2alpha1.CronJob)

View File

@@ -6,6 +6,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/types"
batchv1 "k8s.io/client-go/pkg/apis/batch/v1"
batchv2alpha1 "k8s.io/client-go/pkg/apis/batch/v2alpha1"
@@ -35,14 +36,11 @@ type cronJob struct {
// NewCronJob creates a new cron job. jobs should be all jobs, which will be filtered
// for those matching this cron job.
func NewCronJob(cj *batchv2alpha1.CronJob, jobs []*batchv1.Job) CronJob {
func NewCronJob(cj *batchv2alpha1.CronJob, jobs map[types.UID]*batchv1.Job) CronJob {
myJobs := []*batchv1.Job{}
for _, j := range jobs {
for _, o := range cj.Status.Active {
if j.UID == o.UID {
myJobs = append(myJobs, j)
break
}
for _, o := range cj.Status.Active {
if j, ok := jobs[o.UID]; ok {
myJobs = append(myJobs, j)
}
}
return &cronJob{