diff options
| -rw-r--r-- | syz-ci/manager.go | 11 | ||||
| -rw-r--r-- | syz-ci/syz-ci.go | 11 |
2 files changed, 20 insertions, 2 deletions
diff --git a/syz-ci/manager.go b/syz-ci/manager.go index dfa6940b5..c19c4cb52 100644 --- a/syz-ci/manager.go +++ b/syz-ci/manager.go @@ -88,6 +88,7 @@ type Manager struct { stop chan struct{} debug bool lastBuild *dashapi.Build + buildFailed bool } type ManagerDashapi interface { @@ -241,6 +242,7 @@ loop: func (mgr *Manager) pollAndBuild(lastCommit string, latestInfo *BuildInfo) ( string, *BuildInfo, time.Duration) { + var success bool rebuildAfter := buildRetryPeriod commit, err := mgr.repo.Poll(mgr.mgrcfg.Repo, mgr.mgrcfg.Branch) if err != nil { @@ -263,6 +265,8 @@ func (mgr *Manager) pollAndBuild(lastCommit string, latestInfo *BuildInfo) ( latestInfo = mgr.checkLatest() if latestInfo == nil { mgr.Errorf("failed to read build info after build") + } else { + success = true } } buildSem.Signal() @@ -270,6 +274,7 @@ func (mgr *Manager) pollAndBuild(lastCommit string, latestInfo *BuildInfo) ( } } } + mgr.buildFailed = !success return lastCommit, latestInfo, rebuildAfter } @@ -410,6 +415,12 @@ func (mgr *Manager) restartManager() { mgr.Errorf("failed to upload build: %v", err) return } + daysSinceCommit := time.Since(info.KernelCommitDate).Hours() / 24 + if mgr.buildFailed && daysSinceCommit > float64(mgr.mgrcfg.MaxKernelLagDays) { + mgr.Errorf("the kernel is now too old (%.1f days since last commit), fuzzing is stopped", + daysSinceCommit) + return + } cfgFile, err := mgr.writeConfig(buildTag) if err != nil { mgr.Errorf("failed to create manager config: %v", err) diff --git a/syz-ci/syz-ci.go b/syz-ci/syz-ci.go index 138bf2104..ae6ff0f87 100644 --- a/syz-ci/syz-ci.go +++ b/syz-ci/syz-ci.go @@ -199,9 +199,13 @@ type ManagerConfig struct { Jobs ManagerJobs `json:"jobs"` // Extra commits to cherry pick to older kernel revisions. BisectBackports []vcs.BackportCommit `json:"bisect_backports"` - + // Base syz-manager config for the instance. ManagerConfig json.RawMessage `json:"manager_config"` - managercfg *mgrconfig.Config + // If the kernel's commit is older than MaxKernelLagDays days, + // fuzzing won't be started on this instance. + // By default it's 30 days. + MaxKernelLagDays int + managercfg *mgrconfig.Config } type ManagerJobs struct { @@ -444,6 +448,9 @@ func loadManagerConfig(cfg *Config, mgr *ManagerConfig) error { if mgr.KernelConfig != "" && mgr.KernelBaselineConfig == "" { mgr.KernelBaselineConfig = inferBaselineConfig(mgr.KernelConfig) } + if mgr.MaxKernelLagDays == 0 { + mgr.MaxKernelLagDays = 30 + } if err := mgr.validate(cfg); err != nil { return err } |
