Skip to content

Commit a005265

Browse files
authored
small refactor for retry downloader (#16137)
Signed-off-by: a1012112796 <[email protected]>
1 parent 5c2f9b3 commit a005265

File tree

1 file changed

+83
-134
lines changed

1 file changed

+83
-134
lines changed

modules/migrations/base/retry_downloader.go

Lines changed: 83 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -31,217 +31,166 @@ func NewRetryDownloader(ctx context.Context, downloader Downloader, retryTimes,
3131
}
3232
}
3333

34-
// SetContext set context
35-
func (d *RetryDownloader) SetContext(ctx context.Context) {
36-
d.ctx = ctx
37-
d.Downloader.SetContext(ctx)
38-
}
39-
40-
// GetRepoInfo returns a repository information with retry
41-
func (d *RetryDownloader) GetRepoInfo() (*Repository, error) {
34+
func (d *RetryDownloader) retry(work func() error) error {
4235
var (
4336
times = d.RetryTimes
44-
repo *Repository
4537
err error
4638
)
4739
for ; times > 0; times-- {
48-
if repo, err = d.Downloader.GetRepoInfo(); err == nil {
49-
return repo, nil
40+
if err = work(); err == nil {
41+
return nil
5042
}
5143
if IsErrNotSupported(err) {
52-
return nil, err
44+
return err
5345
}
5446
select {
5547
case <-d.ctx.Done():
56-
return nil, d.ctx.Err()
48+
return d.ctx.Err()
5749
case <-time.After(time.Second * time.Duration(d.RetryDelay)):
5850
}
5951
}
60-
return nil, err
52+
return err
53+
}
54+
55+
// SetContext set context
56+
func (d *RetryDownloader) SetContext(ctx context.Context) {
57+
d.ctx = ctx
58+
d.Downloader.SetContext(ctx)
59+
}
60+
61+
// GetRepoInfo returns a repository information with retry
62+
func (d *RetryDownloader) GetRepoInfo() (*Repository, error) {
63+
var (
64+
repo *Repository
65+
err error
66+
)
67+
68+
err = d.retry(func() error {
69+
repo, err = d.Downloader.GetRepoInfo()
70+
return err
71+
})
72+
73+
return repo, err
6174
}
6275

6376
// GetTopics returns a repository's topics with retry
6477
func (d *RetryDownloader) GetTopics() ([]string, error) {
6578
var (
66-
times = d.RetryTimes
6779
topics []string
6880
err error
6981
)
70-
for ; times > 0; times-- {
71-
if topics, err = d.Downloader.GetTopics(); err == nil {
72-
return topics, nil
73-
}
74-
if IsErrNotSupported(err) {
75-
return nil, err
76-
}
77-
select {
78-
case <-d.ctx.Done():
79-
return nil, d.ctx.Err()
80-
case <-time.After(time.Second * time.Duration(d.RetryDelay)):
81-
}
82-
}
83-
return nil, err
82+
83+
err = d.retry(func() error {
84+
topics, err = d.Downloader.GetTopics()
85+
return err
86+
})
87+
88+
return topics, err
8489
}
8590

8691
// GetMilestones returns a repository's milestones with retry
8792
func (d *RetryDownloader) GetMilestones() ([]*Milestone, error) {
8893
var (
89-
times = d.RetryTimes
9094
milestones []*Milestone
9195
err error
9296
)
93-
for ; times > 0; times-- {
94-
if milestones, err = d.Downloader.GetMilestones(); err == nil {
95-
return milestones, nil
96-
}
97-
if IsErrNotSupported(err) {
98-
return nil, err
99-
}
100-
select {
101-
case <-d.ctx.Done():
102-
return nil, d.ctx.Err()
103-
case <-time.After(time.Second * time.Duration(d.RetryDelay)):
104-
}
105-
}
106-
return nil, err
97+
98+
err = d.retry(func() error {
99+
milestones, err = d.Downloader.GetMilestones()
100+
return err
101+
})
102+
103+
return milestones, err
107104
}
108105

109106
// GetReleases returns a repository's releases with retry
110107
func (d *RetryDownloader) GetReleases() ([]*Release, error) {
111108
var (
112-
times = d.RetryTimes
113109
releases []*Release
114110
err error
115111
)
116-
for ; times > 0; times-- {
117-
if releases, err = d.Downloader.GetReleases(); err == nil {
118-
return releases, nil
119-
}
120-
if IsErrNotSupported(err) {
121-
return nil, err
122-
}
123-
select {
124-
case <-d.ctx.Done():
125-
return nil, d.ctx.Err()
126-
case <-time.After(time.Second * time.Duration(d.RetryDelay)):
127-
}
128-
}
129-
return nil, err
112+
113+
err = d.retry(func() error {
114+
releases, err = d.Downloader.GetReleases()
115+
return err
116+
})
117+
118+
return releases, err
130119
}
131120

132121
// GetLabels returns a repository's labels with retry
133122
func (d *RetryDownloader) GetLabels() ([]*Label, error) {
134123
var (
135-
times = d.RetryTimes
136124
labels []*Label
137125
err error
138126
)
139-
for ; times > 0; times-- {
140-
if labels, err = d.Downloader.GetLabels(); err == nil {
141-
return labels, nil
142-
}
143-
if IsErrNotSupported(err) {
144-
return nil, err
145-
}
146-
select {
147-
case <-d.ctx.Done():
148-
return nil, d.ctx.Err()
149-
case <-time.After(time.Second * time.Duration(d.RetryDelay)):
150-
}
151-
}
152-
return nil, err
127+
128+
err = d.retry(func() error {
129+
labels, err = d.Downloader.GetLabels()
130+
return err
131+
})
132+
133+
return labels, err
153134
}
154135

155136
// GetIssues returns a repository's issues with retry
156137
func (d *RetryDownloader) GetIssues(page, perPage int) ([]*Issue, bool, error) {
157138
var (
158-
times = d.RetryTimes
159139
issues []*Issue
160140
isEnd bool
161141
err error
162142
)
163-
for ; times > 0; times-- {
164-
if issues, isEnd, err = d.Downloader.GetIssues(page, perPage); err == nil {
165-
return issues, isEnd, nil
166-
}
167-
if IsErrNotSupported(err) {
168-
return nil, false, err
169-
}
170-
select {
171-
case <-d.ctx.Done():
172-
return nil, false, d.ctx.Err()
173-
case <-time.After(time.Second * time.Duration(d.RetryDelay)):
174-
}
175-
}
176-
return nil, false, err
143+
144+
err = d.retry(func() error {
145+
issues, isEnd, err = d.Downloader.GetIssues(page, perPage)
146+
return err
147+
})
148+
149+
return issues, isEnd, err
177150
}
178151

179152
// GetComments returns a repository's comments with retry
180153
func (d *RetryDownloader) GetComments(issueNumber int64) ([]*Comment, error) {
181154
var (
182-
times = d.RetryTimes
183155
comments []*Comment
184156
err error
185157
)
186-
for ; times > 0; times-- {
187-
if comments, err = d.Downloader.GetComments(issueNumber); err == nil {
188-
return comments, nil
189-
}
190-
if IsErrNotSupported(err) {
191-
return nil, err
192-
}
193-
select {
194-
case <-d.ctx.Done():
195-
return nil, d.ctx.Err()
196-
case <-time.After(time.Second * time.Duration(d.RetryDelay)):
197-
}
198-
}
199-
return nil, err
158+
159+
err = d.retry(func() error {
160+
comments, err = d.Downloader.GetComments(issueNumber)
161+
return err
162+
})
163+
164+
return comments, err
200165
}
201166

202167
// GetPullRequests returns a repository's pull requests with retry
203168
func (d *RetryDownloader) GetPullRequests(page, perPage int) ([]*PullRequest, bool, error) {
204169
var (
205-
times = d.RetryTimes
206170
prs []*PullRequest
207171
err error
208172
isEnd bool
209173
)
210-
for ; times > 0; times-- {
211-
if prs, isEnd, err = d.Downloader.GetPullRequests(page, perPage); err == nil {
212-
return prs, isEnd, nil
213-
}
214-
if IsErrNotSupported(err) {
215-
return nil, false, err
216-
}
217-
select {
218-
case <-d.ctx.Done():
219-
return nil, false, d.ctx.Err()
220-
case <-time.After(time.Second * time.Duration(d.RetryDelay)):
221-
}
222-
}
223-
return nil, false, err
174+
175+
err = d.retry(func() error {
176+
prs, isEnd, err = d.Downloader.GetPullRequests(page, perPage)
177+
return err
178+
})
179+
180+
return prs, isEnd, err
224181
}
225182

226183
// GetReviews returns pull requests reviews
227184
func (d *RetryDownloader) GetReviews(pullRequestNumber int64) ([]*Review, error) {
228185
var (
229-
times = d.RetryTimes
230186
reviews []*Review
231187
err error
232188
)
233-
for ; times > 0; times-- {
234-
if reviews, err = d.Downloader.GetReviews(pullRequestNumber); err == nil {
235-
return reviews, nil
236-
}
237-
if IsErrNotSupported(err) {
238-
return nil, err
239-
}
240-
select {
241-
case <-d.ctx.Done():
242-
return nil, d.ctx.Err()
243-
case <-time.After(time.Second * time.Duration(d.RetryDelay)):
244-
}
245-
}
246-
return nil, err
189+
190+
err = d.retry(func() error {
191+
reviews, err = d.Downloader.GetReviews(pullRequestNumber)
192+
return err
193+
})
194+
195+
return reviews, err
247196
}

0 commit comments

Comments
 (0)