{"record":{"id":"02879e02dd027689","repo":"argoproj/argo-workflows","slug":"coudln-t-obtain-child-s","errorCode":null,"errorMessage":"coudln't obtain child %s","messagePattern":"coudln't obtain child (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"workflow/util/util.go","lineNumber":993,"sourceCode":"\t}\n\n\tfor _, wfNode := range wf.Status.Nodes {\n\t\tparentWfNode, ok := parentsMap[wfNode.ID]\n\t\tif !ok && wfNode.Name != wf.Name && !strings.HasPrefix(wfNode.Name, wf.Name+\".onExit\") {\n\t\t\treturn nil, fmt.Errorf(\"couldn't find parent node for %s\", wfNode.ID)\n\t\t}\n\n\t\tvar parentNode *dagNode\n\t\tif parentWfNode != nil {\n\t\t\tparentNode = nodes[parentWfNode.ID]\n\t\t}\n\n\t\tchildren := make([]*dagNode, 0)\n\n\t\tfor _, childID := range wfNode.Children {\n\t\t\tchildNode, ok := nodes[childID]\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"coudln't obtain child %s\", childID)\n\t\t\t}\n\t\t\tchildren = append(children, childNode)\n\t\t}\n\t\tnodes[wfNode.ID].parent = parentNode\n\t\tnodes[wfNode.ID].children = children\n\t}\n\n\tvalues := make([]*dagNode, 0)\n\tfor _, v := range nodes {\n\t\tvalues = append(values, v)\n\t}\n\treturn values, nil\n}\n\nfunc singularPath(nodes []*dagNode, toNode string) ([]*dagNode, error) {\n\tif len(nodes) == 0 {\n\t\treturn nil, fmt.Errorf(\"expected at least 1 node\")\n\t}","sourceCodeStart":975,"sourceCodeEnd":1011,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/workflow/util/util.go#L975-L1011","documentation":"Also from newWorkflowsDag (workflow/util/util.go:993): while wiring children for each node, a node's Children list contains an ID that has no corresponding entry in the workflow's Status.Nodes map. The referenced child node simply doesn't exist in the status, so the DAG can't be constructed and retry fails.","triggerScenarios":"FormulateRetryWorkflow / newWorkflowsDag encounters wfNode.Children entries pointing at node IDs absent from wf.Status.Nodes — typically truncated node status (large status dropped nodes during compression/offload), deleted pruned nodes, or corrupted status from an aborted controller write.","commonSituations":"Retrying workflows whose status was truncated because it exceeded size limits; workflows edited by scripts that removed a node but not the parent's Children reference; older cluster data migrated to a new version.","solutions":["Confirm the missing child ID is absent from `argo get <wf> -o yaml` status.nodes — this indicates corrupted/truncated status, not a user config problem.","Use `argo resubmit` (fresh run) instead of `argo retry`, which requires reconstructing the original DAG.","Restore the workflow from a backup/snapshot where status was complete, if retry of the original run is required.","Upgrade argo-workflows if this stemmed from a known status-truncation/offload bug fixed in later releases."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"wf, _ := client.ArgoprojV1alpha1().Workflows(ns).Get(ctx, name, metav1.GetOptions{})\nfor _, n := range wf.Status.Nodes {\n    for _, child := range n.Children {\n        if _, ok := wf.Status.Nodes[child]; !ok {\n            fmt.Println(\"children reference missing node:\", child)\n        }\n    }\n}","typeGuard":null,"tryCatchPattern":"newWf, err := util.FormulateRetryWorkflow(ctx, wf, ...)\nif err != nil && strings.Contains(err.Error(), \"coudln't obtain child\") {\n    // fall back to resubmitting a fresh run instead of retrying\n    newWf, err = util.FormulateResubmitWorkflow(wf)\n}","preventionTips":["Avoid external tooling that prunes or rewrites status.nodes","Upgrade the controller if status truncation bugs are known for your version","Validate workflow YAML integrity after any backup/restore operation","Treat 'children reference missing node' in status as corruption — resubmit rather than retry"],"tags":["argo-workflows","retry","dag","node-status","corruption"],"backgroundTag":"workflow-status-corrupted","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"}