diff --git a/pkg/vulnloader/nvdloader/loader_feed.go b/pkg/vulnloader/nvdloader/loader_feed.go index 945d3f6d1..38eea8d9a 100644 --- a/pkg/vulnloader/nvdloader/loader_feed.go +++ b/pkg/vulnloader/nvdloader/loader_feed.go @@ -51,7 +51,14 @@ func (l *feedLoader) downloadFeedForYear(enrichments map[string]*FileFormatWrapp url := fmt.Sprintf("https://nvd.nist.gov/feeds/json/cve/2.0/nvdcve-2.0-%d.json.gz", year) const maxRetries = 10 - backoff := 10 * time.Second + backoffs := []time.Duration{ + 15 * time.Second, + 30 * time.Second, + 1 * time.Minute, + 2 * time.Minute, + 4 * time.Minute, + 5 * time.Minute, + } var apiFeed *apischema.CVEAPIJSON20 for attempt := 1; ; attempt++ { var err error @@ -62,9 +69,9 @@ func (l *feedLoader) downloadFeedForYear(enrichments map[string]*FileFormatWrapp if attempt >= maxRetries { return errors.Wrapf(err, "failed to download feed for year %d after %d attempts", year, attempt) } + backoff := backoffs[min(attempt-1, len(backoffs)-1)] log.Warnf("Feed year %d: attempt %d failed: %v; retrying in %s", year, attempt, err, backoff) time.Sleep(backoff) - backoff *= 2 } cveItems, err := toJSON10(apiFeed.Vulnerabilities)