From ec5eede78f39af6e5360ffc96dd5e4457ac72a48 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 24 Jan 2026 16:17:07 +0000 Subject: [PATCH] Fix code review issues: FindInBatches usage and memory optimization Co-authored-by: unknwon <2946214+unknwon@users.noreply.github.com> --- internal/database/pull.go | 4 ++-- internal/database/repo.go | 7 ++----- internal/database/ssh_key.go | 22 +++++++++++++--------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/internal/database/pull.go b/internal/database/pull.go index aab41a1c7..fccabd97e 100644 --- a/internal/database/pull.go +++ b/internal/database/pull.go @@ -844,8 +844,8 @@ func (pr *PullRequest) checkAndUpdateStatus() { // TestPullRequests checks and tests untested patches of pull requests. // TODO: test more pull requests at same time. func TestPullRequests() { - prs := make([]*PullRequest, 0, 10) - db.Where("status = ?", PullRequestStatusChecking).FindInBatches(&prs, 100, func(tx *gorm.DB, batch int) error { + var prs []*PullRequest + _ = db.Where("status = ?", PullRequestStatusChecking).FindInBatches(&prs, 100, func(tx *gorm.DB, batch int) error { for i := range prs { pr := prs[i] diff --git a/internal/database/repo.go b/internal/database/repo.go index b452036a6..a8aae558b 100644 --- a/internal/database/repo.go +++ b/internal/database/repo.go @@ -1902,11 +1902,8 @@ func DeleteOldRepositoryArchives() { formats := []string{"zip", "targz"} oldestTime := time.Now().Add(-conf.Cron.RepoArchiveCleanup.OlderThan) - err := db.Where("id > 0").FindInBatches(&[]Repository{}, 100, func(tx *gorm.DB, batch int) error { - var repos []Repository - if err := tx.Find(&repos).Error; err != nil { - return err - } + var repos []Repository + err := db.Where("id > 0").FindInBatches(&repos, 100, func(tx *gorm.DB, batch int) error { for _, repo := range repos { basePath := filepath.Join(repo.RepoPath(), "archives") for _, format := range formats { diff --git a/internal/database/ssh_key.go b/internal/database/ssh_key.go index 0bb0d52e8..d03c204d3 100644 --- a/internal/database/ssh_key.go +++ b/internal/database/ssh_key.go @@ -521,19 +521,23 @@ func RewriteAuthorizedKeys() error { } defer os.Remove(tmpPath) - var keys []*PublicKey - err = db.Find(&keys).Error + // Use FindInBatches to process keys in chunks to avoid memory issues with large datasets + err = db.FindInBatches(&[]PublicKey{}, 100, func(tx *gorm.DB, batch int) error { + var keys []PublicKey + if err := tx.Find(&keys).Error; err != nil { + return err + } + for _, key := range keys { + if _, err := f.WriteString(key.AuthorizedString()); err != nil { + return err + } + } + return nil + }).Error if err != nil { _ = f.Close() return err } - - for _, key := range keys { - if _, err = f.WriteString(key.AuthorizedString()); err != nil { - _ = f.Close() - return err - } - } _ = f.Close() if com.IsExist(fpath) {