From 18107ce07fa018a31936624088bc0bf37fdd432c Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sat, 23 Feb 2019 08:45:42 +0100 Subject: syz-ci: make some manager creation errors non-fatal If only part of the managers failed to initialize we still can continue running the rest. --- syz-ci/manager.go | 8 ++++---- syz-ci/syz-ci.go | 14 +++++++++++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/syz-ci/manager.go b/syz-ci/manager.go index 4867216ca..ef2dc9dcf 100644 --- a/syz-ci/manager.go +++ b/syz-ci/manager.go @@ -78,7 +78,7 @@ type Manager struct { stop chan struct{} } -func createManager(cfg *Config, mgrcfg *ManagerConfig, stop chan struct{}) *Manager { +func createManager(cfg *Config, mgrcfg *ManagerConfig, stop chan struct{}) (*Manager, error) { dir := osutil.Abs(filepath.Join("managers", mgrcfg.Name)) if err := osutil.MkdirAll(dir); err != nil { log.Fatal(err) @@ -95,12 +95,12 @@ func createManager(cfg *Config, mgrcfg *ManagerConfig, stop chan struct{}) *Mana // Assume compiler and config don't change underneath us. compilerID, err := build.CompilerIdentity(mgrcfg.Compiler) if err != nil { - log.Fatal(err) + return nil, err } var configData []byte if mgrcfg.KernelConfig != "" { if configData, err = ioutil.ReadFile(mgrcfg.KernelConfig); err != nil { - log.Fatal(err) + return nil, err } } syzkallerCommit, _ := readTag(filepath.FromSlash("syzkaller/current/tag")) @@ -131,7 +131,7 @@ func createManager(cfg *Config, mgrcfg *ManagerConfig, stop chan struct{}) *Mana stop: stop, } os.RemoveAll(mgr.currentDir) - return mgr + return mgr, nil } // Gates kernel builds. diff --git a/syz-ci/syz-ci.go b/syz-ci/syz-ci.go index 2c10fc992..38d74d42d 100644 --- a/syz-ci/syz-ci.go +++ b/syz-ci/syz-ci.go @@ -154,9 +154,17 @@ func main() { wg.Done() }() - managers := make([]*Manager, len(cfg.Managers)) - for i, mgrcfg := range cfg.Managers { - managers[i] = createManager(cfg, mgrcfg, stop) + var managers []*Manager + for _, mgrcfg := range cfg.Managers { + mgr, err := createManager(cfg, mgrcfg, stop) + if err != nil { + log.Logf(0, "failed to create manager %v: %v", mgrcfg.Name, err) + continue + } + managers = append(managers, mgr) + } + if len(managers) == 0 { + log.Fatalf("failed to create all managers") } for _, mgr := range managers { mgr := mgr -- cgit mrf-deployment