aboutsummaryrefslogtreecommitdiffstats
path: root/syz-ci/jobs.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2023-01-13 16:48:03 +0100
committerAleksandr Nogikh <wp32pw@gmail.com>2023-01-19 11:26:54 +0100
commit2cf22faa5bfe68744016881043351d75c8269139 (patch)
tree828b367a245c709507646978b6870267f6999db4 /syz-ci/jobs.go
parentc1c804b7d96215f84085920474ef14af2981bdf1 (diff)
syz-ci: don't start an idle parallel job processor
Check if there are any managers that could benefit from an extra job processor before starting it.
Diffstat (limited to 'syz-ci/jobs.go')
-rw-r--r--syz-ci/jobs.go28
1 files changed, 21 insertions, 7 deletions
diff --git a/syz-ci/jobs.go b/syz-ci/jobs.go
index 04c241ab2..d23974d92 100644
--- a/syz-ci/jobs.go
+++ b/syz-ci/jobs.go
@@ -28,10 +28,11 @@ import (
)
type JobManager struct {
- cfg *Config
- dash *dashapi.Dashboard
- managers []*Manager
- shutdownPending <-chan struct{}
+ cfg *Config
+ dash *dashapi.Dashboard
+ managers []*Manager
+ parallelJobFilter *ManagerJobs
+ shutdownPending <-chan struct{}
}
type JobProcessor struct {
@@ -55,6 +56,8 @@ func newJobManager(cfg *Config, managers []*Manager, shutdownPending chan struct
dash: dash,
managers: managers,
shutdownPending: shutdownPending,
+ // For now let's only parallelize patch testing requests.
+ parallelJobFilter: &ManagerJobs{TestPatches: true},
}, nil
}
@@ -100,8 +103,7 @@ func (jm *JobManager) loop(stop chan struct{}) {
} else {
jp.instanceSuffix = "-job-parallel"
jp.baseDir = osutil.Abs("jobs-2")
- // For now let's only parallelize patch testing requests.
- jp.jobFilter = &ManagerJobs{TestPatches: true}
+ jp.jobFilter = jm.parallelJobFilter
}
jp.name = fmt.Sprintf("%v%v", jm.cfg.Name, jp.instanceSuffix)
wg.Add(1)
@@ -109,13 +111,25 @@ func (jm *JobManager) loop(stop chan struct{}) {
defer wg.Done()
jp.loop(stop)
}()
- if main != jm.cfg.ParallelJobs {
+ if !main || !jm.needParallelProcessor() {
break
}
}
wg.Wait()
}
+func (jm *JobManager) needParallelProcessor() bool {
+ if !jm.cfg.ParallelJobs {
+ return false
+ }
+ for _, mgr := range jm.managers {
+ if mgr.mgrcfg.Jobs.Filter(jm.parallelJobFilter).AnyEnabled() {
+ return true
+ }
+ }
+ return false
+}
+
func (jm *JobManager) resetJobs() error {
managerNames := []string{}
for _, mgr := range jm.managers {