From b75ad7b87f122a1386cb0e576ce83cc000f6d010 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 1 Mar 2022 03:41:06 +0800 Subject: Improve mirror iterator (#18928) * Improve mirror iterator * fix test --- models/repo/mirror.go | 3 ++- models/repo/pushmirror.go | 3 ++- models/repo/pushmirror_test.go | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) (limited to 'models') diff --git a/models/repo/mirror.go b/models/repo/mirror.go index e73226534e..8494331ff7 100644 --- a/models/repo/mirror.go +++ b/models/repo/mirror.go @@ -120,11 +120,12 @@ func DeleteMirrorByRepoID(repoID int64) error { } // MirrorsIterate iterates all mirror repositories. -func MirrorsIterate(f func(idx int, bean interface{}) error) error { +func MirrorsIterate(limit int, f func(idx int, bean interface{}) error) error { return 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) } diff --git a/models/repo/pushmirror.go b/models/repo/pushmirror.go index bf39bb1ac0..b5c6411bd6 100644 --- a/models/repo/pushmirror.go +++ b/models/repo/pushmirror.go @@ -101,10 +101,11 @@ func GetPushMirrorsByRepoID(repoID int64) ([]*PushMirror, error) { } // PushMirrorsIterate iterates all push-mirror repositories. -func PushMirrorsIterate(f func(idx int, bean interface{}) error) error { +func PushMirrorsIterate(limit int, f func(idx int, bean interface{}) error) error { return db.GetEngine(db.DefaultContext). Where("last_update + (`interval` / ?) <= ?", time.Second, time.Now().Unix()). And("`interval` != 0"). OrderBy("last_update ASC"). + Limit(limit). Iterate(new(PushMirror), f) } diff --git a/models/repo/pushmirror_test.go b/models/repo/pushmirror_test.go index eff31fbac2..83cf86131f 100644 --- a/models/repo/pushmirror_test.go +++ b/models/repo/pushmirror_test.go @@ -40,7 +40,7 @@ func TestPushMirrorsIterate(t *testing.T) { time.Sleep(1 * time.Millisecond) - PushMirrorsIterate(func(idx int, bean interface{}) error { + PushMirrorsIterate(1, func(idx int, bean interface{}) error { m, ok := bean.(*PushMirror) assert.True(t, ok) assert.Equal(t, "test-1", m.RemoteName) -- cgit v1.2.3