{"record":{"id":"8e2256d3a2b1f1e1","repo":"argoproj/argo-workflows","slug":"no-retry-node-found-by-the-name-of-s-wf-status","errorCode":null,"errorMessage":"no Retry Node found by the name of %s;  wf.Status.Nodes=%+v","messagePattern":"no Retry Node found by the name of (.+?);  wf\\.Status\\.Nodes=%\\+v","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"workflow/controller/operator.go","lineNumber":2610,"sourceCode":"\n\tif node.Fulfilled() {\n\t\twoc.controller.syncManager.Release(ctx, woc.wf, node.ID, processedTmpl.Synchronization)\n\t}\n\n\tretrieveNode, retrieveErr := woc.wf.GetNodeByName(node.Name)\n\tif retrieveErr != nil {\n\t\tnodeErr := fmt.Errorf(\"no Node found by the name of %s;  wf.Status.Nodes=%+v\", node.Name, woc.wf.Status.Nodes)\n\t\twoc.log.Error(ctx, nodeErr.Error())\n\t\twoc.markWorkflowError(ctx, nodeErr)\n\t\treturn node, nodeErr\n\t}\n\tnode = retrieveNode\n\n\t// Swap the node back to retry node\n\tif retryNodeName != \"\" {\n\t\tretryNode, getErr := woc.wf.GetNodeByName(retryNodeName)\n\t\tif getErr != nil {\n\t\t\tretryErr := fmt.Errorf(\"no Retry Node found by the name of %s;  wf.Status.Nodes=%+v\", retryNodeName, woc.wf.Status.Nodes)\n\t\t\twoc.log.Error(ctx, retryErr.Error())\n\t\t\twoc.markWorkflowError(ctx, retryErr)\n\t\t\treturn node, retryErr\n\t\t}\n\n\t\tif !retryNode.Phase.Fulfilled(retryNode.TaskResultSynced) && node.Phase.Fulfilled(node.TaskResultSynced) { // if the retry child has completed we need to update the parent's status\n\t\t\tretryNode, err = woc.executeTemplate(ctx, retryNodeName, orgTmpl, tmplCtx, args, opts)\n\t\t\tif err != nil {\n\t\t\t\treturn woc.markNodeError(ctx, node.Name, err), err\n\t\t\t}\n\t\t}\n\n\t\tif !node.Phase.Fulfilled(node.TaskResultSynced) && node.IsDaemoned() {\n\t\t\tretryNode = woc.markNodePhase(ctx, retryNodeName, node.Phase)\n\t\t\tif node.IsDaemoned() { // markNodePhase doesn't pass the Daemoned field\n\t\t\t\tretryNode.Daemoned = new(true)\n\t\t\t}\n\t\t}","sourceCodeStart":2592,"sourceCodeEnd":2628,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/workflow/controller/operator.go#L2592-L2628","documentation":"Immediately after re-reading the current node, executeTemplate re-fetches the parent retry node (identified by retryNodeName) so it can fold a completed child attempt's status back into the retry parent. If the retry node cannot be found by name in wf.Status.Nodes, the controller logs the error, marks the workflow as Error, and returns. Like its sibling error, this indicates inconsistent workflow node status.","triggerScenarios":"A template using retryStrategy executes a new attempt; executeTemplate resolves retryNodeName via wf.GetNodeByName and fails because the retry-parent node is absent from wf.Status.Nodes. Raised through executeDAGTask, hooks, onExit, or operate().","commonSituations":"Retried tasks on very large workflows where status was compressed/offloaded or nodes pruned; manual status edits removing the retry parent; controller/CRD version skew after upgrade corrupting node maps.","solutions":["Check wf.Status.Nodes in kubectl for the retry node name from the message; confirm whether it is truly gone.","Run argo retry <name> to rebuild retry node status from existing pods.","Avoid manual kubectl edits to workflow status; resubmit the workflow if status was corrupted.","Ensure controller and CRDs come from the same release (reapply manifests/install.yaml after upgrade).","Review controller logs around hydration/offloading; upgrade to the latest patch of your Argo Workflows series."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Before relying on a retried task's parent, verify the retry node exists\nwf, _ := wfClient.ArgoprojV1alpha1().Workflows(ns).Get(ctx, name, metav1.GetOptions{})\nif wf.Status.Nodes.Find(func(n wfv1.NodeStatus) bool { return n.Name == retryNodeName }) == nil {\n\treturn fmt.Errorf(\"retry node %q missing; run argo retry\", retryNodeName)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never hand-edit workflow status; retried DAGs are especially sensitive to missing retry parents.","Apply controller + CRDs from the same release version.","Monitor controller logs for hydration/offload warnings on workflows with many retries.","Recover with argo retry rather than patching node status."],"tags":["kubernetes","argo-workflows","controller","retry","state-corruption"],"backgroundTag":"missing-node-status","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"}