From bb1d8fc51c5f21c16bc39346d053da230e0293b1 Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Wed, 17 Aug 2022 23:16:02 +0100 Subject: [PATCH] In PushMirrorsIterate and MirrorsIterate if limit is negative do not set it The documentation allows the mirror update queue to add all potential mirrors to the queue by setting the limits negative. Unfortunately a change to the iterator code has missed this subtly and resulted in passing negative numbers to the LIMIT SQL statement. This causes bugs on some DB systems. Fix #20667 Signed-off-by: Andrew Thornton --- models/repo/mirror.go | 10 ++++++---- models/repo/pushmirror.go | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/models/repo/mirror.go b/models/repo/mirror.go index 8f96e8cee1851..fef8a68682c38 100644 --- a/models/repo/mirror.go +++ b/models/repo/mirror.go @@ -108,12 +108,14 @@ func DeleteMirrorByRepoID(repoID int64) error { // MirrorsIterate iterates all mirror repositories. func MirrorsIterate(limit int, f func(idx int, bean interface{}) error) error { - return db.GetEngine(db.DefaultContext). + sess := db.GetEngine(db.DefaultContext). Where("next_update_unix<=?", time.Now().Unix()). And("next_update_unix!=0"). - OrderBy("updated_unix ASC"). - Limit(limit). - Iterate(new(Mirror), f) + OrderBy("updated_unix ASC") + if limit > 0 { + sess = sess.Limit(limit) + } + return sess.Iterate(new(Mirror), f) } // InsertMirror inserts a mirror to database diff --git a/models/repo/pushmirror.go b/models/repo/pushmirror.go index 02ffcbee76a50..38d6e72019700 100644 --- a/models/repo/pushmirror.go +++ b/models/repo/pushmirror.go @@ -129,10 +129,12 @@ func GetPushMirrorsSyncedOnCommit(repoID int64) ([]*PushMirror, error) { // PushMirrorsIterate iterates all push-mirror repositories. func PushMirrorsIterate(ctx context.Context, limit int, f func(idx int, bean interface{}) error) error { - return db.GetEngine(ctx). + sess := db.GetEngine(ctx). Where("last_update + (`interval` / ?) <= ?", time.Second, time.Now().Unix()). And("`interval` != 0"). - OrderBy("last_update ASC"). - Limit(limit). - Iterate(new(PushMirror), f) + OrderBy("last_update ASC") + if limit > 0 { + sess = sess.Limit(limit) + } + return sess.Iterate(new(PushMirror), f) }