return err
}
- if err := sess.Iterate(new(Mirror), func(_ int, bean any) error {
- m := bean.(*Mirror)
- remoteAddress, err := getRemoteAddress(sess, m.RepoID, "origin")
- if err != nil {
+ limit := setting.Database.IterateBufferSize
+ if limit <= 0 {
+ limit = 50
+ }
+
+ start := 0
+
+ for {
+ var mirrors []Mirror
+ if err := sess.Limit(limit, start).Find(&mirrors); err != nil {
return err
}
- m.RemoteAddress = remoteAddress
+ if len(mirrors) == 0 {
+ break
+ }
+ start += len(mirrors)
- _, err = sess.ID(m.ID).Cols("remote_address").Update(m)
- return err
- }); err != nil {
- return err
+ for _, m := range mirrors {
+ remoteAddress, err := getRemoteAddress(sess, m.RepoID, "origin")
+ if err != nil {
+ return err
+ }
+
+ m.RemoteAddress = remoteAddress
+
+ if _, err = sess.ID(m.ID).Cols("remote_address").Update(m); err != nil {
+ return err
+ }
+ }
+
+ if start%1000 == 0 { // avoid a too big transaction
+ if err := sess.Commit(); err != nil {
+ return err
+ }
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+ }
}
return sess.Commit()
return err
}
- if err := sess.Iterate(new(PushMirror), func(_ int, bean any) error {
- m := bean.(*PushMirror)
- remoteAddress, err := getRemoteAddress(sess, m.RepoID, m.RemoteName)
- if err != nil {
+ limit := setting.Database.IterateBufferSize
+ if limit <= 0 {
+ limit = 50
+ }
+
+ start := 0
+
+ for {
+ var mirrors []PushMirror
+ if err := sess.Limit(limit, start).Find(&mirrors); err != nil {
return err
}
- m.RemoteAddress = remoteAddress
+ if len(mirrors) == 0 {
+ break
+ }
+ start += len(mirrors)
- _, err = sess.ID(m.ID).Cols("remote_address").Update(m)
- return err
- }); err != nil {
- return err
+ for _, m := range mirrors {
+ remoteAddress, err := getRemoteAddress(sess, m.RepoID, m.RemoteName)
+ if err != nil {
+ return err
+ }
+
+ m.RemoteAddress = remoteAddress
+
+ if _, err = sess.ID(m.ID).Cols("remote_address").Update(m); err != nil {
+ return err
+ }
+ }
+
+ if start%1000 == 0 { // avoid a too big transaction
+ if err := sess.Commit(); err != nil {
+ return err
+ }
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+ }
}
return sess.Commit()