Skip to content

Commit dcf4b9e

Browse files
authored
Fix wrong migration for email address (#27106)
On Iterate, `sess` should not be used in the closure function body. Caused by #26952
1 parent ea83c06 commit dcf4b9e

File tree

1 file changed

+70
-18
lines changed

1 file changed

+70
-18
lines changed

models/migrations/v1_21/v276.go

Lines changed: 70 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,45 @@ func migratePullMirrors(x *xorm.Engine) error {
5050
return err
5151
}
5252

53-
if err := sess.Iterate(new(Mirror), func(_ int, bean any) error {
54-
m := bean.(*Mirror)
55-
remoteAddress, err := getRemoteAddress(sess, m.RepoID, "origin")
56-
if err != nil {
53+
limit := setting.Database.IterateBufferSize
54+
if limit <= 0 {
55+
limit = 50
56+
}
57+
58+
start := 0
59+
60+
for {
61+
var mirrors []Mirror
62+
if err := sess.Limit(limit, start).Find(&mirrors); err != nil {
5763
return err
5864
}
5965

60-
m.RemoteAddress = remoteAddress
66+
if len(mirrors) == 0 {
67+
break
68+
}
69+
start += len(mirrors)
6170

62-
_, err = sess.ID(m.ID).Cols("remote_address").Update(m)
63-
return err
64-
}); err != nil {
65-
return err
71+
for _, m := range mirrors {
72+
remoteAddress, err := getRemoteAddress(sess, m.RepoID, "origin")
73+
if err != nil {
74+
return err
75+
}
76+
77+
m.RemoteAddress = remoteAddress
78+
79+
if _, err = sess.ID(m.ID).Cols("remote_address").Update(m); err != nil {
80+
return err
81+
}
82+
}
83+
84+
if start%1000 == 0 { // avoid a too big transaction
85+
if err := sess.Commit(); err != nil {
86+
return err
87+
}
88+
if err := sess.Begin(); err != nil {
89+
return err
90+
}
91+
}
6692
}
6793

6894
return sess.Commit()
@@ -83,19 +109,45 @@ func migratePushMirrors(x *xorm.Engine) error {
83109
return err
84110
}
85111

86-
if err := sess.Iterate(new(PushMirror), func(_ int, bean any) error {
87-
m := bean.(*PushMirror)
88-
remoteAddress, err := getRemoteAddress(sess, m.RepoID, m.RemoteName)
89-
if err != nil {
112+
limit := setting.Database.IterateBufferSize
113+
if limit <= 0 {
114+
limit = 50
115+
}
116+
117+
start := 0
118+
119+
for {
120+
var mirrors []PushMirror
121+
if err := sess.Limit(limit, start).Find(&mirrors); err != nil {
90122
return err
91123
}
92124

93-
m.RemoteAddress = remoteAddress
125+
if len(mirrors) == 0 {
126+
break
127+
}
128+
start += len(mirrors)
94129

95-
_, err = sess.ID(m.ID).Cols("remote_address").Update(m)
96-
return err
97-
}); err != nil {
98-
return err
130+
for _, m := range mirrors {
131+
remoteAddress, err := getRemoteAddress(sess, m.RepoID, m.RemoteName)
132+
if err != nil {
133+
return err
134+
}
135+
136+
m.RemoteAddress = remoteAddress
137+
138+
if _, err = sess.ID(m.ID).Cols("remote_address").Update(m); err != nil {
139+
return err
140+
}
141+
}
142+
143+
if start%1000 == 0 { // avoid a too big transaction
144+
if err := sess.Commit(); err != nil {
145+
return err
146+
}
147+
if err := sess.Begin(); err != nil {
148+
return err
149+
}
150+
}
99151
}
100152

101153
return sess.Commit()

0 commit comments

Comments
 (0)