From bc4cce138acf61a1a934098f08c3011126070424 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 6 Sep 2022 00:41:16 +0800 Subject: [PATCH] Fix delete user missed some comments (#21067) There is a mistake in the batched delete comments part of DeleteUser which causes some comments to not be deleted The code incorrectly updates the `start` of the limit clause resulting in most comments not being deleted. ```go if err = e.Where("type=? AND poster_id=?", issues_model.CommentTypeComment, u.ID).Limit(batchSize, start).Find(&comments); err != nil { ``` should be: ```go if err = e.Where("type=? AND poster_id=?", issues_model.CommentTypeComment, u.ID).Limit(batchSize, 0).Find(&comments); err != nil { ``` Co-authored-by: zeripath --- models/user.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/models/user.go b/models/user.go index fceb5aabe..68be0d855 100644 --- a/models/user.go +++ b/models/user.go @@ -102,9 +102,9 @@ func DeleteUser(ctx context.Context, u *user_model.User, purge bool) (err error) // Delete Comments const batchSize = 50 - for start := 0; ; start += batchSize { + for { comments := make([]*issues_model.Comment, 0, batchSize) - if err = e.Where("type=? AND poster_id=?", issues_model.CommentTypeComment, u.ID).Limit(batchSize, start).Find(&comments); err != nil { + if err = e.Where("type=? AND poster_id=?", issues_model.CommentTypeComment, u.ID).Limit(batchSize, 0).Find(&comments); err != nil { return err } if len(comments) == 0 { @@ -202,7 +202,7 @@ func DeleteUser(ctx context.Context, u *user_model.User, purge bool) (err error) // ***** END: ExternalLoginUser ***** if _, err = e.ID(u.ID).Delete(new(user_model.User)); err != nil { - return fmt.Errorf("Delete: %v", err) + return fmt.Errorf("delete: %v", err) } return nil