Skip to content
This repository was archived by the owner on Sep 17, 2024. It is now read-only.

Commit 3e8aa26

Browse files
committed
chore: add backoff strategy to downloadFile
1 parent 12e71d3 commit 3e8aa26

1 file changed

Lines changed: 52 additions & 15 deletions

File tree

e2e/utils.go

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"strconv"
1111
"time"
1212

13+
backoff "github.com/cenkalti/backoff/v4"
1314
log "github.com/sirupsen/logrus"
1415
)
1516

@@ -37,38 +38,74 @@ func downloadFile(url string) (string, error) {
3738

3839
filepath := tempFile.Name()
3940

41+
var (
42+
initialInterval = 500 * time.Millisecond
43+
randomizationFactor = 0.5
44+
multiplier = 2.0
45+
maxInterval = 5 * time.Second
46+
maxElapsedTime = 3 * time.Minute
47+
)
48+
49+
exp := backoff.NewExponentialBackOff()
50+
exp.InitialInterval = initialInterval
51+
exp.RandomizationFactor = randomizationFactor
52+
exp.Multiplier = multiplier
53+
exp.MaxInterval = maxInterval
54+
exp.MaxElapsedTime = maxElapsedTime
55+
56+
retryCount := 1
57+
var fileReader io.ReadCloser
58+
59+
download := func() error {
60+
resp, err := http.Get(url)
61+
if err != nil {
62+
log.WithFields(log.Fields{
63+
"elapsedTime": exp.GetElapsedTime(),
64+
"error": err,
65+
"path": filepath,
66+
"retry": retryCount,
67+
"url": url,
68+
}).Warn("Could not download the file")
69+
70+
retryCount++
71+
72+
return err
73+
}
74+
75+
log.WithFields(log.Fields{
76+
"elapsedTime": exp.GetElapsedTime(),
77+
"retries": retryCount,
78+
"path": filepath,
79+
"url": url,
80+
}).Debug("File downloaded")
81+
82+
fileReader = resp.Body
83+
84+
return nil
85+
}
86+
4087
log.WithFields(log.Fields{
4188
"url": url,
4289
"path": filepath,
4390
}).Debug("Downloading file")
4491

45-
resp, err := http.Get(url)
92+
err = backoff.Retry(download, exp)
4693
if err != nil {
47-
log.WithFields(log.Fields{
48-
"error": err,
49-
"url": url,
50-
"path": filepath,
51-
}).Error("Error downloading file")
52-
return filepath, err
94+
return "", err
5395
}
54-
defer resp.Body.Close()
96+
defer fileReader.Close()
5597

56-
_, err = io.Copy(tempFile, resp.Body)
98+
_, err = io.Copy(tempFile, fileReader)
5799
if err != nil {
58100
log.WithFields(log.Fields{
59101
"error": err,
60102
"url": url,
61103
"path": filepath,
62-
}).Error("Error writing file")
104+
}).Error("Could not write file")
63105

64106
return filepath, err
65107
}
66108

67-
log.WithFields(log.Fields{
68-
"url": url,
69-
"path": filepath,
70-
}).Debug("File downloaded")
71-
72109
return filepath, nil
73110
}
74111

0 commit comments

Comments
 (0)