{"record":{"id":"bea0d3f73e4b0729","repo":"dapr/dapr","slug":"error-parsing-sidecar-cpu-limit-w","errorCode":null,"errorMessage":"error parsing sidecar CPU limit: %w","messagePattern":"error parsing sidecar CPU limit: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/injector/patcher/sidecar_container.go","lineNumber":446,"sourceCode":"\treturn container, nil\n}\n\nfunc (c *SidecarConfig) getResourceRequirements() (*corev1.ResourceRequirements, error) {\n\tr := corev1.ResourceRequirements{\n\t\tLimits:   corev1.ResourceList{},\n\t\tRequests: corev1.ResourceList{},\n\t}\n\tif c.SidecarCPURequest != \"\" {\n\t\tq, err := resource.ParseQuantity(c.SidecarCPURequest)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error parsing sidecar CPU request: %w\", err)\n\t\t}\n\t\tr.Requests[corev1.ResourceCPU] = q\n\t}\n\tif c.SidecarCPULimit != \"\" {\n\t\tq, err := resource.ParseQuantity(c.SidecarCPULimit)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error parsing sidecar CPU limit: %w\", err)\n\t\t}\n\t\tr.Limits[corev1.ResourceCPU] = q\n\t}\n\tif c.SidecarMemoryRequest != \"\" {\n\t\tq, err := resource.ParseQuantity(c.SidecarMemoryRequest)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error parsing sidecar memory request: %w\", err)\n\t\t}\n\t\tr.Requests[corev1.ResourceMemory] = q\n\t}\n\tif c.SidecarMemoryLimit != \"\" {\n\t\tq, err := resource.ParseQuantity(c.SidecarMemoryLimit)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error parsing sidecar memory limit: %w\", err)\n\t\t}\n\t\tr.Limits[corev1.ResourceMemory] = q\n\t}\n","sourceCodeStart":428,"sourceCodeEnd":464,"githubUrl":"https://github.com/dapr/dapr/blob/74ad41702745709bb15fe2114ff693b8c59bc3cc/pkg/injector/patcher/sidecar_container.go#L428-L464","documentation":"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.","triggerScenarios":"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.","commonSituations":"Confusing memory suffixes (M/G) with CPU suffixes (m); writing human-readable units; copy-paste from documentation of other orchestrators.","solutions":["Use \"1\" or \"1000m\" style CPU quantities","Fix the annotation / injector default and let the pod be re-injected","Add a CI lint that runs ParseQuantity on all resource annotations"],"exampleFix":"# before\ndapr.io/sidecar-cpu-limit: \"1000M\"\n\n# after\ndapr.io/sidecar-cpu-limit: \"1\"","handlingStrategy":"validation","validationCode":"if v, ok := annotations[\"dapr.io/sidecar-cpu-limit\"]; ok {\n    if _, err := resource.ParseQuantity(v); err != nil {\n        return fmt.Errorf(\"invalid dapr.io/sidecar-cpu-limit %q: %w\", v, err)\n    }\n}","typeGuard":"func validCPUQuantity(v string) bool {\n    q, err := resource.ParseQuantity(v)\n    return err == nil && !q.IsZero() || err == nil\n}","tryCatchPattern":null,"preventionTips":["CPU limits use the same grammar as requests: \"1\" or \"1000m\"","Do not use memory suffixes (M/G) for CPU","Ensure limit >= request when both are set"],"tags":["injector","kubernetes","resources","cpu","quantity","annotation"],"backgroundTag":null,"analyzedSha":"74ad41702745709bb15fe2114ff693b8c59bc3cc","analyzedAt":"2026-08-16T04:22:26.543Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}