Skip to content

Commit 9cb26b6

Browse files
committed
fix: Fetcher timeout
1 parent 8f3b070 commit 9cb26b6

1 file changed

Lines changed: 31 additions & 2 deletions

File tree

node/pkg/fetcher/fetcher.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,17 @@ import (
1111
errorSentinel "bisonai.com/miko/node/pkg/error"
1212
"bisonai.com/miko/node/pkg/utils/reducer"
1313
"bisonai.com/miko/node/pkg/utils/request"
14+
"bisonai.com/miko/node/pkg/utils/retrier"
1415
"github.com/rs/zerolog/log"
1516
)
1617

18+
const (
19+
FetcherRequestTimeout = 5 * time.Second
20+
FetcherMaxRetries = 3
21+
FetcherRetryInitDelay = 500 * time.Millisecond
22+
FetcherRetryMaxDelay = 2 * time.Second
23+
)
24+
1725
func NewFetcher(config Config, feeds []Feed, latestFeedDataMap *LatestFeedDataMap, feedDataDumpChannel chan *FeedData) *Fetcher {
1826
return &Fetcher{
1927
Config: config,
@@ -167,11 +175,32 @@ func (f *Fetcher) requestFeed(definition *Definition, proxies []Proxy) (interfac
167175
}
168176

169177
func (f *Fetcher) requestWithoutProxy(definition *Definition) (interface{}, error) {
170-
return request.Request[interface{}](request.WithEndpoint(*definition.Url), request.WithHeaders(definition.Headers))
178+
var result interface{}
179+
err := retrier.Retry(func() error {
180+
var reqErr error
181+
result, reqErr = request.Request[interface{}](
182+
request.WithEndpoint(*definition.Url),
183+
request.WithHeaders(definition.Headers),
184+
request.WithTimeout(FetcherRequestTimeout),
185+
)
186+
return reqErr
187+
}, FetcherMaxRetries, FetcherRetryInitDelay, FetcherRetryMaxDelay)
188+
return result, err
171189
}
172190

173191
func (f *Fetcher) requestWithProxy(definition *Definition, proxyUrl string) (interface{}, error) {
174-
return request.Request[interface{}](request.WithEndpoint(*definition.Url), request.WithHeaders(definition.Headers), request.WithProxy(proxyUrl))
192+
var result interface{}
193+
err := retrier.Retry(func() error {
194+
var reqErr error
195+
result, reqErr = request.Request[interface{}](
196+
request.WithEndpoint(*definition.Url),
197+
request.WithHeaders(definition.Headers),
198+
request.WithProxy(proxyUrl),
199+
request.WithTimeout(FetcherRequestTimeout),
200+
)
201+
return reqErr
202+
}, FetcherMaxRetries, FetcherRetryInitDelay, FetcherRetryMaxDelay)
203+
return result, err
175204
}
176205

177206
func (f *Fetcher) filterProxyByLocation(proxies []Proxy, location string) []Proxy {

0 commit comments

Comments
 (0)