@@ -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+
1725func 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
169177func (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
173191func (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
177206func (f * Fetcher ) filterProxyByLocation (proxies []Proxy , location string ) []Proxy {
0 commit comments