{"record":{"id":"d5ad53210974f5f8","repo":"argoproj/argo-workflows","slug":"error-creating-cache-entry-w-please-check-out-t","errorCode":null,"errorMessage":"error creating cache entry: %w. Please check out this page for help: https://argo-workflows.readthedocs.io/en/latest/memoization/#faqs","messagePattern":"error creating cache entry: %w\\. Please check out this page for help: https://argo-workflows\\.readthedocs\\.io/en/latest/memoization/#faqs","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"workflow/controller/cache/configmap_cache.go","lineNumber":206,"sourceCode":"\t\tCreationTimestamp: metav1.Time{Time: creationTime},\n\t\tLastHitTimestamp:  metav1.Time{Time: creationTime},\n\t}\n\n\tentryJSON, err := json.Marshal(newEntry)\n\tif err != nil {\n\t\tc.logError(ctx, err, logging.Fields{\"key\": key, \"nodeID\": nodeID}, \"Unable to marshal cache entry\")\n\t\treturn fmt.Errorf(\"unable to marshal cache entry: %w\", err)\n\t}\n\n\tif cache.Data == nil {\n\t\tcache.Data = make(map[string]string)\n\t}\n\tcache.Data[key] = string(entryJSON)\n\n\t_, err = c.kubeClient.CoreV1().ConfigMaps(c.namespace).Update(ctx, cache, metav1.UpdateOptions{})\n\tif err != nil {\n\t\tc.logError(ctx, err, logging.Fields{\"key\": key, \"nodeID\": nodeID}, \"Kubernetes error creating new cache entry\")\n\t\treturn fmt.Errorf(\"error creating cache entry: %w. Please check out this page for help: https://argo-workflows.readthedocs.io/en/latest/memoization/#faqs\", err)\n\t}\n\treturn nil\n}\n","sourceCodeStart":188,"sourceCodeEnd":210,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/workflow/controller/cache/configmap_cache.go#L188-L210","documentation":"When saving a memoization entry to an existing ConfigMap, the controller calls ConfigMaps.Update. A Kubernetes API error during this update is wrapped with this message plus a link to the memoization FAQ, because the most common cause is RBAC or resource-version conflicts on the memoization ConfigMap.","triggerScenarios":"CoreV1().ConfigMaps(ns).Update(cache) fails after validation passed: SA lacks update permission on configmaps, conflict (the ConfigMap was modified concurrently — stale resourceVersion), ConfigMap size limit (1 MiB) exceeded by too many entries, or API server errors.","commonSituations":"High-fanout memoized workflows writing many keys to one ConfigMap (size/conflict pressure); RBAC missing update verb; concurrent workflow completions hitting the same ConfigMap causing 409 conflicts; clusters where Argo was installed without the memoization RBAC rules.","solutions":["Read the wrapped underlying error in controller logs ('Kubernetes error creating new cache entry') — it names the exact Kubernetes cause (Forbidden/Conflict/TooLarge).","If 409 Conflict: re-run the workflow; the save will retry against the latest resourceVersion.","If Forbidden: add update/get/create verbs on configmaps for the controller SA per the memoization FAQ RBAC example.","If payload too large: split memoization across multiple ConfigMaps (distinct memoize configMap names per template) or prune old entries.","Consult the linked FAQ: https://argo-workflows.readthedocs.io/en/latest/memoization/#faqs."],"exampleFix":"# before: insufficient verbs\nverbs: [\"get\", \"create\"]\n# after\nverbs: [\"create\", \"get\", \"update\", \"delete\"]","handlingStrategy":"retry","validationCode":"kubectl auth can-i update configmaps -n <ns> --as=system:serviceaccount:<argo-ns>:workflow-controller\n# and monitor ConfigMap size: kubectl get cm <name> -o jsonpath='{.metadata.resourceVersion}' — 409s mean concurrent writers","typeGuard":null,"tryCatchPattern":"err := cache.Save(ctx, key, nodeID, entry)\nif err != nil {\n  if apierrors.IsConflict(err) {\n    // stale resourceVersion: re-get ConfigMap and retry save with backoff\n  } else if apierrors.IsForbidden(err) {\n    // fix RBAC (update verb on configmaps)\n  }\n  return err\n}","preventionTips":["Grant create/get/update/delete on configmaps to the controller SA.","Split high-volume memoization across multiple ConfigMaps to avoid 1 MiB size limits and 409 conflicts.","Use retry/backoff wrappers around memoization saves for concurrent writers.","Read the memoization FAQ linked in the error before debugging RBAC blind."],"tags":["memoization","cache","kubernetes","rbac"],"backgroundTag":"configmap-save-failed","analyzedSha":"35bff19146f5a6ada77468c431f2624bd577e373","analyzedAt":"2026-09-03T19:34:35.908Z","contentChangedAt":"2026-09-03T19:34:35.908Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}