diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2020-03-02 23:53:39 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-02 12:53:39 -0300 |
commit | 753c0675c14d5ac3f5fe280c13abc3f6dd011e0b (patch) | |
tree | 4f56d0a8b1139c4eecff597c934559e1895932b6 /models/migrations/v96.go | |
parent | e9afd74bbeb65c034e8de95bf3191529dbf4a1fe (diff) | |
download | gitea-753c0675c14d5ac3f5fe280c13abc3f6dd011e0b.tar.gz gitea-753c0675c14d5ac3f5fe280c13abc3f6dd011e0b.zip |
Fix migration bug on v96.go (#10572)
Diffstat (limited to 'models/migrations/v96.go')
-rw-r--r-- | models/migrations/v96.go | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/models/migrations/v96.go b/models/migrations/v96.go index b8eb201591..7a1684354a 100644 --- a/models/migrations/v96.go +++ b/models/migrations/v96.go @@ -26,23 +26,38 @@ func deleteOrphanedAttachments(x *xorm.Engine) error { sess := x.NewSession() defer sess.Close() - err := sess.BufferSize(setting.Database.IterateBufferSize). - Where("`issue_id` = 0 and (`release_id` = 0 or `release_id` not in (select `id` from `release`))").Cols("uuid"). - Iterate(new(Attachment), - func(idx int, bean interface{}) error { - attachment := bean.(*Attachment) - - if err := os.RemoveAll(models.AttachmentLocalPath(attachment.UUID)); err != nil { - return err - } + var limit = setting.Database.IterateBufferSize + if limit <= 0 { + limit = 50 + } - _, err := sess.ID(attachment.ID).NoAutoCondition().Delete(attachment) + for { + attachements := make([]Attachment, 0, limit) + if err := sess.Where("`issue_id` = 0 and (`release_id` = 0 or `release_id` not in (select `id` from `release`))"). + Cols("id, uuid").Limit(limit). + Asc("id"). + Find(&attachements); err != nil { + return err + } + if len(attachements) == 0 { + return nil + } + + var ids = make([]int64, 0, limit) + for _, attachment := range attachements { + ids = append(ids, attachment.ID) + } + if _, err := sess.In("id", ids).Delete(new(Attachment)); err != nil { + return err + } + + for _, attachment := range attachements { + if err := os.RemoveAll(models.AttachmentLocalPath(attachment.UUID)); err != nil { return err - }) - - if err != nil { - return err + } + } + if len(attachements) < limit { + return nil + } } - - return sess.Commit() } |