Skip to content

Commit f84ac18

Browse files
authored
feat: increase pull image retries
1 parent c160d4e commit f84ac18

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

internal/orchestrator/system.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,21 +61,24 @@ func SystemInit(ctx context.Context, cfg config.Configuration, staticStore *stor
6161
return nil
6262
}
6363

64-
func pullImage(ctx context.Context, stdout io.Writer, docker dockerClient.APIClient, imageName string) error {
65-
delay := 1 * time.Second
64+
const minDelay = 1 * time.Second
65+
const maxDelay = 10 * time.Second
6666

67+
func pullImage(ctx context.Context, stdout io.Writer, docker dockerClient.APIClient, imageName string) error {
68+
delay := minDelay
6769
var out io.ReadCloser
6870
var allErr error
6971
var lastErr error
70-
for range 4 { // 1s, 2s, 4s, 8s
72+
for range 10 { // 1s, 2s, 4s, 8s, 10s, 10s, 10s, 10s, 10s, 10s
7173
out, lastErr = docker.ImagePull(ctx, imageName, image.PullOptions{})
7274
if lastErr == nil {
7375
break // Success
7476
}
77+
allErr = errors.Join(allErr, lastErr)
78+
7579
if !strings.Contains(lastErr.Error(), "toomanyrequests") {
76-
return lastErr // Fail fast on non-rate-limit errors
80+
return allErr // Non-retryable error
7781
}
78-
allErr = errors.Join(allErr, lastErr)
7982

8083
feedback.Printf("Warning: received 'toomanyrequests' error from Docker registry, retrying in %s ...", delay)
8184

@@ -84,7 +87,7 @@ func pullImage(ctx context.Context, stdout io.Writer, docker dockerClient.APICli
8487
return ctx.Err()
8588
case <-time.After(delay):
8689
}
87-
delay *= 2
90+
delay = min(delay*2, maxDelay)
8891
}
8992
if lastErr != nil {
9093
return fmt.Errorf("failed to pull image %s after multiple attempts: %w", imageName, allErr)

0 commit comments

Comments
 (0)