@@ -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