mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-03 02:00:43 +00:00
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:
@@ -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)
|
||||
|
||||
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user