From 041e7762f7b03a763b09129bef6011ee15d01b83 Mon Sep 17 00:00:00 2001 From: Giovanni Harting <539@idlegandalf.com> Date: Sun, 14 Aug 2022 14:47:20 +0200 Subject: [PATCH] added delayed status to better differentiate between queued (skipped) and queued --- ent/dbpackage/dbpackage.go | 3 ++- ent/migrate/schema.go | 2 +- ent/schema/dbpackage.go | 2 +- main.go | 4 ---- proto_package.go | 14 +++++++------- utils.go | 2 +- 6 files changed, 12 insertions(+), 15 deletions(-) diff --git a/ent/dbpackage/dbpackage.go b/ent/dbpackage/dbpackage.go index edb02e4..fc2d5dd 100644 --- a/ent/dbpackage/dbpackage.go +++ b/ent/dbpackage/dbpackage.go @@ -112,6 +112,7 @@ const ( StatusFailed Status = "failed" StatusBuild Status = "build" StatusQueued Status = "queued" + StatusDelayed Status = "delayed" StatusBuilding Status = "building" StatusLatest Status = "latest" StatusSigning Status = "signing" @@ -125,7 +126,7 @@ func (s Status) String() string { // StatusValidator is a validator for the "status" field enum values. It is called by the builders before save. func StatusValidator(s Status) error { switch s { - case StatusSkipped, StatusFailed, StatusBuild, StatusQueued, StatusBuilding, StatusLatest, StatusSigning, StatusUnknown: + case StatusSkipped, StatusFailed, StatusBuild, StatusQueued, StatusDelayed, StatusBuilding, StatusLatest, StatusSigning, StatusUnknown: return nil default: return fmt.Errorf("dbpackage: invalid enum value for status field: %q", s) diff --git a/ent/migrate/schema.go b/ent/migrate/schema.go index bbd2a51..f06a1ae 100644 --- a/ent/migrate/schema.go +++ b/ent/migrate/schema.go @@ -13,7 +13,7 @@ var ( {Name: "id", Type: field.TypeInt, Increment: true}, {Name: "pkgbase", Type: field.TypeString}, {Name: "packages", Type: field.TypeJSON, Nullable: true}, - {Name: "status", Type: field.TypeEnum, Nullable: true, Enums: []string{"skipped", "failed", "build", "queued", "building", "latest", "signing", "unknown"}, Default: "unknown"}, + {Name: "status", Type: field.TypeEnum, Nullable: true, Enums: []string{"skipped", "failed", "build", "queued", "delayed", "building", "latest", "signing", "unknown"}, Default: "unknown"}, {Name: "skip_reason", Type: field.TypeString, Nullable: true}, {Name: "repository", Type: field.TypeEnum, Enums: []string{"extra", "core", "community"}}, {Name: "march", Type: field.TypeString}, diff --git a/ent/schema/dbpackage.go b/ent/schema/dbpackage.go index ea557b4..ac1be86 100644 --- a/ent/schema/dbpackage.go +++ b/ent/schema/dbpackage.go @@ -15,7 +15,7 @@ func (DbPackage) Fields() []ent.Field { return []ent.Field{ field.String("pkgbase").NotEmpty().Immutable(), field.Strings("packages").Optional(), - field.Enum("status").Values("skipped", "failed", "build", "queued", "building", "latest", "signing", "unknown").Default("unknown").Optional(), + field.Enum("status").Values("skipped", "failed", "build", "queued", "delayed", "building", "latest", "signing", "unknown").Default("unknown").Optional(), field.String("skip_reason").Optional(), field.Enum("repository").Values("extra", "core", "community"), field.String("march").NotEmpty().Immutable(), diff --git a/main.go b/main.go index ad4376e..f212d70 100644 --- a/main.go +++ b/main.go @@ -498,10 +498,6 @@ func (b *BuildManager) syncWorker(ctx context.Context) error { } for _, pkg := range queue { - if pkg.DbPackage.SkipReason != "" { - continue - } - if pkg.Priority() > cutOff && cutOff >= conf.Build.SlowQueueThreshold { slowQueue = append(slowQueue, pkg) } else { diff --git a/proto_package.go b/proto_package.go index 22de341..043be49 100644 --- a/proto_package.go +++ b/proto_package.go @@ -120,20 +120,20 @@ func (p *ProtoPackage) isEligible(ctx context.Context) (bool, error) { if !isLatest { if local != nil { log.Infof("Delayed %s: not all dependencies are up to date (local: %s==%s, sync: %s==%s)", p.Srcinfo.Pkgbase, local.Name(), local.Version(), local.Name(), syncVersion) - p.DbPackage.Update().SetSkipReason(fmt.Sprintf("waiting for %s==%s", local.Name(), syncVersion)).ExecX(ctx) + p.DbPackage.Update().SetStatus(dbpackage.StatusDelayed).SetSkipReason(fmt.Sprintf("waiting for %s==%s", local.Name(), syncVersion)).ExecX(ctx) + // Returning an error here causes the package to be purged. + // Purge delayed packages in case delay is caused by inconsistencies in svn2git. + // Worst case would be clients downloading a package update twice, once from their official mirror, + // and then after build from ALHP. Best case we prevent a not buildable package from staying in the repos + // in an outdated version. if time.Since(local.BuildDate()).Hours() >= 48 && p.DbPackage.RepoVersion != "" { return false, errors.New("overdue package waiting") } } else { log.Infof("Delayed %s: not all dependencies are up to date or resolvable", p.Srcinfo.Pkgbase) - p.DbPackage.Update().SetSkipReason("waiting for mirror").ExecX(ctx) + p.DbPackage.Update().SetStatus(dbpackage.StatusDelayed).SetSkipReason("waiting for mirror").ExecX(ctx) } - - // Purge delayed packages in case delay is caused by inconsistencies in svn2git. - // Worst case would be clients downloading a package update twice, once from their official mirror, - // and then after build from ALHP. Best case we prevent a not buildable package from staying in the repos - // in an outdated version. return false, nil } diff --git a/utils.go b/utils.go index 93ca5c4..d77e6ea 100644 --- a/utils.go +++ b/utils.go @@ -129,7 +129,7 @@ func statusId2string(s dbpackage.Status) string { return conf.Status.Class.Failed case dbpackage.StatusSigning: return conf.Status.Class.Signing - case dbpackage.StatusBuilding: + case dbpackage.StatusBuilding, dbpackage.StatusDelayed: return conf.Status.Class.Building default: return conf.Status.Class.Unknown