From 02928a4d0d923f89ac648b7d67c0f17a74d076c0 Mon Sep 17 00:00:00 2001 From: Giovanni Harting <539@idlegandalf.com> Date: Mon, 7 Feb 2022 15:55:33 +0100 Subject: [PATCH] fixed packages being removed while db was down; better error handling --- main.go | 12 ++++-------- utils.go | 27 +++++++++++++-------------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/main.go b/main.go index d864e6d..97ee7bc 100644 --- a/main.go +++ b/main.go @@ -707,14 +707,10 @@ func (b *BuildManager) syncWorker() { ), ).Only(context.Background()) - if dbErr != nil { - switch dbErr.(type) { - case *ent.NotFoundError: - log.Debugf("[%s/%s] Package not found in database", mPkgbuild.Repo(), mPkgbuild.PkgBase()) - break - default: - log.Errorf("[%s/%s] Problem querying db for package: %v", mPkgbuild.Repo(), mPkgbuild.PkgBase(), dbErr) - } + if ent.IsNotFound(dbErr) { + log.Debugf("[%s/%s] Package not found in database", mPkgbuild.Repo(), mPkgbuild.PkgBase()) + } else if err != nil { + log.Errorf("[%s/%s] Problem querying db for package: %v", mPkgbuild.Repo(), mPkgbuild.PkgBase(), dbErr) } // compare b3sum of PKGBUILD file to hash in database, only proceed if hash differs diff --git a/utils.go b/utils.go index 5a498bd..bf8214f 100644 --- a/utils.go +++ b/utils.go @@ -244,7 +244,7 @@ func (p *BuildPackage) setupBuildDir() (string, error) { err := cleanBuildDir(buildDir) if err != nil { - return "", fmt.Errorf("removing old builddir failed: %v", err) + return "", fmt.Errorf("removing old builddir failed: %w", err) } err = os.MkdirAll(buildDir, 0755) @@ -286,7 +286,7 @@ func (p *BuildPackage) increasePkgRel(buildNo int) error { if p.Srcinfo == nil { err := p.genSrcinfo() if err != nil { - return fmt.Errorf("error generating srcinfo: %v", err) + return fmt.Errorf("error generating srcinfo: %w", err) } } @@ -699,7 +699,7 @@ func (p *BuildPackage) genSrcinfo() error { cmd := exec.Command("sh", "-c", "cd "+filepath.Dir(p.Pkgbuild)+"&&"+"makepkg --printsrcinfo -p "+filepath.Base(p.Pkgbuild)) res, err := cmd.CombinedOutput() if err != nil { - return fmt.Errorf("makepkg exit non-zero (PKGBUILD: %s): %v (%s)", p.Pkgbuild, err, string(res)) + return fmt.Errorf("makepkg exit non-zero (PKGBUILD: %s): %w (%s)", p.Pkgbuild, err, string(res)) } info, err := srcinfo.Parse(string(res)) @@ -718,7 +718,7 @@ func setupChroot() error { res, err := cmd.CombinedOutput() log.Debug(string(res)) if err != nil { - return fmt.Errorf("Unable to update chroot: %v\n%s", err, string(res)) + return fmt.Errorf("Unable to update chroot: %w\n%s", err, string(res)) } } else if os.IsNotExist(err) { err := os.MkdirAll(filepath.Join(conf.Basedir.Work, chrootDir), 0755) @@ -728,7 +728,7 @@ func setupChroot() error { res, err := cmd.CombinedOutput() log.Debug(string(res)) if err != nil { - return fmt.Errorf("Unable to create chroot: %v\n%s", err, string(res)) + return fmt.Errorf("Unable to create chroot: %w\n%s", err, string(res)) } } else { return err @@ -749,14 +749,11 @@ func (path *Package) DBPackageIsolated(march string, repo dbpackage.Repository) sql.EQ(dbpackage.FieldRepository, repo)), ) }).Only(context.Background()) - if err != nil { - switch err.(type) { - case *ent.NotFoundError: - log.Debugf("Not found in database: %s", path.Name()) - return nil, fmt.Errorf("package not found in DB: %s", path.Name()) - default: - return nil, err - } + if ent.IsNotFound(err) { + log.Debugf("Not found in database: %s", path.Name()) + return nil, err + } else if err != nil { + return nil, err } return dbPkg, nil } @@ -788,7 +785,7 @@ func housekeeping(repo string, wg *sync.WaitGroup) error { mPackage := Package(path) dbPkg, err := mPackage.DBPackage() - if err != nil { + if ent.IsNotFound(err) { log.Infof("[HK/%s] removing orphan %s", repo, filepath.Base(path)) pkg := &BuildPackage{ FullRepo: mPackage.FullRepo(), @@ -797,6 +794,8 @@ func housekeeping(repo string, wg *sync.WaitGroup) error { } buildManager.repoPurge[pkg.FullRepo] <- []*BuildPackage{pkg} continue + } else if err != nil { + return err } pkg := &BuildPackage{