summaryrefslogtreecommitdiffstats
path: root/models/migrations/v96.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2020-03-02 23:53:39 +0800
committerGitHub <noreply@github.com>2020-03-02 12:53:39 -0300
commit753c0675c14d5ac3f5fe280c13abc3f6dd011e0b (patch)
tree4f56d0a8b1139c4eecff597c934559e1895932b6 /models/migrations/v96.go
parente9afd74bbeb65c034e8de95bf3191529dbf4a1fe (diff)
downloadgitea-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.go47
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()
}