dapr/dapr · error

error parsing sidecar CPU limit: %w

Error message

error parsing sidecar CPU limit: %w

What it means

Same resource-requirement builder, CPU limit branch: the value of dapr.io/sidecar-cpu-limit (or the injector default) fails resource.ParseQuantity. The grammar is identical to the request case: cores as plain decimals or millicores with the m suffix.

Source

Thrown at pkg/injector/patcher/sidecar_container.go:446

	return container, nil
}

func (c *SidecarConfig) getResourceRequirements() (*corev1.ResourceRequirements, error) {
	r := corev1.ResourceRequirements{
		Limits:   corev1.ResourceList{},
		Requests: corev1.ResourceList{},
	}
	if c.SidecarCPURequest != "" {
		q, err := resource.ParseQuantity(c.SidecarCPURequest)
		if err != nil {
			return nil, fmt.Errorf("error parsing sidecar CPU request: %w", err)
		}
		r.Requests[corev1.ResourceCPU] = q
	}
	if c.SidecarCPULimit != "" {
		q, err := resource.ParseQuantity(c.SidecarCPULimit)
		if err != nil {
			return nil, fmt.Errorf("error parsing sidecar CPU limit: %w", err)
		}
		r.Limits[corev1.ResourceCPU] = q
	}
	if c.SidecarMemoryRequest != "" {
		q, err := resource.ParseQuantity(c.SidecarMemoryRequest)
		if err != nil {
			return nil, fmt.Errorf("error parsing sidecar memory request: %w", err)
		}
		r.Requests[corev1.ResourceMemory] = q
	}
	if c.SidecarMemoryLimit != "" {
		q, err := resource.ParseQuantity(c.SidecarMemoryLimit)
		if err != nil {
			return nil, fmt.Errorf("error parsing sidecar memory limit: %w", err)
		}
		r.Limits[corev1.ResourceMemory] = q
	}

View on GitHub (pinned to 74ad417027)

Solutions

  1. Use "1" or "1000m" style CPU quantities
  2. Fix the annotation / injector default and let the pod be re-injected
  3. Add a CI lint that runs ParseQuantity on all resource annotations

Example fix

# before
dapr.io/sidecar-cpu-limit: "1000M"

# after
dapr.io/sidecar-cpu-limit: "1"
Defensive patterns

Strategy: validation

Validate before calling

if v, ok := annotations["dapr.io/sidecar-cpu-limit"]; ok {
    if _, err := resource.ParseQuantity(v); err != nil {
        return fmt.Errorf("invalid dapr.io/sidecar-cpu-limit %q: %w", v, err)
    }
}

Type guard

func validCPUQuantity(v string) bool {
    q, err := resource.ParseQuantity(v)
    return err == nil && !q.IsZero() || err == nil
}

Prevention

When it happens

Trigger: dapr.io/sidecar-cpu-limit containing "1 CPU", "1000M" (capital M is not a valid CPU suffix), "0.5core", "-1", or other invalid quantity strings.

Common situations: Confusing memory suffixes (M/G) with CPU suffixes (m); writing human-readable units; copy-paste from documentation of other orchestrators.

Related errors


AI-assisted analysis of dapr/dapr@74ad417027 (2026-08-16). Data as JSON: /api/errors/bea0d3f73e4b0729. Report an issue: GitHub.