Skip to content

Commit

Permalink
Fix migration bug on v96.go (#10572) (#10574)
Browse files Browse the repository at this point in the history
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
  • Loading branch information
guillep2k and lunny committed Mar 2, 2020
1 parent 3c8842d commit 1d7a855
Showing 1 changed file with 31 additions and 16 deletions.
47 changes: 31 additions & 16 deletions models/migrations/v96.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}

0 comments on commit 1d7a855

Please sign in to comment.