grafana/k6 · error

rate limiter error: %w

Error message

rate limiter error: %w

What it means

urlSecrets.Get respects its rate limiter before fetching a secret; if limiter.Wait fails it is almost always because the context was cancelled (k6 shutting down) rather than throttling. The secret lookup is aborted and the error is surfaced to the script.

Source

Thrown at internal/secretsource/url/url.go:164

	}, nil
}

type urlSecrets struct {
	config     extConfig
	httpClient *http.Client
	limiter    limiter
	logger     logrus.FieldLogger
}

func (us *urlSecrets) Description() string {
	return "URL-based secret source"
}

func (us *urlSecrets) Get(key string) (string, error) {
	ctx := context.Background()

	if err := us.limiter.Wait(ctx); err != nil {
		return "", fmt.Errorf("rate limiter error: %w", err)
	}

	var secret string
	// MaxRetries is the number of retries, so total attempts = retries + 1
	maxAttempts := int(us.config.MaxRetries.Int64) + 1
	backoff := time.Duration(us.config.RetryBackoff.Duration)

	err := retry(ctx, maxAttempts, backoff, us.logger, func() (error, bool) {
		// Replace {key} placeholder in URL template
		url := strings.ReplaceAll(us.config.URLTemplate, "{key}", key)

		req, err := http.NewRequestWithContext(ctx, us.config.Method.String, url, nil)
		if err != nil {
			return fmt.Errorf("failed to create request: %w", err), true
		}

		// Add headers
		for k, v := range us.config.Headers {

View on GitHub (pinned to 01ffac6f24)

Solutions

  1. Check the wrapped error; if it's a context cancellation, avoid cancelling during secret fetches
  2. Review requestsPerMinuteLimit and requestsBurst settings for consistency
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at internal/secretsource/url/url.go:164 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of grafana/k6@01ffac6f24 (2026-08-18). Data as JSON: /api/errors/3128c99b0f63ae2d. Report an issue: GitHub.