@@ -25,6 +25,7 @@ import (
25
25
var (
26
26
ErrUploadStageFailed = errors .New ("upload stage failed" )
27
27
ErrCopyIntoFailed = errors .New ("copy into failed" )
28
+ ErrGetPresignUrl = errors .New ("failed to get presigned url" )
28
29
)
29
30
30
31
type databendIngester struct {
@@ -86,14 +87,12 @@ func (ig *databendIngester) IngestData(threadNum int, columns []string, batchDat
86
87
87
88
stage , err := ig .uploadToStage (fileName )
88
89
if err != nil {
89
- l .Errorf ("upload to stage failed: %v\n " , err )
90
90
return err
91
91
}
92
92
93
93
copyIntoStartTime := time .Now ()
94
94
err = ig .copyInto (stage )
95
95
if err != nil {
96
- l .Errorf ("copy into failed: %v\n " , err )
97
96
return err
98
97
}
99
98
l .Infof ("thread-%d: copy into cost: %v ms" , threadNum , time .Since (copyIntoStartTime ).Milliseconds ())
@@ -137,7 +136,7 @@ func (ig *databendIngester) uploadToStage(fileName string) (*godatabend.StageLoc
137
136
presignedStartTime := time .Now ()
138
137
presigned , err := apiClient .GetPresignedURL (context .Background (), stage )
139
138
if err != nil {
140
- return nil , errors .Wrap (err , "failed to get presigned url" )
139
+ return nil , errors .Wrap (ErrGetPresignUrl , err . Error () )
141
140
}
142
141
logrus .Infof ("get presigned url cost: %v ms" , time .Since (presignedStartTime ).Milliseconds ())
143
142
@@ -206,22 +205,37 @@ func execute(db *sql.DB, sql string) error {
206
205
207
206
func (ig * databendIngester ) DoRetry (f retry.RetryableFunc ) error {
208
207
delay := time .Second
209
- maxDelay := 30 * time .Minute
208
+ maxDelay := 60 * time .Minute
209
+ maxAttempts := 500
210
+ attempt := 0
211
+
210
212
return retry .Do (
211
213
func () error {
212
- return f ()
214
+ err := f ()
215
+ if err != nil {
216
+ logrus .Infof ("Attempt %d failed: %v" , attempt , err )
217
+ }
218
+ attempt ++
219
+ return err
213
220
},
214
221
retry .RetryIf (func (err error ) bool {
215
222
if err == nil {
216
223
return false
217
224
}
218
- if errors .Is (err , ErrUploadStageFailed ) || errors .Is (err , ErrCopyIntoFailed ) {
225
+ if attempt >= maxAttempts {
226
+ logrus .Warnf ("Reached maximum retry attempts (%d)" , maxAttempts )
227
+ return false
228
+ }
229
+ if errors .Is (err , ErrUploadStageFailed ) ||
230
+ errors .Is (err , ErrCopyIntoFailed ) ||
231
+ errors .Is (err , ErrGetPresignUrl ) {
219
232
return true
220
233
}
221
234
return false
222
235
}),
223
236
retry .Delay (delay ),
224
237
retry .MaxDelay (maxDelay ),
225
238
retry .DelayType (retry .BackOffDelay ),
239
+ retry .Attempts (uint (maxAttempts )),
226
240
)
227
241
}
0 commit comments