Skip to content

Commit e39cf68

Browse files
Commit session before every os.Error and also interval commit session
Signed-off-by: Masudur Rahman <[email protected]>
1 parent 7947e9c commit e39cf68

File tree

1 file changed

+34
-10
lines changed

1 file changed

+34
-10
lines changed

models/migrations/v115.go

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,42 +33,66 @@ func renameExistingUserAvatarName(x *xorm.Engine) error {
3333
return err
3434
}
3535

36-
deleteList := make([]string, 0, len(users))
36+
deleteList := make(map[string]struct{})
37+
sessionOpCount := 0
3738
for _, user := range users {
3839
oldAvatar := user.Avatar
3940
newAvatar := fmt.Sprintf("%x", md5.Sum([]byte(fmt.Sprintf("%d-%s", user.ID, user.Avatar))))
40-
4141
if _, err := os.Stat(filepath.Join(setting.AvatarUploadPath, oldAvatar)); err != nil {
4242
continue
4343
}
4444

4545
fr, err := os.Open(filepath.Join(setting.AvatarUploadPath, oldAvatar))
4646
if err != nil {
47-
return err
47+
_ = commitSession(sess)
48+
return fmt.Errorf("os.Open: %v", err)
4849
}
4950
defer fr.Close()
5051

5152
fw, err := os.Create(filepath.Join(setting.AvatarUploadPath, newAvatar))
5253
if err != nil {
53-
return err
54+
_ = commitSession(sess)
55+
return fmt.Errorf("os.Create: %v", err)
5456
}
5557
defer fw.Close()
5658

5759
if _, err := io.Copy(fw, fr); err != nil {
58-
return err
60+
_ = commitSession(sess)
61+
return fmt.Errorf("io.Copy: %v", err)
5962
}
6063

6164
user.Avatar = newAvatar
6265
if _, err := sess.ID(user.ID).Update(&user); err != nil {
63-
return err
66+
return fmt.Errorf("user table update: %v", err)
6467
}
6568

66-
deleteList = append(deleteList, filepath.Join(setting.AvatarUploadPath, oldAvatar))
69+
deleteList[filepath.Join(setting.AvatarUploadPath, oldAvatar)] = struct{}{}
70+
71+
if sessionOpCount++; sessionOpCount >= 100 {
72+
if err := commitSession(sess); err != nil {
73+
return err
74+
}
75+
sessionOpCount = 0
76+
if err := sess.Begin(); err != nil {
77+
return err
78+
}
79+
}
80+
}
81+
if err := commitSession(sess); err != nil {
82+
return err
6783
}
68-
for _, file := range deleteList {
84+
for file := range deleteList {
6985
if err := os.Remove(file); err != nil {
70-
return err
86+
return fmt.Errorf("os.Remove: %v", err)
7187
}
7288
}
73-
return sess.Commit()
89+
return nil
90+
}
91+
92+
func commitSession(sess *xorm.Session) error {
93+
if err := sess.Commit(); err != nil {
94+
_ = sess.Rollback()
95+
return fmt.Errorf("db update: %v", err)
96+
}
97+
return nil
7498
}

0 commit comments

Comments
 (0)